C语言实验:2048游戏
该项目可以实验在控制台上借助键盘玩2048小游戏。
面向c语言初学者,大神轻喷hhh
项目效果:
开始游戏(每次2生成的位置都不同)
游戏结束
项目思路:
本人认为,是想这个项目的难点主要是数字的移动和数字2的随机生成。所以我有以下的思路:
- 借助二维数组构建表格。
- 注意备份每次执行后的数组,并且及时比对,因为2048游戏中如果数字位置没有改变不能生成新的2。
- 注意改变每次游戏的随机数种子,使游戏可玩性上升。我引入<time.h>读取机器的时间改变种子。
- 键盘输入时用getch()读值,读到的字符数据不会显示,影响游戏。
- 键盘操作使用switch语句控制,注意数字改变时要有顺序(个人认为和线性代数求行列式消去时按顺序消去道理一样hhhhh)
- 当数字周围没有相同值而且表格写满时,结束游戏。
下面介绍我用到的代码段:
程序设计基本思路如下:
初始化—>生成2—>备份数组—>读取键盘值并执行相关代码—>比对数组—>生成2—>清屏and输出—>判断游戏是否结束
并执行这样的循环,直到玩家按q退出或是游戏结束。
所以我先分块声明定义了以下函数:
一、数组和程序的初始化
void setUp(){
int i,j;
for(i=0;i<4;i++){
for(j=0;j<4;j++){
a1[i][j]=0;
}
}
srand(time(NULL));//设置随机种子
}
先给二维数组a1赋值为0,并借助srand(time(NULL))随机选取种子,保证游戏的可玩性。
二、备份数组
void copyData(){
int i,j;
for(i=0;i<4;i++){
for(j=0;j<4;j++){
a2[i][j]=a1[i][j];
}
}
}
和比对函数搭配使用。如果接收键盘值后,数组没有发生改变,说明是无效操作。不能生成数字2.
三、比对数组
int compareData(){
int i,j,flag=0;
for(i=0;i<4;i++){
for(j=0;j<4;j++){
if(a2[i][j]!=a1[i][j])
flag=1;
}
}
return flag;
}
通过返回标准值判断数组是否有改变,如果flag值为1证明是有效操作,执行生成2的语句。
四、计算空白格数
int numVoid(){
int i,j,n=0;
for(i=0;i<4;i++){
for(j=0;j<4;j++){
if(a1[i][j]==0)
n++;
}
}
return n;
}
循环语句统计数组中0的个数。
五、生成数字