我正在制作一个tic-tac-toe控制台应用程序,我主要完成它。还有一些我要添加的东西,但我遇到了一个大问题。我有一个bool checkwin()函数,它应该看看游戏是否已经赢了,但由于某种原因,无论我的参数是否满足,这个函数总是返回true。这导致程序在第一次移动后结束。为什么要这样做,我该如何解决?
bool checkwin( Boardstatus& BSTAT)
{
//Row 'A' checkwin
if (BSTAT.getsquarestatus("A1")==BSTAT.getsquarestatus("A2") && BSTAT.getsquarestatus("A2")==BSTAT.getsquarestatus("A3"))
{
return true;
}
//Row 'B' checkwin
else if (BSTAT.getsquarestatus("B1")==BSTAT.getsquarestatus("B2") && BSTAT.getsquarestatus("B2")==BSTAT.getsquarestatus("B3"))
{
return true;
}
//Row 'C' checkwin
else if (BSTAT.getsquarestatus("C1")==BSTAT.getsquarestatus("C2") && BSTAT.getsquarestatus("C2")==BSTAT.getsquarestatus("C3"))
{
return true;
}
//Column 1 checkwin
else if (BSTAT.getsquarestatus("A1")==BSTAT.getsquarestatus("B1") && BSTAT.getsquarestatus("B1")==BSTAT.getsquarestatus("C1"))
{
return true;
}
//Column 2 checkwin
else if (BSTAT.getsquarestatus("A2")==BSTAT.getsquarestatus("B2") && BSTAT.getsquarestatus("B2")==BSTAT.getsquarestatus("C2"))
{
return true;
}
//Column 3 checkwin
else if (BSTAT.getsquarestatus("A3")==BSTAT.getsquarestatus("B3") && BSTAT.getsquarestatus("B3")==BSTAT.getsquarestatus("C3"))
{
return true;
}
//Diagonal upper-left->bottom-right checkwin
else if (BSTAT.getsquarestatus("A1")==BSTAT.getsquarestatus("B2") && BSTAT.getsquarestatus("B2")==BSTAT.getsquarestatus("C3"))
{
return true;
}
//Diagonal lower-left->upper-right checkwin
else if (BSTAT.getsquarestatus("C1")==BSTAT.getsquarestatus("B2") && BSTAT.getsquarestatus("B2")==BSTAT.getsquarestatus("A3"))
{
return true;
}
else
{
return false;
}
}
int main()
{
//Start of initializing all squares as a blank
Boardstatus BSTAT;
BSTAT.setsquarestatus( "A1", ' ' );
BSTAT.setsquarestatus( "A2", ' ' );
BSTAT.setsquarestatus( "A3", ' ' );
BSTAT.setsquarestatus( "B1", ' ' );
BSTAT.setsquarestatus( "B2", ' ' );
BSTAT.setsquarestatus( "B3", ' ' );
BSTAT.setsquarestatus( "C1", ' ' );
BSTAT.setsquarestatus( "C2", ' ' );
BSTAT.setsquarestatus( "C3", ' ' );
//End of square initialization
do
{
playerturn(BSTAT);
} while (checkwin(BSTAT) == false);
return 0;
}
答案 0 :(得分:5)
它返回true,因为' '
等于' '
- 也就是说,在第一次移动后,您可以确保连续的三个方格仍为空,并且您只测试方形值是否为是相等而不是相等而不是空。
解决此问题的一种可能方法:
if (BSTAT.getsquarestatus("A1")!=' ' &&
BSTAT.getsquarestatus("A1")==BSTAT.getsquarestatus("A2") &&
BSTAT.getsquarestatus("A2")==BSTAT.getsquarestatus("A3"))
您需要将此... != ' '
检查添加到每个条件,显然会更改您测试的特定方格。
这可能是显而易见的,但你只需要测试其中一个方块,因为如果第一个方格不是空的而其他方格是等于它,那么显然其他方格也不是空的。
答案 1 :(得分:0)
你必须添加其他测试, 例如 : if(BSTAT.getsquarestatus(“A1”)== BSTAT.getsquarestatus(“A2”)&& BSTAT.getsquarestatus(“A2”)== BSTAT.getsquarestatus(“A3”)&& BSTAT.getsquarestatus( “A1”)!=''&& BSTAT.getsquarestatus(“A2”)!=''&& BSTAT.getsquarestatus(“A3”)!='')
为所有测试做同样的事情
然而,还有另一种更好的方法来实现这个算法
答案 2 :(得分:0)
使用矩阵。
int TicTac [3] [3]初始化为0
1 - >球员1
2 - >玩家2和支票获胜者将是`for(int i = 0; i< 3; i ++)
{
if((TicTac [i] [0] == 2&& TicTac [i] [1] == 2&& TicTac [i] [2] == 2)||
(TicTac [i] [0] == 1&& TicTac [i] [1] == 1&&& TicTac [i] [2] == 1)){
return TicTac[i][0];
}
if((TicTac[0][i] == 2 && TicTac[1][i] == 2 && TicTac[2][i] == 2) ||
(TicTac[0][i] == 1 && TicTac[1][i] == 1 && TicTac[2][i] == 1)) {
return TicTac[0][i];
}
}
if((TicTac[0][0] == 1 && TicTac[1][1] == 1 && TicTac[2][2] == 1 )||
TicTac[0][0] == 2 && TicTac[1][1] == 2 && TicTac[2][2] == 2) {
return TicTac[0][0];
}
if(TicTac[0][2] == 1 && TicTac[1][1] == 1 && TicTac[2][0] == 1 ||
TicTac[0][2] == 2 && TicTac[1][1] == 2 && TicTac[2][0] == 2 ) {
return TicTac[0][2];}
}`