最近无聊,就玩了几遍2048这款游戏,下面我们就用C++来实现。
首先我们来描述一下2048游戏的规则;
1.游戏开始的时候,在一个4*4的二维空间,随机产生2或者4;
2.可以选择上下左右的滑动,如果遇到相同的数字,该数字乘2;
3.滑动结束后,检测是否有剩余的空间,如果有,则在该位置随机生成2或者4;
4.然后继续步骤2.
5.如果检测到有数字2048,游戏胜利,则游戏结束;无法继续滑动,游戏失败,游戏结束。
基于以上规则,我们设计游戏结构:
- 生成二维4*4的空间,以数组map[4][4]描述,随机种子数rand();
- 滑动的函数move();由于四个方向的移动代码类似,可以专门写一个移动的类实现;
- 检测是否可以移动的函数,gameover();
- 在终端显示的类display;
对于初学者,我们可以先写出一维空间的“2048”;
下面我们就开始:
一、首先我们来定义二维空间内的move函数:
void Move::left()//向左移动
{
for (int row = 0; row < Row; row++)//每一行移动
{//首先如果有空位就进行移动
for (int coloum = 0; coloum < Coloum - 1; coloum++)//行内的4个元素依次移动
{
if (map[row][coloum] ==0)//判断是否有空格
for (int j = coloum + 1; j < Coloum; j++)//空格后的元素
{
if (map[row][j] != 0)//空格后的非0元素移向空格
{
map[row][coloum] = map[row][j];
map[row][j] = 0;//移动元素赋值0
}
}
}
//合并相同的元素
if (map[row][0] != 0) //如果第一个元素是0,说明全是空的,没必要合并
{
for (int coloum = 0; coloum < Coloum - 1; coloum++)//行内的4个元素依次移动
{
if (map[row][coloum] == 0) break;//说明接下来元素都是空的,不用执行
if (map[row][coloum] == map[row][coloum + 1])//空格后的非0元素移向空格
{
map[row][coloum] *=