Route 81 by Marco's Retrobits
ROUTE81
=======
Видеоигра BASIC 10-Liner для Sinclair ZX81
================================= ============
Марко Варезио ([Marco's Retrobits](https://retrobits.itch.io/))
[англоязычный блог](https://retrobits.altervista.org/)
[итальянский языковой блог](https://somebitsofme.altervista.org)
[канал YouTube](https://www.youtube.com/channel/UCWTxG8paNsOUEU5mPcNklXA)
ROUTE81 — это игра в жанре экшн для 8-битного домашнего компьютера Sinclair ZX81.
Это мое второе участие в конкурсе BASIC 10 Liner Contest 2021 года.
Игра полностью написана на языке BASIC, а программа состоит из 10 строк.
Управляйте своим блестящим спортивным автомобилем. `*` по самому знаменитому шоссе в истории компьютеров!
Избегайте других автомобилей `o` и съезда с дороги.
Управление: управляйте автомобилем с помощью "o" (влево) и "p" (вправо).
Видео игрового процесса:
Играть онлайн: https://somebitsofme.altervista.org/rm-rf/site/?p=emu/jtyone&l=2&tzx=emu/soft/zx...
Описание программы
===================
Машина игрока занимает верхнюю строку экрана, а дорога и другие автомобили
прокручиваются на одну строку вверх при каждой итерации основного игрового цикла.
Всякий раз, когда происходит прокрутка, в нижней части экрана печатается новый участок дороги (со случайным смещением по горизонтали относительно предыдущего)
и новый автомобиль противника (со случайным положением по горизонтали в пределах участка дороги). . Затем обновляется горизонтальное положение автомобиля игрока.на основе нажатой клавиши и печати, и выполняется проверка коллизий.
Переменные
----------
R: Горизонтальное положение сегмента дороги
X: Горизонтальное положение автомобиля игрока
C: Обнаружение столкновения
Список программ
----------------
Программа состоит из 10 строк, каждая из которых короче 80 символов.
Самым сложным аспектом программирования ZX81 BASIC является то, что интерпретатор допускает только один оператор в строке.
В следующем листинге показано, что можно использовать с инструментом ZXText2P для создания файла ".P", подходящего для при загрузке в эмуляторы X81
символы блочной графики заменены соответствующими escape-последовательностями, состоящими из стандартных символов.
Поэтому программа выглядит длиннее, чем есть на самом деле. Подробнее см. в документации ZXText2P:
http://freestuff.grok.co.uk/zxtext2p/index.html
1 LET R=11
2 LET X=R+2
3 PRINT AT 21,0;"\.'\.'\.'\.'\.'\.'\ .'\.'\.'\.'\.'\.'\.'\.' \'.\'.\'.\'.\'.\'.\'.\'.\'.\'.\'.\'.\'.\'.\'."
4 LET R=R+(R<20)*RND-(R>2)*RND
5 SCROLL
6 LET X=X+(INKEY$="P")-(INKEY$="O ")
7 ПЕЧАТЬ НА 21,R;"\## \##";AT 21,R+1+RND*6; "o";AT 0,X;
8 LET C=(PEEK(PEEK 16398+256*PEEK 16399)<>0)*105
9 PRINT CHR$(23 + C)
10 ПЕРЕЙТИ К 4 + C*10
Объяснение исходного кода
----------------------
Инициализации
Первые две строки инициализируют горизонтальное смещение сегмента дороги R и положение автомобиля игрока X.
Строка 3 печатает «стартовую линию» ввнизу экрана.
Игровой цикл
Строка 4 вычисляет положение следующего сегмента дороги для печати со случайным смещением от предыдущего.
Программа также следит за тем, чтобы сегмент дороги оставался в пределах экрана, т. е. левая сторона сегмента дороги оставалась в пределах столбцов 2 и 20.
Строка 5 прокручивает дисплей на одну строку вверх.
Строка 6 вычисляет горизонтальное положение автомобиля нового игрока в зависимости от нажатой клавиши.
Если нажата "P", машина движется вправо; если нажата «O», машина движется влево.
Строка 7 выводит внизу экрана (строка 21):
* новый участок дороги в ранее рассчитанном горизонтальном положении R;
* новый автомобиль противника в произвольном месте в пределах стороны дороги.
Наконец, он устанавливает позицию печати в положение автомобиля нового игрока.
Строка 8 выполняет обнаружение столкновений, считывая значение в текущей позиции печати
(которая соответствует новой положение автомобиля игрока в результате последнего AT в строке 7) в файле отображения,
с помощью системной переменной DF_CC.
Конфликт возникает, если позиция, в которой будет напечатан автомобиль, содержит символ, отличный от пробела
(чей код символа равен 0); в этом случае C устанавливается равным 105. И наоборот, если коллизии нет, C устанавливается равным 0.
Значение значения C будет ясно из следующих утверждений.
Спасибо [kmurta] (http://zx81.eu5.org/) за указание на то, что системная переменная DF_CC может быть проверена PEEK, чтобы определить, какой chсимвол отображается в определенной позиции печати.
Строка 9 печатает автомобиль в позиции печати, заданной в строке 7, т. е. вертикальной позиции 0 (верхняя строка) и горизонтальной позиции X, рассчитанной в строке 6.
Если коллизии (C=105), напечатанный символ представляет собой полный блок, код которого равен 23 + C = 23 + 105 = 128.
В противном случае, если коллизии нет, печатается символ "*", код которого код 23 + C = 23 + 0 = 23.
Если коллизии не происходит, строка 10 возвращается к началу игрового цикла на строке 4;
иначе, в случае коллизии, программа переходит на несуществующую строку, что приводит к завершению программы с кодом 0.
Наслаждайтесь поездкой!
Как скачать Route 81 by Marco's Retrobits через торрент
Всего несколько простых шагов:
- Устанавливаем программу μTorrent, через которую мы будем скачивать торренты
- Выбираем и скачиваем подходящий торрент-файл репака Route 81 by Marco's Retrobits
- Двойным кликом открываем скаченный файл, программа μTorrent запустится автоматически и предложит выбрать место для сохранения дистрибутива.
- После того как репак скачается, запускайте его. Начнется установка и... это все, приятной игры!