简单的C++实现2048游戏
·
以下是一个简单的C++实现2048游戏的代码示例,使用控制台界面和基本功能:
初始化游戏板
#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>
#include <conio.h> // 用于_getch()函数
const int SIZE = 4;
std::vector<std::vector<int>> board(SIZE, std::vector<int>(SIZE, 0));
void initializeBoard() {
// 在随机位置生成两个初始数字(2或4)
for (int i = 0; i < 2; ++i) {
int x = rand() % SIZE;
int y = rand() % SIZE;
while (board[x][y] != 0) {
x = rand() % SIZE;
y = rand() % SIZE;
}
board[x][y] = (rand() % 10 < 9) ? 2 : 4;
}
}
显示游戏板
void displayBoard() {
system("cls"); // 清屏
std::cout << "2048 Game\n";
std::cout << "-----------------------------\n";
for (int i = 0; i < SIZE; ++i) {
for (int j = 0; j < SIZE; ++j) {
if (board[i][j] == 0) {
std::cout << ".\t";
} else {
std::cout << board[i][j] << "\t";
}
}
std::cout << "\n\n";
}
std::cout << "-----------------------------\n";
std::cout << "Use WASD keys to move\n";
}
添加新数字
void addNewNumber() {
int x, y;
do {
x = rand() % SIZE;
y = rand() % SIZE;
} while (board[x][y] != 0);
board[x][y] = (rand() % 10 < 9) ? 2 : 4;
}
移动和合并逻辑
bool moveUp() {
bool moved = false;
for (int j = 0; j < SIZE; ++j) {
for (int i = 1; i < SIZE; ++i) {
if (board[i][j] != 0) {
int k = i;
while (k > 0 && board[k-1][j] == 0) {
board[k-1][j] = board[k][j];
board[k][j] = 0;
k--;
moved = true;
}
if (k > 0 && board[k-1][j] == board[k][j]) {
board[k-1][j] *= 2;
board[k][j] = 0;
moved = true;
}
}
}
}
return moved;
}
// 类似的moveDown(), moveLeft(), moveRight()函数可以按照相同逻辑实现
主游戏循环
int main() {
srand(time(0));
initializeBoard();
displayBoard();
while (true) {
char input = _getch();
bool moved = false;
switch(tolower(input)) {
case 'w': moved = moveUp(); break;
case 's': moved = moveDown(); break;
case 'a': moved = moveLeft(); break;
case 'd': moved = moveRight(); break;
case 'q': return 0; // 退出游戏
default: continue;
}
if (moved) {
addNewNumber();
displayBoard();
}
// 可以添加游戏结束检查逻辑
}
return 0;
}
游戏状态检查
bool isGameOver() {
// 检查是否有空格
for (int i = 0; i < SIZE; ++i) {
for (int j = 0; j < SIZE; ++j) {
if (board[i][j] == 0) return false;
}
}
// 检查是否有可合并的相邻方块
for (int i = 0; i < SIZE; ++i) {
for (int j = 0; j < SIZE; ++j) {
if (i < SIZE-1 && board[i][j] == board[i+1][j]) return false;
if (j < SIZE-1 && board[i][j] == board[i][j+1]) return false;
}
}
return true;
}
这个实现包含了2048游戏的基本功能:
- 4x4游戏板初始化
- 数字移动和合并逻辑
- 随机生成新数字
- 简单的控制台界面
- 游戏状态检查
可以根据需要扩展功能,如添加分数计算、最高分记录、更美观的界面等。
示例代码结构
以下是一个通用的代码示例结构,适用于多种编程场景:
def main():
# 初始化变量或配置
config = load_config()
# 数据处理逻辑
data = fetch_data(config)
processed_data = process_data(data)
# 输出或存储结果
save_results(processed_data)
def load_config():
"""加载配置文件"""
return {"key": "value"}
def fetch_data(config):
"""模拟数据获取"""
return [1, 2, 3, 4, 5]
def process_data(data):
"""数据处理逻辑"""
return [x * 2 for x in data]
def save_results(result):
"""保存结果"""
print(f"Result: {result}")
if __name__ == "__main__":
main()
关键组件说明
配置加载
通过 load_config 函数集中管理配置参数,便于维护和修改。
数据获取fetch_data 函数模拟从数据库、API 或文件读取数据,实际应用中需替换为具体逻辑。
数据处理process_data 包含核心业务逻辑,示例中为简单的列表推导式,实际可能涉及复杂计算或算法。
结果保存save_results 定义结果输出方式,如写入文件、数据库或返回 API 响应。
扩展建议
- 错误处理:添加
try-except块捕获异常。 - 日志记录:使用
logging模块跟踪程序运行状态。 - 单元测试:为每个函数编写测试用例确保可靠性。
更多推荐
所有评论(0)