21xrx.com
2024-11-22 08:13:12 Friday
登录
文章检索 我的文章 写文章
五子棋c++程序实现
2023-06-22 00:05:33 深夜i     --     --
五子棋 C++程序 实现 游戏逻辑 界面设计

五子棋(Gobang)是一款双人对战的策略棋类游戏,至今已经有很多种不同的版本和玩法。在本次的五子棋c++程序实现中,我们将使用c++语言编写一个基本的控制台版本。

首先,我们需要定义一个棋盘类,用于存储和显示游戏状态。在我们的棋盘中,使用二维数组来表示每个棋点的状态,有三种可能:黑子、白子、和空白。我们可以定义一个枚举类型来表示这三种状态:


enum ChessType

  BLACK = 1;

然后在棋盘类中,我们可以定义一个10×10的二维数组来存储棋盘状态。同时,我们也需要实现几个方法,比如显示棋盘、判断胜负、下棋等。

在显示棋盘的方法中,我们可以使用控制台输出字符来显示。例如,我们可以使用“+”来表示交叉点,“O”来表示黑子,“X”来表示白子,如下所示:


void ChessBoard::showBoard() {

  cout << " 0 1 2 3 4 5 6 7 8 9" << endl;

  for (int i = 0; i < 10; i++) {

    cout << i << " ";

    for (int j = 0; j < 10; j++) {

      if (chessboard[i][j] == BLACK)

        cout << "O ";

      else if (chessboard[i][j] == WHITE)

        cout << "X ";

      else

        cout << "+ ";

    }

    cout << endl;

  }

}

在判断胜负的方法中,我们需要考虑五个方向:横向、纵向、左右斜向和右左斜向。如果在任意一个方向上出现了五连珠,那么当前player即为胜者。


bool ChessBoard::checkWin(int player) {

  int count = 0;

  // 横向

  for (int i = 0; i < 10; i++) {

    count = 0;

    for (int j = 0; j < 10; j++) {

      if (chessboard[i][j] == player)

        count++;

      else

        count = 0;

      if (count == 5)

        return true;

    }

  }

  // 纵向

  for (int j = 0; j < 10; j++) {

    count = 0;

    for (int i = 0; i < 10; i++) {

      if (chessboard[i][j] == player)

        count++;

      else

        count = 0;

      if (count == 5)

        return true;

    }

  }

  // 左右斜向

  for (int i = 0; i <= 5; i++) {

    for (int j = 0; j <= 5; j++) {

      count = 0;

      for (int k = 0; k < 5; k++) {

        if (chessboard[i+k][j+k] == player)

          count++;

        else

          count = 0;

        if (count == 5)

          return true;

      }

    }

  }

  // 右左斜向

  for (int i = 0; i <= 5; i++) {

    for (int j = 9; j >= 4; j--) {

      count = 0;

      for (int k = 0; k < 5; k++) {

        if (chessboard[i+k][j-k] == player)

          count++;

        else

          count = 0;

        if (count == 5)

          return true;

      }

    }

  }

  return false;

}

最后,在下棋的方法中,我们可以接受玩家输入的落子位置,并在棋盘上更新状态。同时,我们也需要检测出现胜负的情况。


bool ChessBoard::playChess(int player, int r, int c) {

  if (r < 0 || r >= 10 || c < 0 || c >= 10)

    return false;

  if (chessboard[r][c] != EMPTY)

    return false;

  chessboard[r][c] = player;

  showBoard();

  if (checkWin(player)) {

    if (player == BLACK)

      cout << "Black Win!" << endl;

    else

      cout << "White Win!" << endl;

    return true;

  }

  return false;

}

使用上面的定义和方法,我们可以完成五子棋c++程序实现。在main函数中,我们可以依次进行如下操作,即可完成一次对战:


ChessBoard board;

int player = ChessType::BLACK;

int r, c;

board.showBoard();

while (true) {

  cout << (player == ChessType::BLACK ? "Black" : "White") << " turn:" << endl;

  cout << "Input row and column (0~9 0~9):";

  cin >> r >> c;

  if (board.playChess(player, r, c))

    break;

  player = -player;

}

return 0;

总的来说,五子棋c++程序实现并不难,只需要一些基本的c++语言知识和棋盘类的定义即可。实际上,我们还可以通过使用图形界面库,如Qt或MFC,来实现更丰富和美观的五子棋游戏。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复