21xrx.com
2024-11-22 03:51:58 Friday
登录
文章检索 我的文章 写文章
C++三子棋代码实例
2023-07-05 00:12:50 深夜i     --     --
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++ 的同学来说,这份代码绝对值得一试。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复
    相似文章