#include<iostream> #include<queue> #include <windows.h> #include <conio.h> #include <mmsystem.h> #include<time.h> #pragma comment(lib,"winmm.lib") using namespace std; HANDLE hOut; COORD pos= {0, 0}; struct Point { int x,y; Point(int xx,int yy) { x=xx; y=yy; } Point(){} }; void drawFrame() { printf("┌───┬───┬───┬───┐\n"); printf("│ │ │ │ │\n"); printf("│ │ │ │ │\n"); printf("│ │ │ │ │\n"); printf("├───┼───┼───┼───┤\n"); printf("│ │ │ │ │\n"); printf("│ │ │ │ │\n"); printf("│ │ │ │ │\n"); printf("├───┼───┼───┼───┤\n"); printf("│ │ │ │ │\n"); printf("│ │ │ │ │\n"); printf("│ │ │ │ │\n"); printf("├───┼───┼───┼───┤\n"); printf("│ │ │ │ │\n"); printf("│ │ │ │ │\n"); printf("│ │ │ │ │\n"); printf("└───┴───┴───┴───┘\n"); printf("W--上\n"); printf("A--左\n"); printf("S--下\n"); printf("D--右\n"); } void init(int map[][4]) { for(int i=0;i<4;i++) for(int j=0;j<4;j++) map[i][j]=0; } void down(int map[][4],int& score) { // printf("down\n"); int i,j,k; for(i=0;i<4;i++) { queue<int>qu; for(j=3;j>=0;j--) { if(map[j][i]!=0) { qu.push(map[j][i]); map[j][i]=0; } } j=3; while(!qu.empty()) { map[j--][i]=qu.front(); qu.pop(); } for(k=3;k>0;k--) { if(map[k][i]==map[k-1][i]) { map[k][i]=map[k][i]*2; map[k-1][i]=0; score+=map[k][i]; } } for(k=3;k>=0;k--) { if(map[k][i]!=0) { qu.push(map[k][i]); map[k][i]=0; } } j=3; while(!qu.empty()) { map[j--][i]=qu.front(); qu.pop(); } } } void up(int map[][4],int& score) {// printf("up\n"); int i,j,k; for( i=0;i<4;i++) { queue<int>qu; for( j=0;j<4;j++) { if(map[j][i]!=0) { qu.push(map[j][i]); map[j][i]=0; } } j=0; while(!qu.empty()) { map[j++][i]=qu.front(); qu.pop(); } for( k=0;k<3;k++) { if(map[k][i]==map[k+1][i]) { map[k][i]=map[k][i]*2; map[k+1][i]=0; score+=map[k][i]; } } for( k=0;k<4;k++) { if(map[k][i]!=0) { qu.push(map[k][i]); map[k][i]=0; } } j=0; while(!qu.empty()) { map[j++][i]=qu.front(); qu.pop(); } } } void right(int map[][4],int& score) {// printf("right\n"); int i,j,k; for( i=0;i<4;i++) { queue<int>qu; for( j=3;j>=0;j--) { if(map[i][j]!=0) { qu.push(map[i][j]); map[i][j]=0; } } j=3; while(!qu.empty()) { map[i][j--]=qu.front(); qu.pop(); } for( k=3;k>0;k--) { if(map[i][k]==map[i][k-1]) { // score+=map[i][k]; map[i][k]=map[i][k]*2; map[i][k-1]=0; score+=map[i][k]; } } for( k=3;k>=0;k--) { if(map[i][k]!=0) { qu.push(map[i][k]); map[i][k]=0; } } j=3; while(!qu.empty()) { map[i][j--]=qu.front(); qu.pop(); } } } void left(int map[][4],int& score) {// printf("left\n"); int i,j,k; for( i=0;i<4;i++) { queue<int>qu; for( j=0;j<4;j++) { if(map[i][j]!=0) { qu.push(map[i][j]); map[i][j]=0; } } j=0; while(!qu.empty()) { map[i][j++]=qu.front(); qu.pop(); } for( k=0;k<3;k++) { if(map[i][k]==map[i][k+1]) { map[i][k]=map[i][k]*2; map[i][k+1]=0; score+=map[i][k]; } } for( k=0;k<4;k++) { if(map[i][k]!=0) { qu.push(map[i][k]); map[i][k]=0; } } j=0; while(!qu.empty()) { map[i][j++]=qu.front(); qu.pop(); } } } bool addRandBox(int map[][4]) { Point pointList[16]; int p=0; for(int i=0;i<4;i++) { for(int j=0;j<4;j++) { if(map[i][j]==0) { pointList[p++]=Point(i, j); } } } if(p==0) { return false; } int place=rand()%p; Point point=pointList[place]; map[point.x][point.y]=2; return true; } void show(int map[][4]) { int i,j; for(i=0;i<4;i++) { for(j=0;j<4;j++) { hOut = GetStdHandle(STD_OUTPUT_HANDLE); pos.X=j*8+2; pos.Y=i*4+2; SetConsoleCursorPosition(hOut, pos); printf(" "); if(map[i][j]==0) { continue; } SetConsoleCursorPosition(hOut, pos); printf("%d",map[i][j]); } } } void flushScore(int score) { hOut = GetStdHandle(STD_OUTPUT_HANDLE); pos.X=35; pos.Y=3; SetConsoleCursorPosition(hOut, pos); printf("Score: %d ",score); } int main() { int map[4][4]; srand(time(0)); while(1) { int score=0; drawFrame(); init(map); hOut = GetStdHandle(STD_OUTPUT_HANDLE); bool life=true; while(life) { char ch=getch(); switch(ch) { case'a':; case'A':left(map,score);break; case'w':; case'W':up(map,score);break; case'd':; case'D':right(map,score);break; case's':; case'S':down(map,score);break; } if(addRandBox(map)==false) life=false; show(map); flushScore(score); } pos.X=0; pos.Y=7; SetConsoleCursorPosition(hOut, pos); printf("GAME OVER PLEASE PUSH ANY KEY TO CONTINUE..."); getch(); system("cls"); } }