【发布时间】:2015-12-16 04:00:21
【问题描述】:
我正在使用类编写这个井字游戏程序。我写了这个函数叫makeAMove()。这个函数应该验证玩家的移动,但它一直显示这是一个无效的移动,它要求玩家重新进入。可能有一些逻辑错误,但我只是没有看到它们。任何人都可以帮忙吗?这是一个使用名为Cell board[ROW][COL] 的对象和另一个名为Player players[2] 的对象的类。标记是X 或O,而iVal 是棋盘的初始值(棋盘上的每个单元格都有一个从 1 到 9 的数字)。这里包括winGame() 和switchPlayer() 供您参考。虽然我认为我的 winGame() 函数没问题,但我知道我可以使用 sum 来做到这一点。换句话说,每个单元格都有内部标记,如-1或1,如果行、列等的总和为-3或3,则与玩家对应的内部标记将输出获胜者。如果您对如何执行此操作有任何见解,请随时分享,否则,我的 winGame 很好。
int TicTacToe::switchPlayer(){
if ( currentPlayer == 0)
currentPlayer = 1;
else if ( currentPlayer == 1 )
currentPlayer = 0;
return (currentPlayer);
}
//
//method to make a move
//
void TicTacToe::makeAMove(){
char move;
int turns = 1;
do{
cout << "Player " << (getCurrentPlayer() + 1) << " make a move." << endl;
cin >> move;
for ( int i = 0; i < ROW; i++ ){
for ( int j = 0; j < COL; j++ ){
//This is where my problem begins
if ( board[i][j].getiVal() == move ){
board[i][j].setiVal( players[currentPlayer].getMarker());
DrawBoard();
switchPlayer();
turns++;
}
else if ( board[i][j].getiVal() == 'X' || board[i][j].getiVal() == 'O'){
cout << "Invalid move, please reenter. " << endl;
cin >> move;
}//the else if statement always outputs:x
}
}
} while ( turns <= 9 || !winGame() );
cout << "Congratulations " << ( getCurrentPlayer() + 1 ) << "you won the game!" << endl;
}
bool TicTacToe::winGame(){
bool validate = false;
int k = 0;
for ( int i = 0; i < ROW; i++ ){
//check column wins
if ( board[0][i].getMarker() == board[1][i].getMarker() && board[1][i].getMarker() == board[2][i].getMarker()){
players[currentPlayer].setNumWin(k++);
validate = true;
break;
}
//check row wins
else if ( board[i][0].getMarker() == board[i][1].getMarker() && board[i][1].getMarker() == board[i][2].getMarker()){
players[currentPlayer].setNumWin(k++);
validate = true;
break;
}
}
if( board[0][0].getMarker() == board[1][1].getMarker() && board[1][1].getMarker() == board[2][2].getMarker()){
players[currentPlayer].setNumWin(k++);
validate = true;
}
else if ( board[0][2].getMarker() == board[1][1].getMarker() && board[1][1].getMarker() == board[2][0].getMarker()){
players[currentPlayer].setNumWin(k++);
validate = true;
}
return (validate);
}
这是程序的示例运行
+--+--+--+
|1 |2 |3 |
+--+--+--+
|4 |5 |6 |
+--+--+--+
|7 |8 |9 |
+--+--+--+
Player 1 make a move.
1
+--+--+--+
|O |2 |3 |
+--+--+--+
|4 |5 |6 |
+--+--+--+
|7 |8 |9 |
+--+--+--+
Player 2 make a move.
5
Invalid move, please reenter.
6
+--+--+--+
|O |2 |3 |
+--+--+--+
|4 |5 |X |
+--+--+--+
|7 |8 |9 |
+--+--+--+
Player 1 make a move.
【问题讨论】:
标签: c++ if-statement logical-operators