#include <stdio.h> #include <stdlib.h> #include <conio.h> #include <time.h> char c; int num[6][6],step; char * d2s(int n) { switch(n) { case 0: return " "; case 2: return "2"; case 4: return "4"; case 8: return "8"; case 16: return "16"; case 32: return "32"; case 64: return "64"; case 128: return "128"; case 256: return "256"; case 512: return "512"; case 1024: return "1024"; case 2048: return "2048"; } } void Show() { printf(" 请按上下左右键操作 "); printf(" 当前已走步数:%d ",step); printf (" ┏━━┳━━┳━━┳━━┓ "); printf (" ┃%4s┃%4s┃%4s┃%4s┃ ",d2s(num[1][1]),d2s(num[1][2]),d2s(num[1][3]),d2s(num[1][4])); printf (" ┣━━╋━━╋━━╋━━┫ "); printf (" ┃%4s┃%4s┃%4s┃%4s┃ ",d2s(num[2][1]),d2s(num[2][2]),d2s(num[2][3]),d2s(num[2][4])); printf (" ┣━━╋━━╋━━╋━━┫ "); printf (" ┃%4s┃%4s┃%4s┃%4s┃ ",d2s(num[3][1]),d2s(num[3][2]),d2s(num[3][3]),d2s(num[3][4])); printf (" ┣━━╋━━╋━━╋━━┫ "); printf (" ┃%4s┃%4s┃%4s┃%4s┃ ",d2s(num[4][1]),d2s(num[4][2]),d2s(num[4][3]),d2s(num[4][4])); printf (" ┗━━┻━━┻━━┻━━┛ "); } int NewNum() { int n=((rand()*rand()+rand())%2+1)*2; // printf("%d ",n); int i,j; if(c=='w'||c==' ') { i=4; while(j=rand()%4+1) if(num[i][j]==0) { num[i][j]=n; return n; } } else if(c=='s') { i=1; while(j=rand()%4+1) if(num[i][j]==0) { num[i][j]=n; return n; } } else if(c=='a') { j=4; while(i=rand()%4+1) if(num[i][j]==0) { num[i][j]=n; return n; } } else if(c=='d') { j=1; while(i=rand()%4+1) if(num[i][j]==0) { num[i][j]=n; return n; } } return 0; } int cal() { int i,j,ok=0,k; if(c=='w') for(j=1;j<=4;++j) { //push for(i=1;i<4;++i) { k=0; while(num[i][j]==0) { ++k; if(num[i+k][j]) { ok=1; num[i][j]=num[i+k][j]; num[i+k][j]=0; break; } if(i+k>4) break; } if(i+k>4) break; } //calculate for(i=1;i<=3;++i) { if(num[i][j]==num[i+1][j]&&num[i][j]!=0) { ok=1; num[i][j]*=2; num[i+1][j]=0; } } //push for(i=1;i<4;++i) { k=0; while(num[i][j]==0) { ++k; if(num[i+k][j]) { ok=1; num[i][j]=num[i+k][j]; num[i+k][j]=0; break; } if(i+k>4) break; } if(i+k>4) break; } } if(c=='s') for(j=1;j<=4;++j) { //push for(i=4;i>0;--i) { k=0; while(num[i][j]==0) { ++k; if(num[i-k][j]) { ok=1; num[i][j]=num[i-k][j]; num[i-k][j]=0; break; } if(i-k<0) break; } if(i-k<0) break; } //calculate for(i=4;i>0;--i) { if(num[i][j]==num[i-1][j]&&num[i][j]!=0) { ok=1; num[i][j]*=2; num[i-1][j]=0; } } //push for(i=4;i>0;--i) { k=0; while(num[i][j]==0) { ++k; if(num[i-k][j]) { ok=1; num[i][j]=num[i-k][j]; num[i-k][j]=0; break; } if(i-k<0) break; } if(i-k<0) break; } } if(c=='a') for(i=1;i<=4;++i) { //push for(j=1;j<4;++j) { k=0; while(num[i][j]==0) { ++k; if(num[i][j+k]) { ok=1; num[i][j]=num[i][j+k]; num[i][j+k]=0; break; } if(j+k>4) break; } if(j+k>4) break; } //calculate for(j=1;j<=3;++j) { if(num[i][j]==num[i][j+1]&&num[i][j]!=0) { ok=1; num[i][j]*=2; num[i][j+1]=0; } } //push for(j=1;j<4;++j) { k=0; while(num[i][j]==0) { ++k; if(num[i][j+k]) { ok=1; num[i][j]=num[i][j+k]; num[i][j+k]=0; break; } if(j+k>4) break; } if(j+k>4) break; } } if(c=='d') for(i=1;i<=4;++i) { //push for(j=4;j>0;--j) { k=0; while(num[i][j]==0) { ++k; if(num[i][j-k]) { ok=1; num[i][j]=num[i][j-k]; num[i][j-k]=0; break; } if(j-k<0) break; } if(j-k<0) break; } //calculate for(j=4;j>0;--j) { if(num[i][j]==num[i][j-1]&&num[i][j]!=0) { ok=1; num[i][j]*=2; num[i][j-1]=0; } } //push for(j=4;j>0;--j) { k=0; while(num[i][j]==0) { ++k; if(num[i][j-k]) { ok=1; num[i][j]=num[i][j-k]; num[i][j-k]=0; break; } if(j-k<0) break; } if(j-k<0) break; } } return ok; } int fail() { for(int i=1;i<=4;++i) { for(int j=1;j<=4;++j) { if(num[i][j]==0) return 0; if(num[i][j]==num[i+1][j]|| num[i][j]==num[i-1][j]|| num[i][j]==num[i][j+1]|| num[i][j]==num[i][j-1]) { return 0; } } } return 1; } int operate(int key) { if(key==72) { c='w'; if(cal()) { NewNum(); return 1; } } else if(key==75) { c='a'; if(cal()) { NewNum(); return 1; } } else if(key==77) { c='d'; if(cal()) { NewNum(); return 1; } } else if(key==80) { c='s'; if(cal()) { NewNum(); return 1; } } return 0; } int success() { for(int i=1;i<=4;++i) { for(int j=1;j<=4;++j) { if(num[i][j]==2048) return 1; } } return 0; } int main() { c=' '; int key,a=1; step=0; a=NewNum(); while(1) { Show(); if((key=getch())<0) { key=getch(); } if(fail()) { printf("GAME OVER!!! "); break; } if(success()) { printf("WIN!!! "); break; } if(operate(key)) { step++; } system("cls"); } system("pause"); return 0; }