Добавление 1 в позицию индекса массива

0

Привет, переполнение стека людей, поэтому у меня проблема. Я пишу прохождение 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;
}
  • 1
    Этот вопрос нуждается в дополнительном контексте. Покажите больше, где maze создан и используется, и где (и как) вы проверяете, изменился ли он.
  • 2
    maze doesn't actually change positions Уточните, что вы подразумеваете под «изменением позиции». Я просто вижу, как выполняется задание.
Показать ещё 1 комментарий
Теги:
arrays
add
subscript
maze

2 ответа

1

Я собираюсь предположить, что "." в лабиринте указывает открытое пространство, и любой другой символ указывает на стену. Я также предполагаю, что 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;
0

Поэтому вы, вероятно, должны поддерживать переменную 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];

Ещё вопросы

Сообщество Overcoder
Наверх
Меню