在控制台下用 C++ 复刻一个 2048 小游戏,是理解二维数组操作和逻辑控制的绝佳实践。我们不需要复杂的图形库,只需利用字符界面即可完成核心玩法。下面将梳理游戏规则,并逐步拆解实现过程。
游戏规则简述
游戏在一个 4x4 的网格中进行。初始时随机生成两个数字(2 或 4)。玩家通过键盘方向键(WASD)控制方块移动:
- 移动时,同向相邻且数值相同的方块会合并,数值翻倍。
- 每次移动后,空白处会随机生成一个新的 2 或 4。
- 目标是将任意格子合并至 2048。若棋盘填满且无法合并,则游戏结束。
核心实现步骤
1. 初始化游戏界面
我们需要一个 4x4 的二维数组来存储棋盘状态,0 代表空位。为了代码复用性,建议定义常量 SIZE。
#include <iostream>
#include <cstdlib>
#include <ctime>
#define SIZE 4
int gameBoard[SIZE][SIZE] = {0};
2. 随机生成数字
游戏开始或每次有效移动后,需在空白格中填入新数字。使用 rand() 配合取模运算确定位置和数值。注意避免重复覆盖已有数字,实际项目中需增加循环检查,此处为简化逻辑展示基础写法。
void generateRandomNumbers() {
// srand(time(NULL)); // 建议在 main 函数中调用一次初始化种子
int count = 0;
while (count < 2) {
int x = rand() % SIZE;
int y = rand() % SIZE;
if (gameBoard[x][y] == 0) {
gameBoard[x][y] = (rand() % 2 + 1) * 2;
count++;
}
}
}
3. 处理用户输入
通过 getchar() 捕获按键,映射到具体的移动方向。这里预留了分支结构,后续根据方向调用对应的移动函数。
{
userInput = ();
(userInput) {
: (gameBoard); ;
: (gameBoard); ;
: (gameBoard); ;
: (gameBoard); ;
: ;
}
}


