以下是一个简单的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 模块跟踪程序运行状态。
  • 单元测试:为每个函数编写测试用例确保可靠性。

更多推荐