C++ 使用IF语句检查数组输入的函数出现问题

C++ 使用IF语句检查数组输入的函数出现问题,c++,arrays,function,if-statement,C++,Arrays,Function,If Statement,无效检查板功能不起作用。这是一个井字游戏。因此,该函数会在每次移动后检查是否有人赢得了比赛或是否是平局。有人赢了或打成平局后,棋盘将重置,游戏开始。我就是不能让void checkboard功能工作。请帮我解决这个问题 棋盘应该检查每个用户的输入,看看该游戏是否获胜。所以,检查板必须检查playerOne是否在一条直线上或对角线上有X,或者playerTwo是否以这种方式有Os,或者是否有平局。如果玩家赢了或者打成平局,它会告诉谁赢了或者打成平局,然后询问用户是否想再次比赛或者退出程序。根据他们

无效检查板功能不起作用。这是一个井字游戏。因此,该函数会在每次移动后检查是否有人赢得了比赛或是否是平局。有人赢了或打成平局后,棋盘将重置,游戏开始。我就是不能让void checkboard功能工作。请帮我解决这个问题

棋盘应该检查每个用户的输入,看看该游戏是否获胜。所以,检查板必须检查playerOne是否在一条直线上或对角线上有X,或者playerTwo是否以这种方式有Os,或者是否有平局。如果玩家赢了或者打成平局,它会告诉谁赢了或者打成平局,然后询问用户是否想再次比赛或者退出程序。根据他们的反应,棋盘复位或游戏退出

我认为问题在于,不管发生什么,bGameOver都是真实的。我在gameover bGameOver=false之前添加了代码,程序运行起来就像预期的那样。因此,在if语句中的某些地方,它在移动1次后不断使bGameOver=true

在问题解决后,我想在问题解决后再提出如何改进的建议

#include <iostream>
#include <string>




void checkboard(char** CurrentPlayer, char (&squares)[3][3], char &playerMarker, bool bGameOver,char playerOne[]);


using namespace std;

