C++ 五子棋游戏:人机对战和双人对战模式

本项目使用 C++ 语言实现一个五子棋游戏,包含人机对战和双人对战两种模式。游戏功能包括下棋、判断胜负、悔棋、重玩等。

1. 游戏设计

1.1 游戏目标

玩家通过在棋盘上放置棋子,使自己的棋子在横、竖、斜方向上连续排列五个或五个以上,即可获胜。

1.2 游戏模式

  • 人机对战: 玩家与电脑进行对战。
  • 双人对战: 两名玩家进行对战。

1.3 游戏流程

  1. 选择游戏模式(人机对战或双人对战)。
  2. 选择执棋颜色(黑子或白子)。
  3. 根据选择的模式,游戏会创建电脑玩家对象并随机决定先后手。
  4. 玩家通过鼠标点击来下棋,程序自动判断胜负并给出结果。
  5. 玩家可以选择悔棋或重新开始游戏。
  6. 游戏结束后,程序会询问玩家是否继续游戏,如果选择继续,则重新开始游戏,否则退出游戏。

2. 详细设计

2.1 ChessBoard 类

  • 成员变量:
    • board[15][15]:二维数组存储棋盘信息,0 表示空棋格,1 表示黑子,2 表示白子。
  • 成员函数:
    • drawBoard():绘制棋盘。
    • getBoard(int x, int y):获取棋盘信息,返回棋格上的棋子颜色。
    • setBoard(int x, int y, int value):设置棋盘信息,将指定棋格设置为指定棋子颜色。
    • clearBoard():清空棋盘,将所有棋格设置为空。
    • isFull():判断棋盘是否已满。
    • checkWin(int x, int y, int color):判断指定位置是否满足胜利条件。
    • checkHorizontal(int x, int y, int color):判断指定位置的横向是否满足胜利条件。
    • checkVertical(int x, int y, int color):判断指定位置的纵向是否满足胜利条件。
    • checkDiagonal1(int x, int y, int color):判断指定位置的斜向 (左上到右下) 是否满足胜利条件。
    • checkDiagonal2(int x, int y, int color):判断指定位置的斜向 (右上到左下) 是否满足胜利条件。
    • checkOneLine(int x1, int y1, int x2, int y2, int color):判断指定位置之间的直线是否满足胜利条件。

2.2 ChessPiece 类

  • 成员变量:
    • color:棋子颜色。
    • x:棋子横坐标。
    • y:棋子纵坐标。
  • 成员函数:
    • getColor():获取棋子颜色。
    • getX():获取棋子横坐标。
    • getY():获取棋子纵坐标。

2.3 Player 类

  • 成员变量:
    • name:玩家名称。
    • color:玩家执棋颜色。
  • 成员函数:
    • getName():获取玩家名称。
    • getColor():获取玩家执棋颜色。

2.4 Game 类

  • 成员变量:
    • player1:第一个玩家对象。
    • player2:第二个玩家对象。
    • chessboard:棋盘对象。
    • isOver:游戏是否结束标志。
    • isPVP:是否为双人对战模式标志。
    • isPlayer1Turn:是否为第一个玩家回合标志。
  • 成员函数:
    • startGame():开始游戏。
    • initBoard():初始化棋盘。
    • printBoard():打印棋盘。
    • switchPlayer():切换玩家回合。
    • playerMove(int x, int y):玩家下棋,在指定位置放置棋子。
    • computerMove():电脑下棋,根据策略选择位置放置棋子。
    • isGameOver():判断游戏是否结束。
    • isFull():判断棋盘是否已满。
    • checkWin(int x, int y, int color):判断指定位置是否满足胜利条件。
    • checkOneLine(int x1, int y1, int x2, int y2, int color):判断指定位置之间的直线是否满足胜利条件。
    • checkHorizontal(int x, int y, int color):判断指定位置的横向是否满足胜利条件。
    • checkVertical(int x, int y, int color):判断指定位置的纵向是否满足胜利条件。
    • checkDiagonal1(int x, int y, int color):判断指定位置的斜向 (左上到右下) 是否满足胜利条件。
    • checkDiagonal2(int x, int y, int color):判断指定位置的斜向 (右上到左下) 是否满足胜利条件。
    • isLegal(int x, int y):判断指定位置是否可以放置棋子。
    • isPlayer1(int color):判断棋子颜色是否为第一个玩家的执棋颜色。
    • undo():悔棋。
    • restart():重新开始游戏。
    • printResult(int color):打印游戏结果。

3. 系统设计

  1. 主函数创建 Game 类对象。
  2. Game 对象创建 ChessBoard 类对象和 Player 类对象。
  3. 根据用户选择的模式,Game 对象创建电脑玩家对象并随机决定先后手。
  4. 玩家通过鼠标点击来下棋,程序自动判断胜负并给出结果。
  5. 如果用户选择悔棋,则 Game 对象调用 ChessBoard 对象的悔棋函数。
  6. 如果用户选择重新开始游戏,则 Game 对象重新创建 ChessBoard 对象和 Player 对象。
  7. 游戏结束后,程序会询问玩家是否继续游戏,如果选择继续,则重新开始游戏,否则退出游戏。

4. 代码实现

4.1 ChessBoard 类

class ChessBoard {
private:
    int board[15][15];
public:
    ChessBoard();
    void drawBoard();
    int getBoard(int x, int y);
    void setBoard(int x, int y, int value);
    void clearBoard();
    bool isFull();
    bool checkWin(int x, int y, int color);
    bool checkHorizontal(int x, int y, int color);
    bool checkVertical(int x, int y, int color);
    bool checkDiagonal1(int x, int y, int color);
    bool checkDiagonal2(int x, int y, int color);
    bool checkOneLine(int x1, int y1, int x2, int y2, int color);
};

4.2 ChessPiece 类

class ChessPiece {
private:
    int color;
    int x;
    int y;
public:
    ChessPiece(int c, int xx, int yy);
    int getColor();
    int getX();
    int getY();
};

4.3 Player 类

class Player {
private:
    string name;
    int color;
public:
    Player(string n, int c);
    string getName();
    int getColor();
};

4.4 Game 类

class Game {
private:
    Player* player1;
    Player* player2;
    ChessBoard* chessboard;
    bool isOver;
    bool isPVP;
    bool isPlayer1Turn;
public:
    Game();
    void startGame();
    void initBoard();
    void printBoard();
    void switchPlayer();
    void playerMove(int x, int y);
    void computerMove();
    bool isGameOver();
    bool isFull();
    bool checkWin(int x, int y, int color);
    bool checkOneLine(int x1, int y1, int x2, int y2, int color);
    bool checkHorizontal(int x, int y, int color);
    bool checkVertical(int x, int y, int color);
    bool checkDiagonal1(int x, int y, int color);
    bool checkDiagonal2(int x, int y, int color);
    bool isLegal(int x, int y);
    bool isPlayer1(int color);
    void undo();
    void restart();
    void printResult(int color);
};

5. 总结

本项目实现了包含人机对战和双人对战两种模式的五子棋游戏,并提供了详细的设计说明、代码实现和功能介绍。开发者可以根据自身需求进行扩展和完善。

C++ 五子棋游戏:人机对战和双人对战模式

原文地址: https://www.cveoy.top/t/topic/oRX1 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录