Алгоритм генерации лабиринта с поиском по глубине с блоками вместо стен - PullRequest
6 голосов
/ 21 мая 2011

Я пытаюсь внедрить алгоритм поиска по глубине в мою игру. Я изучал эту веб-страницу: http://www.mazeworks.com/mazegen/mazetut/index.htm, но обнаружил, что не смог бы использовать ее с блоками вместо стен. Под блоками я подразумеваю квадрат, который охватывает всю клетку, а не только края. Я думал, что так будет проще, но теперь я не уверен. Кто-нибудь делал это? Если так, то как? (psuedocode в порядке). Или мне просто пойти по методу стены, если это проще?

1 Ответ

4 голосов
/ 26 мая 2011

в зависимости от того, чего вы на самом деле хотите достичь, у меня есть два решения для вас. оба они в основном представляют собой алгоритм, представленный на веб-сайте, на который вы ссылаетесь.

1.) В вашем лабиринте есть блоки на предопределенных позициях

  • Вы запускаете алгоритм на 2*k+1 сетке
  • предположим, что нумерация ваших клеток начинается сверху слева с (0,0). пометить все ячейки с 2 нечетными координатами ((2*p+1, 2*q+1); p,q < k) как блоки.
  • вы запускаете измененный алгоритм из вашего источника в оставшихся ячейках («четные ячейки»). модификации:
    • начать с четной ячейки, выбранной случайным образом
    • «соседняя ячейка» - это вторая, но следующая ячейка в любом направлении сетки; то есть вы «перепрыгиваете» через кирпич.
    • вместо того, чтобы сбивать стену между клетками, Вы превращаете блок в доступную клетку. однако эта ячейка не будет учитываться при выборе и возврат

2.) Вместо стен, разделяющих ячейки, вы хотите блоки.

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

надеюсь, что эти идеи соответствуют вашим потребностям,

С наилучшими пожеланиями, Carsten

...