февраль 23, 2022

100-line maze by RoePipi

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

Для категории "ПУР-80"

Название: "100-строчный лабиринт"

Платформа: Commodore 16 / Plus/4

Язык: Commodore BASIC V3.5

ВВЕДЕНИЕ

============

Прогуляйтесь по бинарному лабиринту (редактируется в строке программы 0), при желании измерьте свое время.

ФУНКЦИИ

========

– Быстрое действие

- Управление джойстиком (только порт 2)

– Движения по диагонали

- 100(+4) рядов экрана лабиринта (редактируется через строку программы 0)

- Измеряйте свое время

ИНСТРУКЦИЯ ПО ИГРЕ

=================

После запуска программы выполняется 33-секундный этап рендеринга с циклическим изменением цвета границ. Затем появляется верхняя часть лабиринта с вашим персонажем в центре экрана.

Используя джойстик в порту 2, перемещайте своего персонажа в 8 возможных направлениях, избегая стен. (Хотя они не смертельны.) Вы можете наступать только на точки. Если вы дойдете до края лабиринта, вы не сможете двигаться дальше по этому пути. Ваша цель — добраться до самого низа лабиринта, до 104-й строки экрана. В случае успеха игра отображает ваше игровое время (с точностью до 1/60 секунды), которое вы можете сравнить с результатами других игроков.

ОБЗОР ПРОГРАММНЫХ ЛИНИЙ

======================

Используйте команду LIST для просмотра строк программы. Вы можете использовать синтаксис LIST from-to для перечисления определенных интервалов, например. СПИСОК 1–5.

0 установить строку карты

1-5 инициализация и расчеты

6 отобразить начальный экран, данные основных бинарных шаблонов стен, джойстик dданные маршрутов, сброс таймера

7 цикл: определить ход игрока

8 прокрутка экрана вверх или вниз

9 нарисовать линию карты; конец цикла, завершение проверки

ПЕРЕМЕННЫЕ

=========

Переменные цикла A, B, C, D, I

const A$(0-3) базовые бинарные шаблоны стен (2-битные)

const B$(0-255) двоичные шаблоны стен (8 бит)

константа E$ ESC char

const H$ HOME char

const K ROM read switch poke address (1177)

M линия карты для рисования (0-115)

const M$ map, 5*13=65 символов

const M$(0-103) строк карты gfx

постоянный базовый адрес ПЗУ (53248)

постоянный P-код игрока (88)

const R player poke начало строки адреса (3552)

const S пробел код (46)

X-адрес игрока (R – R+39)

Координата Y игрока Y (строка карты, 0-103)

const W экранное окно показывает базовый адрес (2022)

const X,Y(0-8) джойстик направления X,Y (-1/0/1)

ДЕТАЛЬНЫЕ ОБЪЯСНЕНИЯ КОДА

==========================

Примечание. Взаимосвязанные коды занимают несколько строк. Я отметил начальную строку взаимосвязанных утверждений. Сложные циклы расширены.

