c++编写简易版2048小游戏

简介: c++编写简易版2048小游戏

别的不多说,先上效果图
在这里插入图片描述
我们都知道2048是个44的方格,为了方便数组下表我们生成55的数组,只用到1~4的下标。

初始化时候先随便生成两个目标

// 程序初始化
void init()
{
    score = 0;
    memset(a, 0, sizeof(a));
    int x1 = rand() % 4 + 1, y1 = rand() % 4 + 1, x2 = rand() % 4 + 1, y2 = rand() % 4 + 1;    // 随机生成两个初始点
    a[x1][y1] = a[x2][y2] = 2;                // 初始点初始化为 2
}

画图操作,就是把有数组都打印出来,数字为0的就打印空字符,数字不为0的,就打印数字。

void drawmap()
{
    system("cls");
    
    for (int i = 1; i <= 4; i++)
    {
        for (int j = 1; j <= 4; j++)
        {
            if (a[i][j])            // 如果该位置没有数字,则不绘制
            {
                if(a[i][j]>1000)
                    cout<<a[i][j]<<" ";
                else if(a[i][j]>100)
                    cout<<a[i][j]<<"  ";
                else if(a[i][j]>10)
                    cout<<" "<<a[i][j]<<"  ";
                else
                    cout<<"  "<<a[i][j]<<"  ";
            }
            else
            {
                cout<<"     ";
            }
        }
        cout<<"\n";
            
    }
            
    
}

然后就是移动了,我这里用输入字符控制,用wsad,控制上下左右。

// 玩家操作
void move()
{
    memcpy(b, a, sizeof(a));            // 将 a 备份至 b
    memset(mov, false, sizeof(mov));    // 初始化 mov 为 false(所有点均未移动)
    char c;
    cin>>c;

    if(c=='w') //向上
    {
        for (j = 1; j <= 4; j++)
            for (i = 2; i <= 4; i++)
            {
                if (!a[i][j])continue;
                int k = i;
                while (!a[k - 1][j] && k >= 2)
                {
                    a[k - 1][j] = a[k][j];
                    a[k][j] = 0;
                    k--;
                }
                if (a[k][j] == a[k - 1][j] && !mov[k - 1][j])
                {
                    a[k - 1][j] = 2 * a[k][j];
                    a[k][j] = 0;
                    mov[k - 1][j] = true;
                    score += a[k - 1][j];
                }
            }
    }
    else if(c=='s') //向下 
    {
        //。。。
    } 
    else if(c=='a') //向左
    {
        //。。。
    } 
    else if(c=='d')
    {
    }
}

还有判断游戏结束和游戏胜利

// 判断游戏结束,对于任意一个位置,该位置为空 或 四周有位置上的数字与该位置上数字相等,说明可继续移动(游戏可继续),否则游戏结束

// 判断胜利,有任意一个位置达到 2048,则胜利

bool gameover()
{

    for (i = 1; i <= 4; i++)
        for ( j = 1; j <= 4; j++)
            if (!a[i][j] || a[i][j] == a[i + 1][j] || a[i][j] == a[i - 1][j] || a[i][j] == a[i][j + 1] || a[i][j] == a[i][j - 1])return false;
    
    return true;
}


bool win()
{
    for ( i = 1; i <= 4; i++)
        for ( j = 1; j <= 4; j++)
            if (a[i][j] == 256)return true;
    return false;
}

其实这个2048小游戏并不是特别的难,主要难点在于算法。只要算法思想了解之后,就可以很简单地做出一个完整的游戏。

界面并非做游戏最重要的东西,随便弄一个游戏引擎就能把游戏界面做得更重要。有想要学习游戏编程的,可以找我。公众号:诗一样的代码。我带你学。

相关文章
|
算法 定位技术 C++
【兔年之兔子走迷宫】 用一个小游戏对回溯法进行实现 | C++
简单的来说,算法就是用计算机程序代码来实现数学思想的一种方法。学习算法就是为了了解它们在计算机中如何演算,以及在当今的信息时代,它们是如何在各个层面上影响我们的日常生活的,从而提高我们的逻辑思维能力和处理实际问题的能力。善用算法、巧用算法,是培养程序设计逻辑的重中之重,许多实际的问题都可用多个可行的算法来解决, 但是要从中找出最优的解决算法却是一项挑战。
551 6
【兔年之兔子走迷宫】 用一个小游戏对回溯法进行实现 | C++
推箱子小游戏(c++实现)
推箱子小游戏(c++实现)
C++急速赛车小游戏(注释几天后更新)
C++急速赛车小游戏(注释几天后更新)
242 0
C++急速赛车小游戏(注释几天后更新)
【推荐福利】c++使用easyx做出像素鸟,简单上手小游戏
【推荐福利】c++使用easyx做出像素鸟,简单上手小游戏
c++【键盘读入操作】,两种方法做小游戏的控制摇杆
c++【键盘读入操作】,两种方法做小游戏的控制摇杆
c++【键盘读入操作】,两种方法做小游戏的控制摇杆
|
算法 定位技术 C++
用c++写一个的一个推箱子小游戏
用c++写一个的一个推箱子小游戏
用c++写一个的一个推箱子小游戏
c++循环、continue、排序、goto以及猜数字小游戏
c++循环、continue、排序、goto以及猜数字小游戏
|
4天前
|
存储 编译器 C++
【c++】类和对象(中)(构造函数、析构函数、拷贝构造、赋值重载)
本文深入探讨了C++类的默认成员函数,包括构造函数、析构函数、拷贝构造函数和赋值重载。构造函数用于对象的初始化,析构函数用于对象销毁时的资源清理,拷贝构造函数用于对象的拷贝,赋值重载用于已存在对象的赋值。文章详细介绍了每个函数的特点、使用方法及注意事项,并提供了代码示例。这些默认成员函数确保了资源的正确管理和对象状态的维护。
21 4