#include
#include
#include
#include
#define WINVALUE 1024//定义宏常量,用于控制游戏胜利的条件,可以自行修改。
/*
"2048"游戏自写源代码
游戏名称:2048
游戏界面:
主菜单
游戏界面
游戏规则:
运行游戏程序,会出现主菜单,显示了游戏名称以及一些其他的信息。
根据下面提示:
按‘Y’或‘y’开始游戏,此时主菜单被游戏界面代替。
按‘N’或‘n’退出游戏,此时游戏程序结束。
【重要】:首先必须了解本游戏总共有三种状态
1.可继续的状态
2.失败的状态
3.胜利的状态
游戏界面:
第一行显示游戏的局数
中间是4X4的方块
下方是score(成绩)、step(步数)、maxnumber(此时16个方块中最大的数字)
游戏操作:
‘a’:将所有的方块左移
‘w’:将所有的方块上移
‘d’:将所有的方块右移
‘s’:将所有的方块下移
判断胜利:
当maxnumber的值,也就是16个方块中最大的数达到2048时,游戏胜利。
判断失败:
当16个格子被填满,并且每个格子中的数字和它周围的格子中的数字不相等,
也就是不能再消去的时候,判定游戏失败。
自定义函数列表:
1.int showmain();
函数功能:
显示主菜单
返回值:
1,表示用户输入y或者Y,即为用户确定要进行游戏。此时调用show()函数,显示游戏界面
0,表示用户输入n或者N,即为用户取消了进入游戏的操作,直接调用exit(0)函数结束游戏程序
备注:
每当游戏程序运行调用此函数,只显示一次。
2.void clean();
函数功能:
清屏
触发条件:
1,从主菜单切换到游戏界面,需要清除主菜单在屏幕上打印的菜单信息
2,游戏开始以后,每次按动方向键,每个格子的数据都会更新,此函数用于清除上次残留在屏幕的信息
3,当游戏胜利或者结束,当用户表示自己需要重新玩一遍的时候,清空屏幕
3.void start();
函数功能:
初始化所有的方块的值为0
初始化step的值为0
初始化score的值为0
初始化max的值为0
备注:当游戏重新开始,必须调用此函数
4.void show();
函数功能:
显示游戏界面
备注:
配合clean()函数一起使用,在游戏开始后,只要游戏没有结束,每调用一次清屏函数,
然后就调用此函数进行数据的显示,两者配合从而实现更新屏幕显示的效果
5.int key();
函数功能:
监听用户按下的是哪个方向键,从而根据不同的按键对16个数据进行操作
6.void leftjudge();
函数功能:
当左键被按下,判断4X4的格子中是否有相邻的格子中的数据相等,如果某两个左右相邻的格子中的数据相等
则将左方的数据翻倍,右方的数据初始化为0
备注:
此函数只是将相邻的并且相等的数据进行了一定方向的合并,并没有按照此方向进行数据的位置移动
因此必须在之后紧接着调用leftmove函数
//按键为'a',即为左,此函数利用两层循环语句判断“横向”是否有相邻的相等方格,
//如果有则把右侧的数值在左侧的上进行叠加,
//并将右侧的数字初始化为0
7.void leftmove();
函数功能:
由于前一步调用了leftjudge函数,4X4方格中已经完成了合并相等的数据的操作,只需要进行方块数据的移动即可。
将数据移动至按键方向。
备注:
leftjudge()函数的后继函数,必须在leftjudge函数之后紧接着执行
8.void rightjudge();
原理类似leftjudge();
9.void rightmove();
原理类似leftmove();
10.void upjudge();
原理类似leftjudge();
11.void upmove();
原理类似leftmove();
12.void downjudge();
原理类似leftjudge();
13.void downmove();
原理类似leftmove();
14.void produce();
函数功能:
判断所有的方块中的数据,找出为零的所有方块,并随机选择某一个值为0的方块,将这个方块的值随机赋为2或者4;
15.int lose();
函数功能:
判断游戏是否结束
返回值:
0,游戏继续
1,游戏结束
备注:
判断游戏是否结束的依据为:
所有方块都不为空(full() == 0);
并且 16个方块中没有可以结合的方块组
16.int full();
函数功能:
判断4X4的方格中有没有空的方格
返回值:
1,说明方格已满
0;说明未满
17. int combine();
函数功能:
判断是否具有可以合并的方块
返回值:
1,说明存在可以结合的相邻方块组
0;说明不存在
18.int win();
函数功能:
判断游戏是否胜利(通过判断16个方块中最大的数字和胜利条件是否相等,(胜利条件由宏常量WINVALUE决定))
返回值:
0,游戏继续
1,游戏胜利
19. void big();
函数功能:
找出16个格子中的最大值
并将值赋给全局变量max
*/