Также обратите внимание, что я везде использую десятичные точки ("".") вместо "0", чтобы увеличить скорость! (BASIC 3.5 обрабатывает их быстрее)

СТРОКА 0

------

// устанавливаем данные карты лабиринта, каждая строка состоит из 5 символов, свободно редактируемых

M$="(5*13=65 символов данных карты)"

// читаем базовые бинарные шаблоны стен (2-битные: "..", ".W", "W.", "WW")

ДЛЯ A=. К 3: ПРОЧИТАЙТЕ A$(A):NВНЕШНИЙ

СТРОКА 1

------

// считываем данные о движении для 8 возможных направлений джойстика (комбинации -1;0;1)

ДЛЯ A=1 ДО 8:ПРОЧИТАЙТЕ X(A), Y(A):ДАЛЕЕ

// устанавливаем пробел (экранный код)

// ПОЛЕЗНЫЙ СОВЕТ: если установить значение 32 (пробел) и соответственно установить основные бинарные шаблоны стен в строке 6 ("  ", " W", "W ", "WW"), вы можете двигаться вверх бесконечно :)

S=46

// устанавливаем HOME char для строки 9, чтобы оставить там 2 символа

H$="{дом}"

// устанавливаем начало строки адреса экрана игрока (столбец 0 в строке 12)

R=3552

// игрок начнет с центра экрана

Х=R+20

// бинарные данные шаблона стены потребуют 256 различных значений; карта будет отображаться в 104 строки

DIM B$(255), M$(103)

СТРОКА 2

------

// изначально игрок будет начинать с 11 строки карты

Д=11

// устанавливаем код нажатия на экран игрока

P=88

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

К=1177

// устанавливаем адрес базы данных символов в ПЗУ, также используется для обозначения выполнения отрисовки строки в строке 9 (var M)

O=53248

// начальный флаг "не рисовать"; вместо этого при запуске мы будем отображать полный экран строк

М=О

// Сокращение Esc-кода, чтобы сэкономить несколько символов позже

E$=CHR$(27)

// отключаем ОСНОВНУЮ прокрутку, чтобы иметь возможность заполнять последние столбцы экрана, очищать экран, отображать сообщение пользователю и устанавливать положение курсора для правильного отображения исходной карты позже

ПЕЧАТЬ E$"M{clear}{down} RENDERINГ...{вверх}"

// заполняем данные бинарного шаблона стены на основе базовых шаблонов и переменной цикла I

ДЛЯ A=. ДО 3

::::ДЛЯ B=. ДО 3

::::::::ДЛЯ C=. ДО 3

:::::::::::::ДЛЯ D=. ДО 3

::::::::::::B$(I)=A$(A)+A$(B)+A$(C)+A$(D)

:::::::::::::I=I+1

ДАЛЕЕ, C, B, A

СТРОКА 3

------

// вставляем адрес для установки верхней строки окна экрана; также используется для установки нижнего ряда (2021) позже

W=2022

// цикл по столбцам карты

ДЛЯ B=. ДО 4

::::// прокручивать строки карты

::::ДЛЯ A=. ДО 12

::::::::// получить код CHR$ одного символа из M$ (строка сопоставления) на основе A и B

::::::::C=ASC(MID$(M$, A*5+B+1, 1))

::::::::// конвертировать код CHR$ в код экрана (выражения в скобках оцениваются как -1, если правда, и 0, если ложь)

::::::::C=C+(C>63)*64+(C>191)*64

::::::::// прокручивать линии символов

::::::::ДЛЯ D=. ДО 7

::::::::::::// установить чтение из ПЗУ (ПРИМЕЧАНИЕ: работая на Plus/4, вы НЕ ДОЛЖНЫ использовать строковые переменные или что-либо, что использует старшие (> $ 8000) адреса памяти, в то время как это активен)

:::::::::::::POKE K, 62

:::::::::::::// получить строку формы символа

:::::::::::::I=PEEK(O+C*8+D)

:::::::::::::// вернуть чтение из оперативной памяти

:::::::::::::POKE K, 63

:::::::::::::// добавить новые строки символов в соответствующие строки массива строк карты

:::::::::::::M$(A*8+D)=M$(A*8+D)+B$(I)

::::::::ДАЛЕЕ

::::::::// дисплейy некоторые циклы цвета границы, которые затем останавливаются на красивом сине-зеленом цвете

::::::::ЦВЕТ 4, A+1, B+1

::::ДАЛЕЕ

ДАЛЕЕ

СТРОКА 5

------

// отображаем первые 24 строки карты (начинается со второй строки экрана, заполняет остальные)

ДЛЯ I=. TO 23:ВЫПЕЧАТАТЬ M$(I);:ДАЛЕЕ

СТРОКА 6

------

// основные бинарные шаблоны стен и данные о направлениях джойстика

ДАННЫЕ "..", ".W", "W.", "WW", , -1, 1, -1, 1, , 1, 1, , 1, -1, 1, -1, , -1, -1

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

TI$="000000"

СТРОКА 7

------

// начало цикла

СДЕЛАТЬ

::::// читать состояние джойстика на порту 2, игнорируя кнопку Fire (значение 128)

::::I=РАДОСТЬ(2) И 15

::::// A удерживает джойстик в направлении X, за исключением случаев, когда он находится по обе стороны от экрана и направлен наружу

::::A=X(I)-(X=R И I>5)+(X=R+39 И I>1 И I<5)

::::// B удерживает джойстик в направлении Y

::::B=Y(I)

// продолжаем, только если адрес целевого экрана содержит пробельный код

ПОВЕРНУТЬ ДО ПРОВЕРКИ(X+A+B*40)=S

СТРОКА 8

------

// помещаем пробел на позицию игрока

POKE X, S

// добавляем горизонтальное перемещение к позиции X игрока (даже если она равна нулю)

Х=Х+А

// если есть вертикальное движение

ЕСЛИ Б ТО

::::// добавить вертикальное движение к позиции Y игрока

::::Y=Y+B

::::// напечатать код Esc для прокрутки содержимого экрана вверх или вниз в зависимости от направления Y

::::ПЕЧАТЬ E$CHR$(86-(B<.))

::::// разместить персонажа игрока

::::POKE X, P

::::// установить окно экрана в верхнюю или нижнюю строку в зависимости от направления Y

::::POKE W+(B<.), (B>.)*-24

::::// отобразит 12 строк выше или ниже игрока в зависимости от направления Y

::::M=Y+B*12

::::// очистить окно (обязательно, иначе интерпретатор вылетит)

::::SCNCLR

СТРОКА 9

------

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

ПОКЭ Х, П

// "встроенный" при использовании DO-LOOP: отображать строку карты, только если мы находимся внутри измерений 0-103

ДЕЛАЙТЕ, ПОКА M>=. И М<104

::::PRINT M$(M);

::::// флаг "не рисовать" (пока M не будет установлено допустимое значение в следующий раз)

::::M=O

ЦИКЛ

// сбросить окно (клавиша 2x HOME)

ПЕЧАТЬ Ч$Ч$

// если игрок внутри карты, возвращаемся к строке 7

ЕСЛИ Y<103, ТО 7

// иначе расположите чуть ниже видимой карты и отобразите прошедшее время

ДАЛЕЕ

::::CHAR , ., 14, "ВРЕМЯ:"

::::ПЕЧАТЬ TI

// конец

НАПРАВЛЕНИЯ ДЖОЙСТИКА

===================

8 1 2

 \|/

7-0-3

 /|\

6 5 4

ПРЕОБРАЗОВАНИЕ CHR$ В ЭКРАННЫЕ КОДЫ

==============================

CHR$ -> экран

32–63 -> 32–63 (то же самое)

64–95 -> 0–31 (-64)

96–127 -> 64–95 (-32)

160–191 -> 96–127 (-64)

192- -> 64- (-128)

Как скачать 100-line maze by RoePipi через торрент

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

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