C++ Tic Tac Toe C&x2B+;检查及;印刷优胜者

C++ Tic Tac Toe C&x2B+;检查及;印刷优胜者,c++,C++,此编码有问题,如何检查和显示赢家?我试图添加它,但由于函数checkWinner()的原因,结果变成了错误 #包括 使用名称空间std; 无效展示板(无效); 无效playerInput(int p); 作废支票赢家(); void nextPlayer(int); int板[3][3]={{0,0,0},{0,0,0},{0,0,0}; int main() { INTR; INTC; 国际球员; int优胜者; 整数圈; cout在代码的两个点上,您在if语句中使用了=。这导致初始化而不是平

此编码有问题,如何检查和显示赢家?我试图添加它,但由于函数checkWinner()的原因,结果变成了错误

#包括
使用名称空间std;
无效展示板(无效);
无效playerInput(int p);
作废支票赢家();
void nextPlayer(int);
int板[3][3]={{0,0,0},{0,0,0},{0,0,0};
int main()
{
INTR;
INTC;
国际球员;
int优胜者;
整数圈;

cout在代码的两个点上,您在
if
语句中使用了
=
。这导致初始化而不是平等检查。您应该使用
=
而不是
=/code>

if (board[0][0] = board[1][1] && /** This should be a == for checking equality */
    board[1][1] == board[2][2] &&
    board[0][0] != 0)
{
    winner=board[0][0];
}

if (board[0][2] = board[1][1] && /** This should be a == for checking equality */
    board[1][1] == board[2][0] &&
    board[0][2] != 0)
{
    winner = board[0][2];
}

您的代码存在严重的递归问题。
main
中的函数
checkWinner()
从未被调用,因为函数
nextPlayer(1);
是无限递归的,因为它缺少基本大小写

递归基本情况是导致递归函数停止其递归的原因

请注意,在代码中:

void nextPlayer(int player)
{
 playerInput(player);
 showBoard();

 if(player==1)
  player=2;
 else
  player=1;
 nextPlayer(player);
}
一旦从
main
调用了
nextPlayer(1);
,它就永远不会返回,因为它总是在函数末尾进入自己的
nextPlayer(player);
的另一个调用。为此,您需要一个基本情况,以阻止在某个点发生这种递归

现在,从逻辑上讲,您的基本情况实际上应该是,在继续游戏之前检查赢家,这是由
checkWinner()
函数处理的

但是,问题是
checkWinner()
函数返回
void
,这意味着什么都没有,因此,在其当前状态下,我们不能将其用作基本情况

但是,如果我们重新设计它以返回以下内容:

  • 0用于播放
  • 1或2表示玩家已获胜
  • 最后-1表示棋盘已满,没有人赢(平局)
因此,将
checkWinner()
函数改为(我还更正了一些条件,以便仔细查看代码):

请注意,
checkWinner()

现在,在
main
函数中调用
checkWinner()
,这是不需要的,现在将在执行
void nextPlayer(int player)
中的每个步骤之前完成:

#包括
使用名称空间std;
无效展示板(无效);
无效playerInput(int p);
int checkWinner();
void nextPlayer(int);
int板[3][3]={{0,0,0},{0,0,0},{0,0,0};
int main()
{
INTR;
INTC;
国际球员;
int优胜者;
整数圈;

您所说的错误到底是什么?
由于函数checkWinner()而变成错误
听起来这是你问题中需要解释的重要一点…正确格式化你的代码显示了两个非常明显的地方,你使用了
=
,但你应该使用
=
。投票结束,因为缺少信息。很抱歉,我编辑它是为了解释。这不是他的代码中唯一的问题。递归也很混乱,这样就不会调用
checkWinner()
void playerInput(int p)
{
 int row;
 int col;

 if(p==1)
    cout <<"You are player number 1 \n\n";
 else
    cout <<"You are player number 2 \n\n";

 cout<<"Please enter your coordinate:";
 cin>>row;
 cout<<"\n";
 cin>>col;

 if(p==1)
    board[--row][--col]=1;
 if(p==2)
    board[--row][--col]=2;
}
void checkWinner()
{
 int winner;

 for (int i=0; i<=2; i++)
 {
    if(board[i][0]==board[i][1] && board[i][1]==board[i][2] && board[i][0]!=0)
    {
        winner=board[i][0];
    }
 }

 for(int i=0; i<=2; i++)
 {
    if (board[0][i]==board[1][i] && board[1][i]==board[2][i] && board[0][i]!=0)
    {
        winner=board[0][i];
    }
 }

 if(board[0][0]=board[1][1] && board[1][1]==board[2][2] && board[0][0]!=0)
 {
    winner=board[0][0];
 }

 if(board[0][2]=board[1][1] && board[1][1]==board[2][0] && board [0][2]!=0)
 {
    winner=board[0][2];
 }

 if(board[0][0]==board[0][1] && board[0][1]==board[0][2]&& board[0][2]==board[0][1]&& board[1][0]==board [1][1]&& board[1][1]==board [1][2]&& board[1][2]==board[2][0]&&board[2][0]==board [2][1]&& board[2][1]==board [2][2] && board [0][0]!=0)
 {
    winner=0;
 }
}

void nextPlayer(int player)
{
 playerInput(player);
 showBoard();

 if(player==1)
   player=2;
 else
   player=1;

 nextPlayer(player);
}
if (board[0][0] = board[1][1] && /** This should be a == for checking equality */
    board[1][1] == board[2][2] &&
    board[0][0] != 0)
{
    winner=board[0][0];
}

if (board[0][2] = board[1][1] && /** This should be a == for checking equality */
    board[1][1] == board[2][0] &&
    board[0][2] != 0)
{
    winner = board[0][2];
}
void nextPlayer(int player)
{
 playerInput(player);
 showBoard();

 if(player==1)
  player=2;
 else
  player=1;
 nextPlayer(player);
}
int  checkWinner()
{
 int winner;

 // any of the rows is same
 for (int i=0; i<=2; i++)
 {
  if(board[i][0]==board[i][1] && board[i][1]==board[i][2] && board[i][0]!=0)
  {
    winner = board[i][0];
    return winner;
  }
 }

 // any of the columns is same
 for(int i=0; i<=2; i++)
 {
  if (board[0][i]==board[1][i] && board[1][i]==board[2][i] && board[0][i]!=0)
  {
    winner = board[0][i];
    return winner;
  }
 }

 // 1st diagonal is same
 if(board[0][0]==board[1][1] && board[1][1]==board[2][2] && board[0][0]!=0)
 {
  winner = board[0][0];
  return winner;
 }

 // 2nd diagonal is same
 if(board[0][2]==board[1][1] && board[1][1]==board[2][0] && board [0][2]!=0)
 {
  winner = board[0][2];
  return winner;
 }

 // if we reached here nobody has won yet

 // if any empty box on board then play on
 for(int i=0; i<=2; i++)
 {
  for(int j=0; j<=2; j++)
  {
   if(board[i][j]==0)
   {
    winner = 0;
    return winner;
   }
  }
 }

 winner = -1; // all boxes full and nobody won so A tie has occurred
 return winner;
}
void nextPlayer(int player)
{ 
 int winner = checkWinner();

 if( winner == 0) // play on
 {
  playerInput(player);
  showBoard();

  if(player==1)
   player=2;
  else
   player=1;
  nextPlayer(player);
 }
 else if(winner == -1)
 {
  cout<<"\nGame drawn!\n";
 }
 else
 {
  cout<<"\nPlayer "<<winner<<" wins!\n"<<endl;
 }
}
#include <iostream>
using namespace std;

void showBoard(void);
void playerInput(int p);
int checkWinner();
void nextPlayer(int);

int board[3][3]={{0,0,0},{0,0,0},{0,0,0}};

int main()
{
 int r;
 int c;
 int player;
 int winner;
 int turns;

 cout << "******* Tic Tac Toe Game *******" << endl;

 showBoard();
 nextPlayer(1);

 return 0;
}