Привет, переполнение стека людей, поэтому у меня проблема. Я пишу прохождение Maze в C++ для школьного проекта, и я столкнулся с стеной. У меня есть алгоритм, который проверяет разные позиции, которые я могу перемещать в лабиринте. Моя проблема заключается в том, что лабиринт фактически не меняет позиции, даже когда (я отлаживал) допустимый ход возвращает true. Почему нет? (Прошу прощения, если это очень глупый вопрос, но я был бы признателен за любую помощь!) Спасибо !!!
//Said algorithm
// 4. cycle through directions to move in until I find a possible move
if (validMove(maze, y + 1, x)) // UP
maze[y][x] = maze[y + 1][x];
else if (validMove(maze, y, x + 1)) // RIGHT
maze[y][x] = maze[y][x + 1];
else if (validMove(maze, y - 1, x)) // DOWN
maze[y][x] = maze[y - 1][x];
else if (validMove(maze, y, x - 1)) // LEFT
maze[y][x] = maze[y][x - 1];
//validMove func
bool validMove( char maze[MAZE_SIZE][MAZE_SIZE], int y, int x)
{
if (maze[y][x] == '.') {
return true;
}
return false;
}
Я собираюсь предположить, что "." в лабиринте указывает открытое пространство, и любой другой символ указывает на стену. Я также предполагаю, что x и y указывают вашу текущую позицию.
Похоже, вы проверяете, можете ли вы перейти на определенное пространство, если это возможно, вы затем установите символ в вашем текущем пространстве равным символу в пространстве, в которое хотите переходить (я не думаю, что вы хотели сделай это). Поскольку оба символа, вероятно, ".", Это фактически ничего не меняет.
Я предполагаю, что вы действительно хотели бы оставить след для себя, изменив текущий символ позиции на специальный символ (чтобы указать путь, который вы взяли), а затем измените x и y на новые значения x и y.
maze[y][x] = '+';
if (validMove(maze, y + 1, x)) // UP
y += 1;
else if (validMove(maze, y, x + 1)) // RIGHT
x += 1;
else if (validMove(maze, y - 1, x)) // DOWN
y -= 1;
else if (validMove(maze, y, x - 1)) // LEFT
x -= 1;
Поэтому вы, вероятно, должны поддерживать переменную position
, возможно, std::pair
, которая была бы координатой вашего обхода в лабиринте.
Поэтому я ожидаю, что ваше утверждение if будет выглядеть следующим образом:
if (validMove(maze, y + 1, x)) // UP
position.first++;
else if (validMove(maze, y, x + 1)) // RIGHT
position.second++;
else if (validMove(maze, y - 1, x)) // DOWN
position.first--;
else if (validMove(maze, y, x - 1)) // LEFT
position.second--;
Единственный способ убедиться в этом, если в вашем контуре печати вывести массив, который вы добавили:
cout << (y == position.first && x == position.second) ? 'x' : maze[y][x];
maze
создан и используется, и где (и как) вы проверяете, изменился ли он.maze doesn't actually change positions
Уточните, что вы подразумеваете под «изменением позиции». Я просто вижу, как выполняется задание.