void main() 
{
 char board[3][3];
    board[0][0] = ' ';
    board[0][1] = ' ';
    board[0][2] = ' ';
    board[1][0] = ' ';
    board[1][1] = ' ';
    board[1][2] = ' ';
    board[2][0] = ' ';
    board[2][1] = ' ';
    board[2][2] = ' ';
 bool bGameOver(true);
 char playerMarker;


     // Main game loop
     do 
     {

      showboard(board);

      boardMarker(playerTurn, playerOne, playerTwo, playerMarker, &currentPlayer);

      playerMove(currentPlayer,  board, playerMarker);

      checkboard(&currentPlayer,  board, playerMarker, bGameOver, playerOne);

      alternatePlayers(playerTurn);

     }
     while (!bGameOver);
    }



    void showboard(char (&board)[3][3]) 
    { 
        for(int i = 0; i < 3; ++i)
        {
            for(int j = 0; j < 3; ++j)
            {
                cout << board[i][j];
                if(j < 2) cout << "|";
            }
            cout << "\n";
            if(i < 2) cout << "-+-+-" << endl;;
        }
    } 


    void playerMove(char* CurrentPlayer, char (&board)[3][3], char &playerMarker)
    {
     bool bValidMove;
     int x,y;
     // Prompt the player for a move
     cout << "Player " << CurrentPlayer << "'s move:" << endl;



     // Loop until we get a valid move
     do 
     {
      cout << "Please enter the row number for the place you wish to mark: " << endl;
      cin >> x;
      cout << "Please enter the column number for the place you wish to mark" << endl;
      cin >> y;
      bValidMove = true;

      // Check for a valid move
      if (x == 1 && y == 1)
      {
       board[0][0] = playerMarker;
      } 
      else if (x == 1 && y == 2) 
      {
       board[0][1] = playerMarker;
      } 
      else if (x == 1 && y == 3) 
      {
       board[0][2] = playerMarker;
      }
      else if (x == 2 && y == 1) 
      {
       board[1][0] = playerMarker;
      }
      else if (x == 2 && y == 2)
      {
       board[1][1] = playerMarker;
      }
      else if (x == 2 && y == 3)
      {
       board[1][2] = playerMarker;
      }
      else if (x == 3 && y == 1)
      {
       board[2][0] = playerMarker;
      }
      else if (x == 3 && y == 2)
      {
       board[2][1] = playerMarker;
      }
      else if (x == 3 && y == 3) 
      {
       board[2][2] = playerMarker;
      }
      else 
      {
       cout << "Invalid Move. Try again." << endl;
       bValidMove = false;
      }

     } 
     while (!bValidMove);

    }

   void checkboard(char** CurrentPlayer, char (&board)[3][3], char &playerMarker, bool bGameOver, char playerOne[100])
{

        bGameOver       = false;
        bool bWinGame   = true;
        // Check for end of game conditions
    do
    {
        if (board[0][0] = playerMarker) 
        {
            if (board[0][1] == board[0][0] && board[0][2] == board[0][0]) {
                bGameOver = true;
            }
            if (board[1][0] == board[0][0] && board[2][0] == board[0][0]) {
                bGameOver = true;
            }
        }
        if (board[1][1] != playerMarker) 
        {
            if (board[0][0] == board[1][1] && board[2][2] == board[1][1]) 
            {
                bGameOver = true;
            }
            if (board[0][1] == board[1][1] && board[2][1] == board[1][1]) 
            {
                bGameOver = true;
            }
            if (board[1][0] == board[1][1] && board[1][2] == board[1][1]) 
            {
                bGameOver = true;
            }
            if (board[0][2] == board[1][1] && board[2][0] == board[1][1]) 
            {
                bGameOver = true;
            }
        }
        if (board[2][2] != playerMarker) 
        {
            if (board[0][2] == board[2][2] && board[1][2] == board[2][2]) 
            {
                bGameOver = true;
            }
            if (board[2][0] == board[2][2] && board[2][1] == board[2][2]) 
            {
                bGameOver = true;
            }
        }
        // Need to check the board full (no-win condition)
        if (board[0][0] != playerMarker && board[0][1] != playerMarker && board[0][2] != playerMarker &&
            board[1][0] != playerMarker && board[1][1] != playerMarker && board[1][2] != playerMarker &&
            board[2][0] != playerMarker && board[2][1] != playerMarker && board[2][2] != playerMarker && !bGameOver)
        {
            bGameOver = true;
            bWinGame = false;
        }

        system("cls");

        if (bGameOver) 
        {
            if (bWinGame) 
            {
                cout << "Player " << CurrentPlayer << " wins!" << endl;
            }
            // Print ending board

         for(int i = 0; i < 3; ++i)
        {
            for(int j = 0; j < 3; ++j)
            {
            cout << board[i][j];
            if(j < 2) cout << "|";
            }
            cout << "\n";
            if(i < 2) cout << "-+-+-" << endl;;
        }

            cout << "Game Over!" << endl;
            cout << "Play again (y/n)?" << endl;
            char cPlayAgain;
            cin >> cPlayAgain;

            if (cPlayAgain == 'y') 
            {
                bGameOver = false;
                // Clear the board
                board[0][0] = ' ';
                board[0][1] = ' ';
                board[0][2] = ' ';
                board[1][0] = ' ';
                board[1][1] = ' ';
                board[1][2] = ' ';
                board[2][0] = ' ';
                board[2][1] = ' ';
                board[2][2] = ' ';
            }
        *CurrentPlayer = playerOne;
        } 

} while (!bGameOver);
}
#包括
#包括
无效棋盘(char**CurrentPlayer,char(&squares)[3][3],char&playerMarker,bool bGameOver,char playerOne[]);
使用名称空间std;
void main()
{
炭板[3][3];
董事会[0][0]='';
董事会[0][1]='';
董事会[0][2]='';
董事会[1][0]='';
董事会[1][1]='';
董事会[1][2]='';
董事会[2][0]='';
董事会[2][1]='';
董事会[2][2]='';
bool-bGameOver(真);
charplayermarker;
//主游戏循环
做
{
展板;
boardMarker(playerTurn、playerOne、playerTwo、playerMarker和currentPlayer);
玩家移动(当前玩家、棋盘、玩家标记);
棋盘(¤tPlayer、棋盘、玩家标记、bGameOver、玩家指南);
交替层(playerTurn);
}
而(!bGameOver);
}
无效展示板(字符和板)[3][3])
{ 
对于(int i=0;i<3;++i)
{
对于(int j=0;j<3;++j)
{

cout如果您使用签名:

void checkboard(char** CurrentPlayer, char** squares, char &playerMarker, bool bGameOver,char playerOne[]);
虽然我认为这不是你应该改变的唯一事情,但我建议你多读一点关于数组和指针的内容,并用更小的程序来练习

我不知道你怎么能在没有注意到它没有按预期工作的情况下编写所有这些代码

我也不知道是否有人会花时间为你修改程序。这是家庭作业

if (board[0][0] = playerMarker)

这将始终将playerMarker分配到棋盘[0][0]。您必须习惯“=”(分配)和“=”(问题“这些相等吗?”)之间的差异,请参见。尽管这对您没有帮助。

错误c2664:“棋盘”:无法将参数2从“字符[3][3]转换为参数'到'char**'这是我从同一个用户的重复中得到的构建错误。这个问题已经结束,所以我想我必须用他们想要的信息开始一个新的问题。我没有做任何适当的分析(这有点意大利面条的味道),但行“if(board[0][0]='1'){”可能是错误的s/=/=/