март 26, 2022

Maze Adventure by David Payne

Добавить в
Мои игры
Торрент
Скачать

Приключение в лабиринте

Исследуйте лабиринт, соберите все ключи и доберитесь до выходного портала, чтобы перейти на следующий уровень.

Ключи:

Клавиши управления курсором

Обратите внимание, что в начале игры и перед каждым новым уровнем существует задержка в 15 секунд (примерно), поскольку лабиринт создается

Используемый алгоритм генерации лабиринта представляет собой рандомизированный поиск в глубину (https://en.wikipedia.org/wiki/Maze_generation_algorithm#Randomized_depth-first_search) переменные, используемые в основной программе (все переменные являются глобальными, за исключением x и y, которые локальный в PROCa):

n и m — эти значения определяют размер лабиринта. m должно быть установлено на n*2+2

для лабиринта 5 x 5: n = 10, m = 22

для лабиринта 4 x 4: n = 8, m = 18

для лабиринта 6 x 6: n = 12, m = 26

g — двумерный массив, представляющий лабиринт. четные строки/столбцы представляют ячейки (каждая комната содержит 2x2 ячейки). нечетные строки/столбцы представляют стены между ячейками

w - номер уровня (следовательно, также количество ключей на текущем уровне)

r — используется для заполнения генератора псевдослучайных чисел

a,b - счетчики циклов. Позже используется для перемещения влево/вправо и вверх/вниз нажатой клавиши курсора

i,j,c – счетчики циклов

x,y (глобальные переменные) - координаты x,y ячейки, в которую помещается объект

k,l - координаты x,y текущей комнаты в лабиринте (с шагом 4, начиная с 1)

s,t - x,y координаты игрока в текущей комнате

v - количество собранных ключей

у - клавишанажат

z - счетчик циклов. Позже то, что находится в направлении, в котором пытался двигаться игрок:

0 - пустое место

1 – ключ

2 — выход из портала

3 – стена

переменные, используемые в PROCa:

x,y (локальные переменные) - координаты x и y текущей ячейки

v - счетчик циклов для списка маршрутов

z - используется для выбора случайного направления. Позже 0, если соседняя ячейка была посещена, 1, если не посещена

r - выбрано случайное направление

a,b - a - смещение влево/вправо в этом направлении, b - смещение вверх/вниз

Объяснение программы (относится к расширенной версии)

инициализация (установка размера лабиринта)

100n=10

101м=22

размер массива (все элементы массива изначально равны 0)

102DIMg(м,м)

установить уровень 1

103w=1

основной цикл игры

104ПОВТОР

запустить генератор псевдослучайных чисел

105r=RND(-TIME)

установить все "внутренние" ячейки как непосещенные (оставив вокруг них границу посещенных ячеек)

106FORb=1TOm-1

107FORa=1TOm-1

108г(б,а)=1

109ДАЛЕЕ

создайте лабиринт (начиная с верхнего левого угла). PROCa также устанавливает v (количество собранных ключей) равным 0.

110PROCa(2,2)

111MODE4

отключить курсор

112ВДУ23,1,0;0;0;0;

поместите объекты в ячейки (w ключи и 1 выходной портал)

200FORi=0TOw

выберите случайную ячейку, убедитесь, что она пуста

201ПОВТОР

202x=СЧ(n)*2

203y=RNД(п)*2

204UNTILg(y,x)=0

поместить объект в эту ячейку

205g(y,x)=193-(i=0)

206ДАЛЕЕ

отображать номер уровня

207ПЕЧАТЬ;w

отобразить верхний левый "дверной косяк"

208VDU9,227

инициализировать координаты x и y комнаты

209k=1

210l=1

инициализировать координаты x и y игрока в комнате

211s=5

212t=4

отключить клавиши курсора для редактирования

213*FX4,1

A% используется вызовом &FFF4 (OSBYTE) позже

300A%=135

цикл текущего уровня

301ПОВТОР

отобразить/удалить объекты в ячейках текущей комнаты

302FORj=0TO1

303FORi=0TO1

304VDU31,18*i+10,14*j+8,g(l+j*2+1,k+i*2+1)+32

305ДАЛЕЕ

отобразить/удалить стены текущей комнаты

z равен 0 для горизонтальных стен и 1 для вертикальных стен

306FORz=0TO1

307FORj=0TO2-z

308FORi=0TOz+1

400VDU31,i*18+2-z,j*14+z+1,17,g(l+j*2+z,k+i*2+1-z)

401FORc=z*4TO16

402VDU227,8,9+з

403ДАЛЕЕ

снова установить белый цвет, отобразить "дверной косяк"

404VDU17,1,227

405ДАЛЕЕ,

текущий цикл комнаты

406ПОВТОР

отобразить проигрыватель

407ВДУ31,с,т,227

действительный цикл перемещения

500ПОВТОР

действительная петля нажатия клавиши

501ПОВТОР

502u=GET-136

503b=(и=3)-(и=2)

504a=(и=0)-(и=1)

505UNTILa+b

проверить, что лежит в направлении, в котором пытался двигаться игрок

506ВДU31,с+а,т+б

Вызов &FFF4 (OSBYTE) с A%=135 возвращает символ в текущей позиции курсора

507z=(USR(&FFF4)AND768)/256

0 - пустое место

1 – ключ

2 — выход из портала

3 – стена

выйти из цикла, когда z = 0 ИЛИ z = 1 ИЛИ z = 2 И все ключи собраны, иначе движение в этом направлении невозможно

508UNTILz+(v=w)<2

удалить плеер

600ВДУ31,с,т,32

обновить координаты x и y игрока

601с=с+а

602t=t+b

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

603IFz=1THENg(l+t DIV7,k+s DIV9)=0:v=v+1:VDU7,19,1,7+(v=w)*5;0;31,38+(v >9),0:ПЕЧАТЬ;v

цикл выхода, когда игрок вышел из комнаты или достиг выходного портала

700UNTILs=0ORs=38ORt=0ORt=30ORz=2

если выйти из комнаты слева/справа, войти в новую комнату справа/слева

701s=s-a*37

если выйти из комнаты сверху/снизу, войти в новую комнату снизу/сверху

702t=t-b*29

обновить координаты комнаты

703l=l+b*4

704k=k+a*4

выйти из цикла, если достигнут выходной портал (уровень пройден)

705UNTILz=2

уровень увеличения

706w=w+1

зеленый/пурпурный мигающий экран

707VDU19,1,10;0;

воспроизвести звуковой эффект в конце уровня

708GOSUB1000

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

709UNTILw=n*n

710END

Маалгоритм генерации ze

800DEFPROCa(x,y)

установить ячейку как посещенную

801g(y,x)=0

если PROCa была вызвана из основной программы, то определите графические символы, установите более высокий тон звукового сигнала

802IFr<0THEN!&C08=&FD070000:!&C0C=&A7:!&C10=&A5BD81FF:!&C14=&FF81BDA5:!&C18=-1:!&C1C=-1:?&265=200

установить 4 направления на выбор

1 – вверх

3 – слева

5 – справа

7 - вниз

900!&70=&7050301

проверить направления в случайном порядке, ища 1-е, где ячейка в этом направлении не посещается

901v=4

902ПОВТОР

Используется RND(12), поскольку 12 – это НОК 1, 2, 3 и 4

903z=RND(12)MODv

r — выбранное направление

904r=z?&70

замените это направление в списке направлением в конце списка

905z?&70=v?&6F

906b=r DIV3-1

907a=r MOD3-1

908z=g(y+b*2,x+a*2)

потерять направление в конце списка

909v=v-1

выход из цикла, когда список маршрутов пуст или когда мы нашли направление, в котором можем двигаться

910UNTILv=0ORz

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

если не было найдено правильных направлений, вернуться назад

при вызове из GOSUB1000 z будет равно 2, поэтому воспроизводится звуковой эффект fили конец уровня

1000IFz=1THENg(y+b,x+a)=0:PROCa(x+a*2,y+b*2):GOTO900ELSEIFz=0THENENDPROC ELSEFORz=0TO255:SOUND1ANDz,-15,z,0:NEXT :ВОЗВРАТ

Как скачать Maze Adventure by David Payne через торрент

Всего несколько простых шагов:

  • Устанавливаем программу μTorrent, через которую мы будем скачивать торренты
  • Выбираем и скачиваем подходящий торрент-файл репака Maze Adventure by David Payne
  • Двойным кликом открываем скаченный файл, программа μTorrent запустится автоматически и предложит выбрать место для сохранения дистрибутива.
  • После того как репак скачается, запускайте его. Начнется установка и... это все, приятной игры!