Просмотр полной версии : Генератор лабиринтов
Andrew771
16.05.2011, 17:24
Представляю свою программу - "Генератор лабиринтов для ZX Spectrum". Прога для PC, см. файл.
Написал на основе наших бдений: http://zx.pk.ru/showthread.php?t=1394&page=9
Возможности программы:
- генерация лабиринта размером от 3х3 до 128х128 клеток, количество клеток по горизонтали и вертикали может отличаться друг от друга;
- из любой точки лабиринта в другую любую точку можно пройти только одним путем;
- сгенерированный лабиринт показывается на экране;
- готовый лабиринт выводится в файл labirint.txt в виде блоков defb для вставки в любые ассемблерные программы на ZX Spectrum;
- лабиринт может состоять из различных элементов: коридоров, стен двух типов, залов, колонн в залах, врагов, аптечек. Названия элементов условные, в выходном файле не учитываются. Записываются только их шестнадцатеричные коды;
- границы лабиринта всегда состоят из сплошных стен;
- можно регулировать различные параметры генерации: правила построения коридоров, вероятности появления каждого элемента;
- можно переопределять шестнадцатеричные коды для каждого элемента;
- можно кодировать лабиринт по 1 клетке на байт или по 2 клетки на байт.
Andrew771
18.05.2011, 17:18
Если лабиринт закодирован по 2 клетки на байт, то вот процедурки для чтения и записи по нужному адресу и полубайту. В них длина лабиринта по горизонтали 128 клеток, ширина по вертикали произвольная. Длину легко можно поменять.
BEGLAB EQU ... ; адрес начала лабиринта
; получение значения клетки по логическим координатам
; входные параметры: B = вертикальная координата в лабиринте, C = горизонтальная координата в лабиринте
; выходной параметр: A = элемент лабиринта (биты 0-3)
GETKL LD H,B ; расчет логического адреса клетки
LD L,0
SRL H
RR L
LD B,0
ADD HL,BC
SRL H ; расчет физического адреса клетки в памяти
RR L
LD BC,BEGLAB
JP C,GETKL1 ; если нечетный логический байт, то вторая половина физического байта
ADD HL,BC ; достаем клетку лабиринта
LD A,(HL)
RRCA
RRCA
RRCA
RRCA
AND #0F
RET
GETKL1 ADD HL,BC
LD A,(HL)
AND #0F
RET
; занесение в клетку заданного значения по логическим координатам
; входные параметры: B = вертикальная координата в лабиринте, C = горизонтальная координата в лабиринте, A = элемент лабиринта (биты 0-3)
; выходных параметров нет
PUTKL LD H,B ; расчет логического адреса клетки
LD L,0
SRL H
RR L
LD B,0
ADD HL,BC
SRL H ; расчет физического адреса клетки в памяти
RR L
LD BC,BEGLAB
JP C,PUTKL1 ; если нечетный логический байт, то вторая половина физического байта
ADD HL,BC ; достаем клетку лабиринта
RLCA
RLCA
RLCA
RLCA
LD C,A
LD A,(HL)
AND #0F
OR C
LD (HL),A
RET
PUTKL1 ADD HL,BC
LD C,A
LD A,(HL)
AND #F0
OR C
LD (HL),A
RET
Andrew771
02.11.2012, 12:58
Maze generation for ZX Spectrum
English version
Andrew771, под какое разрешение написана твоя программа?
у меня окно в экран не лезет
Andrew771
02.11.2012, 13:52
Andrew771, под какое разрешение написана твоя программа?
у меня окно в экран не лезет
1280х1024. С трудом влезает в 1024х768.
Andrew771, ну да у меня 1024х768
Andrew771
02.11.2012, 15:39
Я вообще-то эти программы (3D-View и Генератор лабиринтов) писал для разработки ZXOOM, как инструменты. Так что про внешний вид не заморачивался сначала. А потом дошло, что их можно использовать и для других будущих игр. :)
goblinish
12.11.2012, 09:47
Запустил программу, и оно повисло. надо старое написанное интро переписать.
Andrew771
12.11.2012, 17:28
Запустил программу, и оно повисло. надо старое написанное интро переписать.
Что повисло? Лабиринт вывелся? Ассемблерный код выводится сразу в текстовый файл.
goblinish
12.11.2012, 17:33
Что повисло? Лабиринт вывелся? Ассемблерный код выводится сразу в текстовый файл.
сразу при запуске повисло всё.
Andrew771
12.11.2012, 22:40
странное что-то у тебя.
goblinish
13.11.2012, 15:27
странное что-то у тебя.
не странное, а параноик Comodo.
вот еще - кликаю "сгенерировать лабиринт" и все ок.
галочка на "показывать пошаговую генерацию лабиринта", картинка рисуетcя и висняк.
Аналогичное - галочка, клик накнопку и "задумчивость" программы.
Andrew771
14.11.2012, 09:34
Фик знает, что ето. Можь, антивирусняк всё-таки блокирует.
goblinish
14.11.2012, 09:43
Фик знает, что ето. Можь, антивирусняк всё-таки блокирует.
о блокировке я бы знал:) но выходит вот такой факт.
Andrew771
14.11.2012, 10:08
У меня Avast на работе блокирует все мои программы, только в "Песочнице" разрешает (и отключить антивирь нельзя, т.к. запрещено админом). Причем антивирь не предупреждает, что блокирует. Проги работают, но не могут записывать файлы. В пошаговой генерации есть пустой цикл для задержки, таймер не стал использовать. Антивирь может думать, что это вирусная деятельность.
goblinish
14.11.2012, 10:23
Andrew771, Comodo помещает в песочницу, хотя приложение и работает медленно. но зависаний не заметил.
так что причина не с антивирусом имхо.
У меня Avast на работе блокирует все мои программы, только в "Песочнице" разрешает (и отключить антивирь нельзя, т.к. запрещено админом). Причем антивирь не предупреждает, что блокирует. Проги работают, но не могут записывать файлы. В пошаговой генерации есть пустой цикл для задержки, таймер не стал использовать. Антивирь может думать, что это вирусная деятельность.
Отключи эту песочницу напрочь, она параноик.
Дополнительная защита --> AutoSandbox --> Настройки --> Включить AutoSandbox (снять галочку и всё, нету больше песочницы).
goblinish
14.11.2012, 10:52
Отключи эту песочницу напрочь, она параноик.
Видимо, ты в конторах, где жесткая политика не позволяет вертеть антивирусом, как хочется, не работал.
Видимо, ты в конторах, где жесткая политика не позволяет вертеть антивирусом, как хочется, не работал.
Думаю, что контора, которая использует бесплатный Аваст может идти лесом. Если бы там стоял антивирус за деньги, то это другое дело.
И да, если сисадмин не поставил пароль на антивирус (в Авасте он есть), чтобы в него не залезали, это его проблема. Так что песочницу эту, думаю, можно и отключить. Абсолютно не нужная параноидальная вещь.
goblinish
14.11.2012, 12:43
Думаю, что контора, которая использует бесплатный Аваст может идти лесом. Если бы там стоял антивирус за деньги, то это другое дело.
Опять же поверхностный взгляд. Было бы лучше, чтобы причина шлюка утилиты выявлена. Хотя это и не критично.
Andrew771
14.11.2012, 15:37
Думаю, что контора, которая использует бесплатный Аваст может идти лесом. Если бы там стоял антивирус за деньги, то это другое дело.
Ха-ха, если жить по такой логике в России, то эдак никуда не устроишься. :)
И да, если сисадмин не поставил пароль на антивирус (в Авасте он есть), чтобы в него не залезали, это его проблема. Так что песочницу эту, думаю, можно и отключить. Абсолютно не нужная параноидальная вещь.
Пароль админ поставил.
---------- Post added at 15:37 ---------- Previous post was at 15:37 ----------
Было бы лучше, чтобы причина шлюка утилиты выявлена. Хотя это и не критично.
еще раз посмотрю в коде.
Ха-ха, если жить по такой логике в России, то эдак никуда не устроишься.
Ты меня не понял. Лесом могут идти те, кто антивирус ставил. Неужели денег не хватило на лицензию одну, но на много компьютеров? Просто к Авасту ооочень желателен тот же Comodo, иначе толку от него будет немного.
Пароль админ поставил.
Ну молодец он. Выбирай из-за чего программа в песочницу отправляется. Из-за того, что редкий файл?
http://savepic.ru/3319275m.png (http://savepic.ru/3319275.htm)
goblinish
14.11.2012, 16:28
Из-за того, что редкий файл?
Комодо как критерий берет отсутствие цифровой подписи.
Andrew771
14.11.2012, 17:44
Ну молодец он. Выбирай из-за чего программа в песочницу отправляется. Из-за того, что редкий файл?
Да, из-за редкости. Но к настройкам кстати доступ закрыт паролем.
Правда, я обнаружил, что если просканировать Авастом данный конкретный файл и поставить на него в контекстном меню по правой кнопке мыши "Открывать вне песочницы", то к нему появляется полный доступ. :)
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot