2048游戏

来源:互联网 发布:mac os 彻底删除软件 编辑:程序博客网 时间:2024/05/19 20:01

游戏动过dos窗口不断刷新进行实现,画面比较丑陋。练手用的。

#include "stdio.h"#include "stdlib.h"#include "time.h"#include "conio.h"int And (int a[][4],int point){int i,j,k,move=0; switch(point){case 8:{for(j=0;j<4;j++)for(i=0;i<4;i++){if(a[i][j]==0){for(k=i+1;k<4;k++)if(a[k][j]!=0){move=1;a[i][j]=a[k][j];a[k][j]=0;break;}if(k==4)break;}for(k=i+1;k<4;k++){if(a[k][j]!=a[i][j] &&a[k][j]!=0)break;if(a[k][j]==a[i][j]){move=1;a[i][j]+=a[k][j];a[k][j]=0;break;}}}break;}case 4:{for(i=0;i<4;i++)for(j=0;j<4;j++){if(a[i][j]==0){for(k=j+1;k<4;k++)if(a[i][k]!=0){move=1;a[i][j]=a[i][k];a[i][k]=0;break;}if(k==4)break;}for(k=j+1;k<4;k++){if(a[i][k]!=a[i][j] &&a[i][k]!=0)break;if(a[i][k]==a[i][j]){move=1;a[i][j]+=a[i][k];a[i][k]=0;break;}}}break;}case 5:{for(j=0;j<4;j++)for(i=3;i>=0;i--){if(a[i][j]==0){for(k=i-1;k>=0;k--)if(a[k][j]!=0){move=1;a[i][j]=a[k][j];a[k][j]=0;break;}if(k==-1)break;}for(k=i-1;k>=0;k--){if(a[k][j]!=a[i][j] &&a[k][j]!=0)break;if(a[k][j]==a[i][j]){move=1;a[i][j]+=a[k][j];a[k][j]=0;break;}}}break;}case 6:{for(i=0;i<4;i++)for(j=3;j>=0;j--){if(a[i][j]==0){for(k=j-1;k>=0;k--)if(a[i][k]!=0){move=1;a[i][j]=a[i][k];a[i][k]=0;break;}if(k==4)break;}for(k=j-1;k>=0;k--){if(a[i][k]!=a[i][j] && a[i][k]!=0)break;if(a[i][k]==a[i][j]){move=1;a[i][j]+=a[i][k];a[i][k]=0;break;}}}break;}default :{printf("error! please again!!\n");point=getch();And(a,point-48);}}return move;} void Fill_in(int a[][4]){int line,row,random;do{line=rand()%4; row=rand()%4;}while(a[line][row]!=0);random=rand()%2;if(random==0)a[line][row]=2;elsea[line][row]=4;}void output(int a[][4],int sum){int i,j;printf("\n\t\t||||======================================||||\n");printf("\n\t\t||||===========上下左右为8,5,4,6==========||||\n",sum);printf("\n\t\t|============================================|\n");printf("\n\t\t|=============  The sum is  %5d   =========|\n",sum);printf("\n\t\t|============================================|\n");printf("\t\t\t|---------------------------|\n");for(i=0;i<4;i++){ printf("\t\t\t|");for(j=0;j<4;j++)if(a[i][j]!=0)printf("%4d  |",a[i][j]);elseprintf("      |");printf("\n\t\t\t|---------------------------|\n");}} int  executable(int a[][4]){int i,j,flag=0,sum=0;for(i=0;i<4;i++)for(j=0;j<4;j++){ sum+=a[i][j];if(a[i][j]==0)flag=1;} return sum*10+flag;}void game(int a[][4]){int point;while(executable(a)%10){Fill_in(a);output(a,executable(a)/10);do{point=getch();printf("\t\t\tcan't move\n");}while(!And(a,point-48) && executable(a)%10);system("CLS"); }printf("\t\t\tlose\n"); }void clean(int a[][4]){int i,j;for(i=0;i<4;i++)for(j=0;j<4;j++) a[i][j]=0;}int main(){system("color 1e");int a[4][4]={0};int  again=1;srand(time(0));while(again==1){game(a);printf("If you want to again,point \"1\",else point \"0\"\n");scanf("%d",&again);clean(a);system("CLS"); }return 0;}

0 0