это пересказ моего АБ-алгоритма для лабиринтов типа 1. если правильно сделать выбор клеток, будет быстро. но, в отличии от maziacs, прямые корридоры будут короткие (сплошной random, нет походов по прямым)Цитата:
Сообщение от jerri
Вид для печати
это пересказ моего АБ-алгоритма для лабиринтов типа 1. если правильно сделать выбор клеток, будет быстро. но, в отличии от maziacs, прямые корридоры будут короткие (сплошной random, нет походов по прямым)Цитата:
Сообщение от jerri
В 3д лабиринте генератор смотрел?
порыскал в инете в принципе генераторов лабиринта не так уж и много
и в основном ссылаются на алгоритм Крускала
а если строить лабиринт из готовых кусков 3*3 это будет быстрее?
А еще можно наготовить стандартных лабиринтиков 3х3, 4х4, 5х5, ловшук, спиралей и все это в случайном порядке друг на друга и на общее поле.
Цитата:
Сообщение от ws_mason
так собсно и предлягаю но после того как закончится такая прегенерация необходимо обработку провести уже по крускалу чтобы лабиринт связанный был
а волну можно с помощью конвейера гнать - быстрее получится
(подробнее том элементарная графика инфоркома)
тож про лабиринты
Ничего не забуду. Общее оформление вот счас сделал, теперь алгоритм странслирую на Pascal, а там и экзешник сюда выложу.Цитата:
Сообщение от SMT
игра ок. 20 кб, бейсик-коды в виде блока кодов, с дискеты как обычно грузятся в память повыше, а потом перемещаются на адрес 23296 (16384, не помню в оющем). В процессе перемещения могут быть убиты сиспеременные памяти 128-ых и старше. Поэтому запускайся в режиме 48.Цитата:
Сообщение от jerri
А если и там не будет пахать, то где-то у меня z80-образ завалялся. Подойдёт?
Странная запись. SMT, перепроверь, плз, куда ведут все Break внутри большого Switch. М/б, некоторые из них Continue. А то выходит, что циклЦитата:
Сообщение от SMT
пока не (ХодилиВлево и ХодилиВправо и ХодилиВверх и ХодилиВниз)
всегда выполняется только 1 раз. Тогда смысл этого цикла?
сишный синтаксис. брейки относятся к switch. а так как после него сразу конец цикла, то от замены их на continue ничего не изменитсяЦитата:
Странная запись. SMT, перепроверь, плз, куда ведут все Break внутри большого Switch
вот такая жуткая смесь си, паскаля и великого могучего...
Готово. :) Вот архивчик с исходниками и EXE-файлом на случ., если Delphi 6 нету. Оч. интересно на слабых процах при малом лимите времени и если повезёт -- огромные куски массива не вырезаны и остаются монолитной стеной -- самые красивые, но не самые сложные лабиринты. Да, эта проверка переменной Frames в конце алгоритма -- не просто ожидание в 3с. Так как цикл построения вечный, такая проверка позволяет отрегулировать время построения. Ну, нынешним процам на всё-про всё обычно 5мс хватает, а для Z80 это важно! Но алгоритм самый быстрый из того, что я пробовал до сих пор. Обязательно применю и сделаю Лабираторию 2 (Лабиратория 1 -- вариант 2 с подъёмом стенок и проверкой связности. Если кому надо, могу исходник кинуть тут. Или там :) ). Спасибо, SMT.Цитата:
Сообщение от SMT
Допустим, есть лабиринт-дерево. В каких местах надо убрать несколько стенок, чтобы правило правой руки не срабатывало всегда при старте в случ. позиции.
Иными словами, убирается стенка так, чтобы некоторую группу стенок оторвать от общей группы (в лаб.-дереве все стенки соединены). При этом желательно иметь настройки по сложности "отрезанной группы" (чтоб не было отрезанных столбов, к-е за четыре шага обойти можно).
Можно такой способ - право-левой рукой или волной уходим от некоторой клетки рядом со случайной стенкой, ожидая, пока не окажемся в клетке по ту сторону от стенки, которую хотим убрать. Замеряем путь и убираем стенку, если он не меньше минимально допустимого.
Но это м/б медленно. Хотелось бы уметь это делать в время или до построения лабиринта.
Кстати, понял - чтобы и не стенка, и не проход. Не проход - чтоб из старта не отводить новые пути при случ. поиске начала нового ответвления. Не стенка - чтоб не закрасить его очередным ответвлением.Цитата:
Сообщение от SMT