21xrx.com
2025-04-13 06:01:14 Sunday
文章检索 我的文章 写文章
C++五子棋代码实现
2023-06-27 19:47:43 深夜i     9     0
C++程序设计 五子棋游戏 代码实现 游戏规则 界面设计

五子棋是一种经典的棋类游戏,非常受欢迎。在计算机科学领域,用C++实现五子棋游戏是一个非常好的练手项目。下面我们来看看如何用C++实现五子棋。

1. 代码框架

五子棋的实现需要一个二维数组来存储棋盘状态,一个枚举变量来表示棋子的颜色(黑棋或白棋),以及相应的方法来检查是否有五子连珠等。

enum Piece WHITE;
class Chessboard
{
public:
  Chessboard();
  ~Chessboard();
  bool setPiece(int x, int y, Piece p);
  void print();
  bool isWin(int x, int y, Piece p);
private:
  Piece board[15][15];
};

2. 棋盘初始化

在棋盘初始化时,将所有位置都置空。

Chessboard::Chessboard()
{
  for(int i = 0; i < 15; i++)
  {
    for(int j = 0; j < 15; j++)
    {
      board[i][j] = EMPTY;
    }
  }
}

3. 棋子放置

在棋子放置时,需要检查该位置是否为空,并且该位置要能够够落子(不能出界)。如果符合条件,将该位置设置为相应的颜色。

bool Chessboard::setPiece(int x, int y, Piece p)
{
  if(x < 0 || x > 14 || y < 0 || y > 14 || board[x][y] != EMPTY)
  
    return false;
  
  board[x][y] = p;
  return true;
}

4. 棋盘打印

在棋盘打印时,使用二重循环遍历整个棋盘,并且根据每个位置的棋子颜色打印出相应的字符。

void Chessboard::print()
{
  cout << " ";
  for(int i = 0; i < 15; i++)
  
    cout << " " << i;
  
  cout << endl;
  for(int i = 0; i < 15; i++)
  {
    cout << i << " ";
    for(int j = 0; j < 15; j++)
    {
      if(board[i][j] == EMPTY)
      {
        cout << "+ ";
      }
      else if(board[i][j] == BLACK)
      
        cout << "X ";
      
      else
      
        cout << "O ";
      
    }
    cout << endl;
  }
}

5. 判断是否胜利

在判断是否胜利时,需要分别判断横向、纵向、左斜和右斜是否有连续的五个棋子,有则返回true,否则返回false。

bool Chessboard::isWin(int x, int y, Piece p)
{
  int count = 0;
  // 横向
  for(int i = x-4; i <= x; i++)
  {
    if(i < 0) continue;
    if(board[i][y] == p && board[i+1][y] == p &&
    board[i+2][y] == p && board[i+3][y] == p &&
    board[i+4][y] == p)
    
      return true;
    
  }
  // 纵向
  for(int i = y-4; i <= y; i++)
  {
    if(i < 0) continue;
    if(board[x][i] == p && board[x][i+1] == p &&
    board[x][i+2] == p && board[x][i+3] == p &&
    board[x][i+4] == p)
    
      return true;
    
  }
  // 左斜
  for(int i = x-4, j = y-4; i <= x && j <= y; i++, j++)
  {
    if(i < 0 || j < 0) continue;
    if(board[i][j] == p && board[i+1][j+1] == p &&
    board[i+2][j+2] == p && board[i+3][j+3] == p &&
    board[i+4][j+4] == p)
    
      return true;
    
  }
  // 右斜
  for(int i = x-4, j = y+4; i <= x && j >= y; i++, j--)
  {
    if(i < 0 || j > 14) continue;
    if(board[i][j] == p && board[i+1][j-1] == p &&
    board[i+2][j-2] == p && board[i+3][j-3] == p &&
    board[i+4][j-4] == p)
    
      return true;
    
  }
  return false;
}

使用以上的代码框架,便可以实现一个简单的五子棋游戏。在主函数中,我们可以不断循环落子,判断是否有胜利,并打印棋盘状态。

int main()
{
  Chessboard cb;
  cb.print();
  Piece p = BLACK;
  int x, y;
  while(true)
  {
    cout << "Player " << p << "'s turn. Please enter the position (x, y): ";
    cin >> x >> y;
    if(cb.setPiece(x, y, p))
    {
      cb.print();
      if(cb.isWin(x, y, p))
      
        cout << "Player " << p << " wins!" << endl;
        break;
      
      p = (p == BLACK) ? WHITE : BLACK;
    }
    else
    
      cout << "Invalid position
  }
  return 0;
}

通过以上的代码实现,我们便能够用C++写出一个简单的五子棋游戏。这里只是一个简单的示例,还有很多细节需要优化和完善。但是今天我们的任务已经完成了,希望你也能够通过这个代码实现,对C++语言有更深入的了解。

  
  

评论区