Я сделал тиктакту!...почти.
Код:
int main()
{
//initialize
char board[3][3] =
{ '-','-','-',
'-','-','-',
'-','-','-'};
bool gameOver = false;
std::string playerTurn = "player 1";
char chX, chY; //choice x and y
int x = 1;
//game loop
do
{
std::cout << "\n\n\n\n\n\n\n\n\n\n";
std::cout << "Input X, then Y.\np1 = X, p2 = O.";
std::cout << "\n\nTurn: " << playerTurn;
std::cout << "\n\n\n\n\n\n\n\n\n\n";
std::cout << "+---+---+---+" << std::endl;
std::cout << "| " << board[0][0] << " | " << board[0][1] << " | " << board[0][2] << " | " << std::endl;
std::cout << "+---+---+---+" << std::endl;
std::cout << "| " << board[1][0] << " | " << board[1][1] << " | " << board[1][2] << " | " << std::endl;
std::cout << "+---+---+---+" << std::endl;
std::cout << "| " << board[2][0] << " | " << board[2][1] << " | " << board[2][2] << " | " << std::endl;
std::cout << "+---+---+---+" << std::endl;
//get input and change board value
std::cin >> chX;
std::cin >> chY;
if (playerTurn == "player 1")
board[chX][chY] = 'X';
else if (playerTurn == "player 2")
board[chX][chY] = 'O';
//change turns
if (playerTurn == "player 1")
playerTurn = "player 2";
else if (playerTurn == "player 2")
playerTurn = "player 1";
} while (gameOver == false);
return 0;
}
моя проблема:
//get input and change board value
std::cin >> chX;
std::cin >> chY;
if (playerTurn == "player 1")
board[chX][chY] = 'X';
else if (playerTurn == "player 2")
board[chX][chY] = 'O';
Этот кусок предназначен для изменения координат X и Y на X/O в зависимости от того, кто его превращает. Однако это не изменяет плату вообще и не возвращает ошибку. Также: board[0][0] = 't';
успешно изменит значение и напечатает t
в месте [0][0]
.
Есть что-то, что мне не хватает? Может быть, проблема в другом месте кода? (Я извиняюсь заранее, если проблема слишком простая - возможно, у меня было слишком много кофе.)
Это всего лишь небольшая ошибка - вы определили chX и chY как char, и если пользователь вводит, например, "1", это код ASCII для "1", а не целочисленное значение 1.
Просто измените свою декларацию на
int chX, chY;
и он должен работать.
Правильное изменение chY и chX от chars до ints вызывает то, как массивы индексируются.
Затем используйте это для кода ввода
std::cout << "Enter X corrdinate: ";
std::cin >> chX;
std::cout << "\n";
std::cin.clear();
std::cout << "Enter Y corrdinate: ";
std::cin >> chY;
std::cin.clear();
if (playerTurn == "player 1")
board[chX][chY] = 'X';
else if (playerTurn == "player 2")
board[chX][chY] = 'O';
Id также создает вторую массивную плату типа int, чтобы вы могли проверить, выиграл ли игрок
char chX,chY; // valid values -127..128
std::cin >> chX; //gets ascii code of '0', '1' or whichever value you enter
std::cin >> chY;
Проблема cin вернет код ascii символов, которые вы вводите; '0' = 48; Чтобы получить целочисленное значение, просто вычтите "0":
std::cin >> chX;
std::cin >> chY;
chX -= '0';
chy -= '0';
std::string
которую можно сравнить с литеральной строкой.string
. Вы можете сделать это с меньшим, более простым типом данных.