21xrx.com
2024-11-22 10:13:31 Friday
登录
文章检索 我的文章 写文章
五子棋C++语言最简单代码
2023-06-26 15:53:13 深夜i     --     --
五子棋 C++ 代码 简单

五子棋是一种非常古老的中国传统棋类游戏,其规则简单,能够训练人的思维逻辑能力。如果你想要在计算机上实现这个游戏,那么使用C++语言来编写将是一个不错的选择。下面是五子棋C++语言最简单的代码实现。

首先,我们需要定义一个表示棋盘的二维数组,如下所示:


char board[15][15] = {

   ' '+', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '+ ' ',

   ' '| ' '| ' ',

   ' '| ' '| ' ',

   ' '| ' '| '|',

   ' '| ' '|'},

  {'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|'},

  {'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|'},

  {'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|'},

  {'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|'},

  {'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|'},

  {'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|'},

  {'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|'},

  {'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|'},

  {'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|'},

  {'+', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '+'}

};

这个数组表示的是一个15x15的棋盘,用‘+’、‘-’、‘|’字符画出棋盘的边框。其中,数组元素‘ ’表示这个位置没有落子,‘B’表示黑子,‘W’表示白子。

接下来,我们需要编写一个函数来在棋盘上落子,如下所示:


void place(int x, int y, char piece) {

  board[x][y] = piece;

}

这个函数接收三个参数,分别是落子的横坐标、纵坐标,以及棋子的类型(‘B’或‘W’)。调用这个函数之后,会在相应的位置上画上相应的棋子。

然后,我们需要编写一个函数来检查游戏是否结束,以及判断哪方获胜,如下所示:


char gameOver() {

  // 检查是否有一方获胜

  char winner = ' ';

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

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

      if (board[i][j] != ' ' && board[i][j] == board[i][j + 1] && board[i][j] == board[i][j + 2] && board[i][j] == board[i][j + 3] && board[i][j] == board[i][j + 4]) {

        winner = board[i][j];

        return winner;

      }

    }

  }

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

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

      if (board[i][j] != ' ' && board[i][j] == board[i + 1][j] && board[i][j] == board[i + 2][j] && board[i][j] == board[i + 3][j] && board[i][j] == board[i + 4][j]) {

        winner = board[i][j];

        return winner;

      }

    }

  }

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

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

      if (board[i][j] != ' ' && board[i][j] == board[i + 1][j + 1] && board[i][j] == board[i + 2][j + 2] && board[i][j] == board[i + 3][j + 3] && board[i][j] == board[i + 4][j + 4]) {

        winner = board[i][j];

        return winner;

      }

    }

  }

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

    for (int j = 4; j < 15; ++j) {

      if (board[i][j] != ' ' && board[i][j] == board[i + 1][j - 1] && board[i][j] == board[i + 2][j - 2] && board[i][j] == board[i + 3][j - 3] && board[i][j] == board[i + 4][j - 4]) {

        winner = board[i][j];

        return winner;

      }

    }

  }

  // 检查是否还有空位可以下棋

  bool empty = false;

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

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

      if (board[i][j] == ' ')

        empty = true;

        break;

      

    }

  }

  if (!empty)

    winner = 'D';

  

  return winner;

}

这个函数会在棋局结束时返回获胜方(‘B’或‘W’),如果棋局无人获胜,则返回‘D’;如果棋局还没有结束,则返回‘ ’。

最后,我们需要编写一个主函数来运行游戏,如下所示:


int main() {

  int x, y;

  char piece;

  bool turn = true; // true表示黑子轮到下,false表示白子轮到下

  while (true) {

    printBoard();

    if (turn)

      cout << "黑子下:";

      piece = 'B';

     else

      cout << "白子下:";

      piece = 'W';

    

    cin >> y >> x;

    if (board[x][y] == ' ') {

      place(x, y, piece);

      char winner = gameOver();

      if (winner != ' ') {

        printBoard();

        if (winner == 'D')

          cout << "平局!" << endl;

         else

          cout << winner << "方获胜!" << endl;

        

        break;

      }

      turn = !turn;

    } else 请重新输入。" << endl;

    

  }

  return 0;

}

在主函数中,我们先打印出棋盘,然后根据轮到哪方,输出提示信息并等待输入横纵坐标(注意这里的坐标是先输入纵坐标再输入横坐标)。如果这个位置没有棋子,就落子并检查游戏是否结束。如果游戏结束了,就输出获胜信息并退出游戏;否则就切换轮到哪方下棋。

通过以上代码,我们就可以简单地实现一个五子棋游戏。当然,这只是初级的实现方式,还有很多细节需要考虑,比如输入的坐标是否越界、如何进行重新开始等问题。希望这篇文章对你有所帮助!

  
  

评论区

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