在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1 /*2048*/ 2 3 #include<stdio.h> 4 #include<stdlib.h> 5 #include<conio.h> 6 #include<time.h> 7 8 void print(void);/*显示游戏界面*/ 9 int add(void);/*对中间变量数组进行处理*/ 10 11 int code[4][4] = 12 { 13 {0,0,0,0}, 14 {0,0,0,0}, 15 {0,0,0,0}, 16 {0,0,0,0}, 17 };/*游戏中的16个格子*/ 18 int temp[5];/*中间变量*/ 19 int move = 0;/*移动次数*/ 20 int score = 0;/*分数*/ 21 22 23 24 int main(void) 25 { 26 int gameover = 0;/*判断游戏是否结束,1结束,0继续*/ 27 int i,j; 28 int change = 1;/*判断格子中的数是否改变,0不变*/ 29 char input; 30 srand((unsigned)time(NULL));/*设置随机数的起点*/ 31 while(gameover == 0) 32 { 33 if(change >= 1)/*仅当数发生改变时添加新数*/ 34 { 35 do 36 { 37 i=((unsigned)rand()) % 4; 38 j=((unsigned)rand()) % 4; 39 }while(code[i][j] != 0); 40 if(((unsigned)rand()) % 4 == 0) 41 { 42 code[i][j]=4; 43 } 44 else 45 { 46 code[i][j]=2;/*随机选一个空格填上2或4*/ 47 } 48 move++;/*增加次数*/ 49 } 50 print();/*显示*/ 51 input = getch();/*输入方向*/ 52 change = 0; 53 switch(input) 54 { 55 case '0':/*退出*/ 56 printf("Are you sure to exit?(y/n)"); 57 input=getchar(); 58 if(input=='y'||input=='Y') 59 exit(0); 60 break; 61 62 case 'W': 63 64 case 'w':/*上*/ 65 for(j=0;j<=3;j++) 66 { 67 for(i=0;i<=3;i++) 68 { 69 temp[i]=code[i][j];/*把一列数移到中间变量*/ 70 } 71 temp[4]=0; 72 change += add(); 73 for(i=0;i<=3;i++) 74 { 75 code[i][j]=temp[i];/*把处理好的中间变量移回来*/ 76 } 77 } 78 break; 79 80 case 'A': 81 82 case 'a':/*左*/ 83 for(i=0;i<=3;i++) 84 { 85 for(j=0;j<=3;j++) 86 { 87 temp[j]=code[i][j];/*把一行数移到中间变量*/ 88 } 89 temp[4]=0; 90 change += add(); 91 for(j=0;j<=3;j++) 92 { 93 code[i][j]=temp[j];/*把处理好的中间变量移回来*/ 94 } 95 } 96 break; 97 98 case 'S': 99 100 case 's':/*下*/ 101 for(j=0;j<=3;j++) 102 { 103 for(i=0;i<=3;i++) 104 { 105 temp[i]=code[3-i][j];/*把一列数移到中间变量*/ 106 } 107 temp[4]=0; 108 change += add(); 109 for(i=0;i<=3;i++) 110 { 111 code[3-i][j]=temp[i];/*把处理好的中间变量移回来*/ 112 } 113 } 114 break; 115 116 case 'D': 117 118 case 'd':/*右*/ 119 for(i=0;i<=3;i++) 120 { 121 for(j=0;j<=3;j++) 122 { 123 temp[j]=code[i][3-j];/*把一行数移到中间变量*/ 124 } 125 temp[4]=0; 126 change += add(); 127 for(j=0;j<=3;j++) 128 { 129 code[i][3-j]=temp[j];/*把处理好的中间变量移回来*/ 130 } 131 } 132 break; 133 } 134 gameover=1; 135 for(i=0;i<=3;i++) 136 for(j=0;j<=3;j++) 137 if(code[i][j]==0) 138 gameover=0;/*所有格子都填满则游戏结束*/ 139 } 140 printf("Game over!\n"); 141 getch(); 142 143 return 0; 144 } 145 146 void print(void)/*显示游戏界面*/ 147 { 148 int i,j; 149 system("CLS");/*清屏*/ 150 printf("2048\n"); 151 printf("W--UP A--LEFT S--DOWN D--RIGHT 0--EXIT\n"); 152 printf("Score:%d Move:%d\n",score,move); 153 printf("Made by lanshanxiao\n"); 154 printf("|-----------------------|\n");/*显示横向分隔线*/ 155 for(i=0;i<=3;i++) 156 { 157 for(j=0;j<=3;j++) 158 { 159 if(code[i][j]==0) 160 { 161 printf("| ");/*0显示空格*/ 162 } 163 else 164 { 165 printf("|%5d",code[i][j]);/*显示数字和分隔线*/ 166 } 167 } 168 printf("|\n|-----------------------|\n");/*显示横向分隔线*/ 169 } 170 } 171 172 int add(void)/*对中间变量数组进行处理*/ 173 { 174 int i; 175 int t=0; 176 int change=0;/*判断数组是否有改变,0不变,1变化*/ 177 do 178 { 179 for(i=0;i<=3;i++) 180 { 181 if(temp[i]==0) 182 { 183 if(temp[i]!=temp[i+1]) 184 change=1;/*当一个0后面不是0时数组改变*/ 185 temp[i]=temp[i+1]; 186 temp[i+1]=0; 187 } 188 }/*去掉中间的0*/ 189 t++; 190 }while(t<=3);/*重复多次*/ 191 for(i=1;i<=3;i++) 192 { 193 if(temp[i]==temp[i-1]) 194 { 195 if(temp[i]!=0) 196 { 197 change=1;/*当两个非零相同的数相加时数组改变*/ 198 score=score+temp[i];/*加分*/ 199 } 200 temp[i-1]=temp[i-1]*2; 201 temp[i]=0; 202 } 203 }/*把两个相邻的相同的数加起来*/ 204 205 return change; 206 } 2048小游戏代码在上面的View Code中,将加号展开就可以看到。 点击源码上的复制按键还可以直接将源代码复制下来。
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论