2048游戏C语言代码

听说2048游戏实现起来很easy!

所以今天就试了试!确实不太难,要想编的很成功,也不是太容易!有很多细节需要考虑!

下面是我自己设计的代码,估计里面会漏洞百出!希望路过大神能指点一二!

  1. #include<stdio.h>

  2. #include<stdlib.h>

  3. #include<conio.h>

  4. #include<time.h>

  5. #define WIN 256 // 可以修改决定游戏输赢的值

  6. // 矩阵数组

  7. int num[4][4]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

  8. int t[5]={0,0,0,0,0}; // 辅助数组

  9. int move=0; // 记录移动步数

  10. int score=0; // 记录得分情况

  11. int max=0; // max表示游戏输赢,max=WIN时赢

  12. int change=1;

  13. // 产生一个随机位置和随机数

  14. void Srand()

  15. {

  16. int i,j;

  17. do// 产生一个随机位置,如果产生的位置有数据,就继续随机生成一个新位置

  18. {

  19. i=((unsigned)rand())%4;

  20. j=((unsigned)rand())%4;

  21. }while(num[i][j]!=0);

  22. if(((unsigned)rand())%4==0)

  23. { // 产生一个随机数,如果该数对4取余=0,则填充为4

  24. num[i][j]=4;

  25. }

  26. else

  27. {

  28. num[i][j]=2;

  29. }

  30. move++;

  31. }

  32. void Print()

  33. {

  34. system("CLS");

  35. printf("*~~~~~~~~2048~~~~~~~*\n");

  36. printf("*author: 亚威 *\n");

  37. printf("*得分: %d 步数: %d \n",score,move);

  38. printf("*~~~~~~~~~~~~~~~~~~~*\n");

  39. for(int i=0;i<=3;i++)

  40. {

  41. for(int j=0;j<=3;j++)

  42. {

  43. if(num[i][j]==0)

  44. printf("* ");

  45. else

  46. printf("*%4d",num[i][j]);

  47. }

  48. printf("*\n*~~~~~~~~~~~~~~~~~~~*\n");

  49. }

  50. }

  51. // 消除t数组中前面和中间出现的0

  52. void fun()

  53. {

  54. int i,j;

  55. for(i=0;i<=3;i++)

  56. {

  57. if(t[i]==0)

  58. {

  59. for(j=i+1;j<=3;j++)

  60. {

  61. if(t[j]!=0)

  62. {

  63. change=1;

  64. break;

  65. }

  66. }

  67. t[i]=t[j];

  68. t[j]=0;

  69. }

  70. if(j>=3)

  71. break;

  72. }

  73. }

  74. // 合并操作

  75. void hebing()

  76. {

  77. for(int i=0;i<=2;i++)

  78. {

  79. if((t[i]!=0)&&(t[i]==t[i+1]))

  80. {

  81. t[i]*=2;

  82. score+=t[i];

  83. change=1;

  84. t[i+1]=0;

  85. }

  86. if(max<t[i])

  87. max=t[i];

  88. }

  89. }

  90. // 合并相邻且相等的两个数

  91. void add()

  92. {

  93. fun(); // 消除前面的和中间的0

  94. hebing(); // 合并相邻且相等的两个数

  95. fun(); // 再次消0

  96. }

  97. int main()

  98. {

  99. int i,j;

  100. int gameover=1;

  101. // 产生一个随机位置

  102. srand((unsigned)time(NULL));

  103. max=0;

  104. while(gameover&&(max<WIN))

  105. {

  106. if(change)

  107. {

  108. Srand(); // 产生一个随机位置和随机数

  109. }

  110. change=0;

  111. Print(); // 显示界面

  112. char in=getch(); // 读取操作命令

  113. switch(in)

  114. {

  115. case 'w':

  116. case 'W':

  117. for(i=0;i<=3;i++)

  118. { // 依次处理第1至第4列

  119. for(j=0;j<=3;j++)

  120. { // 把第i列的数据依次赋给辅助数组t

  121. t[j]=num[j][i];

  122. }

  123. add(); // 核心:合并相邻且相等的两个数

  124. for(j=0;j<=3;j++)

  125. { // 把处理后的数据依次放到矩阵对应位置

  126. num[j][i]=t[j];

  127. }

  128. }

  129. break;

  130. case 's':

  131. case 'S':

  132. for(i=0;i<=3;i++)

  133. { // 依次处理第1至第4列

  134. for(j=0;j<=3;j++)

  135. { // 把第i列的数据依次赋给辅助数组t

  136. t[3-j]=num[j][i];

  137. }

  138. add(); // 核心:合并相邻且相等的两个数

  139. for(j=0;j<=3;j++)

  140. { // 把处理后的数据依次放到矩阵对应位置

  141. num[j][i]=t[3-j];

  142. }

  143. }

  144. break;

  145. case 'a':

  146. case 'A':

  147. for(i=0;i<=3;i++)

  148. { // 依次处理第1至第4列

  149. for(j=0;j<=3;j++)

  150. { // 把第i列的数据依次赋给辅助数组t

  151. t[j]=num[i][j];

  152. }

  153. add(); // 核心:合并相邻且相等的两个数

  154. for(j=0;j<=3;j++)

  155. { // 把处理后的数据依次放到矩阵对应位置

  156. num[i][j]=t[j];

  157. }

  158. }

  159. break;

  160. case 'd':

  161. case 'D':

  162. for(i=0;i<=3;i++)

  163. { // 依次处理第1至第4列

  164. for(j=0;j<=3;j++)

  165. { // 把第i列的数据依次赋给辅助数组t

  166. t[3-j]=num[i][j];

  167. }

  168. add(); // 核心:合并相邻且相等的两个数

  169. for(j=0;j<=3;j++)

  170. { // 把处理后的数据依次放到矩阵对应位置

  171. num[i][j]=t[3-j];

  172. }

  173. }

  174. break;

  175. }

  176. gameover=0;

  177. for(i=0;i<=3;i++)

  178. {

  179. for(j=0;j<=3;j++)

  180. {

  181. if(num[i][j]==0)

  182. gameover=1;

  183. }

  184. }

  185. if((gameover==0)&&(change==0))

  186. break;

  187. }

  188. Print();

  189. if(max>=WIN)

  190. {

  191. printf("You Win!\n");

  192. printf("你很牛啊!!!\n");

  193. }

  194. else

  195. {

  196. printf("Gameover\n");

  197. printf("努力啊!!!\n");

  198. }

  199. system("pause");

  200. return 0;

  201. }

分享个C/C++学习交流?QQ群:389318488,群内提供免费教学视频及资料编译器等等,有大牛解答疑问,能给你提供职业生涯的一些建议!

猜你喜欢

转载自blog.csdn.net/qq_42784210/article/details/81223696
今日推荐