C++ Tic Tac Toe C&x2B+;检查及;印刷优胜者
此编码有问题,如何检查和显示赢家?我试图添加它,但由于函数checkWinner()的原因,结果变成了错误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语句中使用了=。这导致初始化而不是平
#包括
使用名称空间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;
}