В настоящее время я делаю очень простую программу tictactoe, но у меня возникла небольшая проблема.Я создал игровую доску с использованием двумерного массива символов (не сумасшедший поклонник использования символов для этого, но подумал, что это был самый простой способ, позволяющий мне вводить X и O в массив для вывода на экран).
В функции PlayerOneMove () я предлагаю пользователю ввести ячейку (1-9), где он хотел бы разместить свою игровую фигуру.Ввод сохраняется в виде символа.Затем я передаю его выбор ячейки функции 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;
}
пример: https://imgur.com/a/1XZK6Wa