Игровая доска хранится в виде массива 2D-символов. Игрок перемещает свой курсор по доске с помощью numpad и выбирает с введенным курсором текущим положением курсора, который хранится в двух интервалах.Консоль C++ TicTacToe: проверка условий выигрыша
После каждого шага плата оценивается для выигрыша, используя метод ниже.
void checkwin()
{
//look along lines from current position
int x = cursorPosX;
int y = cursorPosY;
int c = playerTurn ? 1 : 2; //which mark to look for
for (int xAxis = 0; xAxis <= 2; xAxis++) //look along x axis
{
x = WrapValue(0, sizeof(squares[0]), x + 1);
if (CheckPos(x, y) != c) //if we don't find the same mark, must not be a horizontal line, otherwise, break out.
{
x = cursorPosX; //reset x
for (int yAxis = 0; yAxis <= 2; yAxis++) //look along y axis
{
y = WrapValue(0, sizeof(squares[0]), y + 1);
if (CheckPos(x, y) != c)
{
y = cursorPosY;
//look for diagonal
for (int i = 0; i <= 2; i++)
{
x = WrapValue(0, sizeof(squares[0]), x + 1);
y = WrapValue(0, sizeof(squares[0]), y + 1);
if (CheckPos(x, y) != c)
{
//failed everything, return
winConditions = -1;
return;
}
}
break;
}
}
break;
}
}
//if we make it out of the loops, we have a winner.
winConditions = playerTurn ? 0 : 1;
}
Я получаю неправильные результаты - возвращает ничью или выигрывает, когда это не подходит. Я почти уверен, что x и y в какой-то момент имеют неправильные значения и начинают проверять неправильные точки.
Visual Studio перестает обновлять часы на x и y после перехода в цикл yAxis. Я не уверен, почему, но это мешает мне отслеживать эти значения. Я что-то нарушаю? Это единственное место, где я использую x и y как имена переменных.
Соответствующий метод обертывания ниже. Моя цель состояла в том, чтобы всегда быть в состоянии проверить другие 2 места, добавив, независимо от того, где я был на борту
int WrapValue(int min, int max, int value)
{
auto range = max - min;
while (value >= max)
{
value -= range;
}
while (value < min)
{
value += range;
}
return value;
}
Я ценю наметанный глаз, чтобы сказать мне, что я сделал неправильно здесь. Большое спасибо за ваше время.
Знаете ли вы, как отлаживать? Если нет: это идеальное время, чтобы изучить его. – Gewure
Где бы вы предложили начать? – Luke
Предлагаю: 1) скомпилировать программу с отладочной информацией; 2) Запустите программу в отладчике; 3) Используйте команду * next * statement для выполнения следующей инструкции и значений переменных представления; 4) Шаг * в * функции и посмотреть, как они работают. Найдите в Интернете «C++, как отлаживать небольшие программы». –