21xrx.com
2025-04-04 00:15:38 Friday
文章检索 我的文章 写文章
C++三子棋代码实例
2023-07-05 00:12:50 深夜i     11     0
C++ 三子棋 代码实例

三子棋是一种简单而又有趣的棋类游戏,也是许多编程语言学习者练手的经典案例之一。在这里,我们就来分享一份 C++ 实现的三子棋代码,让大家可以更好地学习和理解 C++ 的相关知识。

首先,我们需要定义一些必要的类和数据结构。比如,游戏界面属于一个二维矩阵,每个格子对应一个棋子,我们可以定义一个二维数组 `board` 来表示。

const int BOARD_SIZE = 3;
class Game {
public:
  enum Cell
    CELL_O
  ;
  Game();
  void start();
  void printBoard() const;
private:
  int _turn;
  Cell _board[BOARD_SIZE][BOARD_SIZE];
  bool isBlank(int row, int col) const;
  bool checkWin(Cell player) const;
};

以上代码中,`Cell` 枚举了棋子的三种状态:空、叉、圆;`Game` 类定义了一些游戏状态和方法,其中 `start()` 方法用于开始游戏,`printBoard()` 方法用于在控制台输出当前游戏状态(即棋盘),`isBlank()` 和 `checkWin()` 分别用于检查一个格子是否为空以及当前玩家是否胜利。

接下来,我们就可以实现这些方法了。这里为了简洁起见,我们省略了一些细节,可以查看完整的代码来了解更多详细信息。

Game::Game() {
  _turn = 0;
  for (int i = 0; i < BOARD_SIZE; ++i) {
    for (int j = 0; j < BOARD_SIZE; ++j) {
      _board[i][j] = CELL_EMPTY;
    }
  }
}
void Game::start() {
  while (true) {
    printBoard();
    int row, col;
    cout << "Player " << (_turn % 2 == 0 ? "X" : "O") << ", enter row and column: ";
    cin >> row >> col;
    if (row < 1 || row > BOARD_SIZE || col < 1 || col > BOARD_SIZE)
      cout << "Invalid input
    --row; --col;
    if (!isBlank(row, col))
      cout << "Position is already occupied
    _board[row][col] = _turn % 2 == 0 ? CELL_X : CELL_O;
    if (checkWin(_board[row][col])) {
      cout << "Player " << (_turn % 2 == 0 ? "X" : "O") << " wins!" << endl;
      break;
    }
    ++_turn;
  }
  printBoard();
}
void Game::printBoard() const {
  for (int i = 0; i < BOARD_SIZE; ++i) {
    for (int j = 0; j < BOARD_SIZE; ++j) {
      switch (_board[i][j])
        case CELL_X: cout << "X "; break;
        case CELL_O: cout << "O "; break;
        default: cout << ". "; break;
      
    }
    cout << endl;
  }
}
bool Game::isBlank(int row, int col) const {
  return _board[row][col] == CELL_EMPTY;
}
bool Game::checkWin(Cell player) const {
  // Check rows and columns
  for (int i = 0; i < BOARD_SIZE; ++i) {
    bool rowMatch = true, colMatch = true;
    for (int j = 0; j < BOARD_SIZE; ++j) {
      if (_board[i][j] != player) rowMatch = false;
      if (_board[j][i] != player) colMatch = false;
    }
    if (rowMatch || colMatch) return true;
  }
  // Check diagonals
  bool diag1Match = true, diag2Match = true;
  for (int i = 0; i < BOARD_SIZE; ++i) {
    if (_board[i][i] != player) diag1Match = false;
    if (_board[i][BOARD_SIZE - 1 - i] != player) diag2Match = false;
  }
  return diag1Match || diag2Match;
}

最后,我们可以在一个 `main()` 函数中调用 `Game::start()` 来开始游戏了。

int main() {
  Game game;
  game.start();
  return 0;
}

完整的三子棋代码就是这样了。它不仅可以帮助学习者更深入地理解 C++ 的语法和面向对象编程的思想,还可以锻炼我们的逻辑思维和编程能力。对于想要深入探究 C++ 的同学来说,这份代码绝对值得一试。

  
  

评论区

请求出错了