Лабиринт по пути вырезать бесполезные пути

У меня есть игрок в лабиринте (2d) без какого-либо доступа к лабиринту (поэтому никакие A * действительно практичны, не так ли) Я просто могу сказать игроку пойти и проверить, есть ли перед вами стена или нет. Я использую способ выбора «самого правильного» пути на каждой развилке, чтобы найти предмет коллекционирования. Чтобы найти обратный путь к спауну, я всегда мог выбрать «крайний левый» путь на каждой развилке и проверить, был ли это спавн (это возможно). Но я знаю путь, по которому я туда шел (составил список и добавил каждый шаг, который я сделал (идти вперед, повернуть налево, повернуть направо), легко пройти эту запись назад). Но, проходя путь через лабиринт, я прошел целую часть, имеющую только один вход и совершенно пустую, что зафиксировано в записи движения. Так что, возвращаясь назад, я пройдусь по этой части еще раз. Могу ли я как-то снова найти те же самые движения в перевернутом виде? Я искал фиксированные шаблоны и удалял их, например, «rotated180;go;rotated180;go» или «rotated360» (который внутренне повернут четыре раза90). Но как мне сделать так, чтобы он не исправлялся?


person Joshua Behrens    schedule 18.09.2014    source источник


Ответы (1)


Мне не совсем понятно, зачем нужно возвращаться - нельзя ли просто перепозиционировать себя туда, откуда начали?

В любом случае, если вы записываете каждую позицию в списке в дополнение к перемещению, то при возвращении вы можете проверить, отображается ли квадрат, в который вы собираетесь войти (в который вы вернетесь), дальше в списке (ближе к вашему началу), и если это так, перейдите к этой части списка, тем самым пропустив обход, который вы сделали в этой пустой части лабиринта, выходящей из него.

person 500 - Internal Server Error    schedule 18.09.2014
comment
У меня нет никаких координат. Но я мог вычислить относительные. Я попробую. Я просто контролирую движение, а не явное положение игрока. Мне нужно вернуться и бросить коллекционный предмет там. - person Joshua Behrens; 19.09.2014
comment
Тогда относительные координаты были бы выходом. - person 500 - Internal Server Error; 19.09.2014
comment
Я сделал это с относительными координатами. Спаун - это вектор 0,0, и у меня есть вектор, куда смотрит игрок. Реализовать это было довольно просто, но не додуматься... как-то. Чтобы удалить ненужный путь, я удаляю промежуток между первым и последним появлением точки. - person Joshua Behrens; 21.09.2014