我目前正在制作一个超简单的tictactoe计划,但我遇到了一个小问题。我使用二维角色阵列创建了一个游戏板(不是疯狂的使用角色的粉丝,但认为这是让我进入X和O的最简单的方法进入数组以在屏幕上输出。)
在PlayerOneMove()函数中,我提示用户输入他想放置游戏片段的单元格(1-9)。输入存储为char。然后我将他的单元格选择传递给MakeMove()函数,该函数检查用户输入的字符当前是否存储在数组中。但是,该函数始终返回false。
我意识到这是一个问题,编译器将输入视为一个整数而不匹配数组中的字符(因为如果我用字母替换数组中的元素然后输入一个字母就会找到匹配项) ,但我不知道如何解决这个问题。我尝试将ASCII值添加到字符并将char输入更改为整数输入,然后静态将其转换为char无效。在我决定彻底消灭角色阵列之前,任何帮助都会受到赞赏!!
class TicTacToe {
private:
char board[3][3] =
{
{'1','2','3'},
{'4','5','6'},
{'7','8','9'}
};
public:
void DrawBoard();
void PlayerOneMove();
bool MakePlay(char, char);
};
void TicTacToe::PlayerOneMove() {
char cell;
cout << "Player One, please select a cell: ";
cin >> cell;
while (!MakePlay(cell, 'O')) {
cout << "That cell is unavailable. Please select another cell: ";
cin >> cell;
}
}
bool TicTacToe::MakePlay(char cell, char player) {
for (int row = 0; row < 3; row++) {
for (int col = 0; col < 3; col++) {
if (board[row][col] == cell) {
board[row][col] = player;
return true;
}
else return false;
}
}
}
int main() {
TicTacToe game;
game.DrawBoard();
game.PlayerOneMove();
return 0;
}
答案 0 :(得分:0)
MakePlay
中存在逻辑错误。
当您输入嵌套的for循环时,它将检查输入是否与第一个单元格匹配,如果不匹配则返回false。其余的细胞永远不会被检查。
您要做的是检查所有单元格,如果它们中的任何单元格都不匹配,则返回false。
您可以像这样重写:
bool TicTacToe::MakePlay(char cell, char player) {
bool found_cell = false;
for (int row = 0; row < 3; row++) {
for (int col = 0; col < 3; col++) {
if (board[row][col] == cell) {
board[row][col] = player;
found_cell = true;
}
}
}
return found_cell;
}