Я пытаюсь сделать небольшую простую игру, чтобы проверить мои логики, и это простой лабиринт, он уродлив и до сих пор сосут.Лучшая логика для создания (истинного) случайного лабиринта
Двигатель работает очень хорошо, учитывая, что лабиринт уже существует (матрица), он может быть даже приятным, но у меня нет намерения рисовать кучу карт, которые могут устанавливать значения на 400 (20x20) полях матрицы. не смешно.
Затем я создал функцию для рандомизации, установив пол/стену для каждого поля, и (я ожидал, что) не каждая карта является выигрышной. то я сделал еще одну функцию, которая проверяет, воспроизводятся ли карты (получает две точки и проверяет, существует ли между ними допустимый путь, затем я просто передаю начало и конец. Довольно изящный), и это сработало.
Если вы не заметили, что это очень глупый способ создания моего случайного лабиринте по следующим причинам:
1 - Это может выйти очень легко (гигантские островки пола, или связка (только действительный) лабиринт
2 - Это потенциально самый быстрый способ создания идеального случайного лабиринта КОГДА-ЛИБО, но в то же время он потенциально является самым медленным тоже , принимая до тех пор, пока ... бесконечно. Эта разница замечена больше, когда я устанавливаю сетку на 30 х 30 или более (когда что-то не переполнено)
3 - Это глупо и обидно для самой логики.
В моем дефенсе я не планировал это делать с самого начала, как описано, одна вещь привела к другой.
Итак, я начал думать о том, как сделать красивый (полный путь, сложный и выигрышный) лабиринт, тогда я подумал о том, чтобы сделать маленькие небольшие (предположим) блоки размером 5x5 с предустановленными входами и установить их вместе в способ, которым он подходит, но это противоречило бы случайному желанию, а также моему нежеланию рисовать его вручную.
Тогда я подумал о функции создания случайного пути, запустил его один раз до конца и запустил его несколько раз, чтобы где-то ближе к концу, и некоторые переходы и прочее, некоторые создавали тупики, которые казались мне лучше, но я просто не мог себе представить, что он создает приличный лабиринт.
You can check what I've done so far in this link.
Примечание: У меня нет намерения в вредя ничьего шт с чем угодно.
Первый, чтобы открыть его, пожалуйста, прокомментируйте здесь, сказав, что это безопасно.
- Выполнено (спасибо, Jonno_FTW)
Если вы все еще не доверяете ему, используйте виртуальную машину.
OBS: Я знаю, что это не лучший способ развития чего-либо. Я должен получить приличный игровой движок, bla bla bla, это был какой-то вызов для меня.
В чем вопрос? Кроме того, вы провели какое-либо исследование по алгоритмам генерации лабиринта (http://en.wikipedia.org/wiki/Maze_generation_algorithm)? –
Я бы сказал, что это не вопрос, специфичный для языка ... – ShinTakezou
Как говорится в названии: Какая лучшая логика для создания (истинного) случайного лабиринта? – Marcelo