21xrx.com
2024-12-22 22:01:34 Sunday
登录
文章检索 我的文章 写文章
C++五子棋代码实现
2023-06-27 19:47:43 深夜i     --     --
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++语言有更深入的了解。

  
  

评论区

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