请查看以下代码
#include <iostream>
#include <stdlib.h>
#include <ctime>
using namespace std;
const char PLAYER_1 = 'O';
const char PLAYER_2 = 'X';
int row = 0;
int col = 0;
int winningStates[8][3][2] = {{{0,0},{0,1},{0,2}},{{1,0},{1,1},{1,2}},{{2,0},{2,1},{2,2}},{{3,0},{3,1},{3,2}},
{{4,0},{4,1},{4,2}},{{5,0},{5,1},{5,2}},{{6,0},{6,1},{6,2}},{{7,0},{7,1},{7,2}}};
//This sets all the elements within the body to '-' to indicate that the square is free
void intialise(char board[][3])
{
for(int i=0;i<3;i++)
{
for(int a=0;a<=3;a++)
{
board[i][a] = '-';
}
}
}
//This displays the board on the screen
void display(char board[][3])
{
for(int i=0;i<3;i++)
{
for(int a=0;a<3;a++)
{
cout << board[i][a] << "\t ";
}
cout << endl;
}
}
//setValue() sets the cell indicated by the parameter to the value that is contained within the symbol parameter
void setValue(int row, int col, char symbol, char board[][3])
{
board[row][col] = symbol;
}
//isFree() returns true if the cell identified by the parameter contains '-'
bool isFree(int row, int col, char board[][3])
{
if(board[row][col]=='-')
{
return (true);
}
else
{
return (false);
}
}
bool hasWon(char symbol,char board[][3])
{
bool match = false;
row = 0;
col = 0;
for(int m=0;m<8;m++)
{
for(int s=0;s<3;s++)
{
row = winningStates[m][s][0];
col = winningStates[m][s][1];
if(board[row][col]==symbol)
{
match = true;
}
else
{
match = false;
break;
}
}
}
return match;
//return false;
}
int main()
{
char board[3][3];
srand(time(0));
bool gameOver = false;
char player = PLAYER_1;
int count = 0;
intialise(board);
// display();
while(gameOver!=true)
{
do
{
row = rand()%3;
col = rand()%3;
}
while(! isFree(row,col,board));
setValue(row,col,player,board);
if(player==PLAYER_1)
{
player = PLAYER_2;
}
else
{
player = PLAYER_1;
}
gameOver = hasWon(player,board);
if(gameOver==true)
{
cout << "WON" << endl;
}
count++;
if(count==9)
{
gameOver = true;
break;
}
display(board);
cout << endl;
}
}
在此代码中,我从未收到“WON”消息。并且,一个单元格总是自由的,没有任何符号。 无论我运行此代码多少次,没有人赢!为什么是这样?请帮忙!!
答案 0 :(得分:1)
看起来像是一个逻辑错误,试试这个
bool hasWon(char symbol,char board[][3])
{
for(int m=0;m<8;m++)
{
bool found_line = true;
for(int s=0;s<3;s++)
{
int row = winningStates[m][s][0];
int col = winningStates[m][s][1];
if(board[row][col]!=symbol)
{
found_line = false;
break;
}
}
if (found_line)
return true;
}
return false;
}
我认为为这类任务选择更好的变量名称会有所帮助,match
不是很好,因为它没有说出你匹配的内容。这似乎是你的错误。