用C++实现小游戏2048

本文介绍了如何使用C++编程实现经典小游戏2048,玩家通过方向键操作,目标是达到2048作为游戏结束条件。

用C++写了一个简单2048小游戏,最大数字达到2048即为结束

方向键控制移动

2048小游戏

#include <iostream>
#include <Windows.h>
#include <ctime>
#include <conio.h>
#include <algorithm>

using namespace std;

int nums[4][4];
int emp = 16, score = 0; // 空格子数, 分数
int maxv = 2; // 场上最大数,到达2048时,结束游戏
int dirc_st = 0b0000; // 状态变量,表示可操作的方向

// 绘制地图函数
void drawmap()
{
   
   
    // 先清屏幕
    system("cls");
    puts("          ---- 2 0 4 8 ----");
    puts("               by DNA\n");
    cout << "              得分: " << score  << '\n' << endl;
  
    for (int col = 1; col <= 17; col++)
    {
   
   
        cout << "  ";
        if (col % 4 == 1)   puts(" -------------------------------- ");
        else if (col % 4 == 2 || col % 4 == 0)   puts("|       |       |       |       |");
        else
        {
   
   
            cout << '|';
            for (int row = 0; row <= 3; row++)
                if (nums[col / 4][row] != 0)
                    printf("%5d  |", nums[col / 4][row]);
                else
                    printf("       |");
            puts("");
        }
    }



    // 测试
    /*
    puts("");
    cout << "empty = " << emt << endl;
    cout << "max :" << maxv << endl;
    cout << "方向状态" << endl;
    cout << "上 : " << (dirc_st >> 3 & 1) << endl;
    cout << "下 : " << (dirc_st >> 2 & 1) << endl;
    cout << "左 : " << (dirc_st >> 1 & 1) << endl;
    cout << "右 : " << (dirc_st >> 0 & 1) << endl;
    */
}

// 产生新数字
void newnums()
{
   
   
    // 产生2:67% 产生4:33%
    int newnumber = (rand() % 3) ? 2 : 4;

    int x, y;
    do
    {
   
   
        x = rand() % 4, y = rand() % 4;
    } while (nums[x][y] != 0);

    nums[x][y] = newnumber;
    score += newnumber;
    emp --;
}

// 状态判断
void statecheck()
{
   
   
    dirc_st = 0b0000; // 分别代表当前状态是否可以上下左右移动
    // 上
    for (int i = 1; i <= 3; i ++ )
        for (int j = 0; j <= 3; j++)
        {
   
   
            if (nums[i][j] != 0 && nums[i - 1][j] == 0 || 
                nums[i][j] != 0 && nums[i - 1][j] == nums[i][j])
            {
   
    dirc_st 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值