Meteor Storm by Sioban
11-й конкурс BASIC 10 Liner Contest (2022 г.)
--------------------------------------------- р>
Название игры: Meteor Storm
8-битный компьютер: C64
Язык: Commodore 64 BASIC V2
Категория: ПУР-80
Подкатегория: ДЕЙСТВИЕ (пристрели их)
Автор: Сиобан©2022
*** Я согласен, что программу можно немедленно опубликовать.
╔════════════════════════╗ ║************************║ ║***** МЕТЕОРНЫЙ ШТОРМ *****║ ║************************║ ╚════════════════════════╝2332 год. Планете Вулкан Б угрожает рой метеоритов, прилетевших из глубокого космоса. Вам как флагману Звездного Флота поручено не допустить падения метеоритов на вашу планету и тем самым спасти ее от разрушения.
В вашем распоряжении суперпушка, которую вы можете ориентировать в разных направлениях прибытия метеоров. Оказавшись на позиции, у вас есть только один выстрел на каждый метеор. Но будьте осторожны, с увеличением уровня количество метеоров и их скорость также увеличиваются, поэтому вам придется выбирать, какой из них сбить первым!
┌─────────────────┐ │Запуск игры│ └────────────────┘После некоторой инициализации через несколько секунд вы готовы спасти свою маленькую планету от роя метеоров!
Клавиша «R» для перемещения пушки по планете
[пробел] для запуска ракеты.
Помните... у вас только одна жизнь.
Удачи!
┌─────────────────┐ │Пояснение кода│ └────────────────┘Описание переменной
<р> --------------------------------------------------------- ------#имя #описание
Переменная, используемая для чтения ДАННЫХ (значение приращения)
B() Количество возможных позиций для каждого направления метеора
Строка B$, используемая для чтения ДАННЫХ (ячейки памяти)
C количество метеоров на экране (+1)
Приращение D для движения метеора
Флаг E(): начать движение каждого метеора
Переменная F для положения пушки
Флаг G и индекс положения ракеты
Переменная K для ASCII-кода нажатой клавиши
Уровень игры L
Константа L$ "LEVEL:"
Индекс позиции M() для каждого метеора
Константа O$ "ИГРА ЗАКОНЧЕНА"
Начальное направление P() для каждого метеора
Ячейки памяти Q(i,j) для положений метеоров в соответствии с направлением «i» и индексом положения «j»
Адрес цвета границы экрана R
Оценка S
Константа S$ "SCORE:"
Адрес тома V SID
Константа Z для кода ASCII 32
FN P(x) возвращает случайное число от 0 до x
FN Y(x) возвращает M(x), если M(x)>=0; 0, иначе
>>>[line0]:
L=-1 инициализирующая переменная для номера уровня
D=0,1 начального приращения движения метеора
R=53280 адрес для цвета границы
V=54296 адрес для тома SID
READ B$ прочитать строку DATA строки 6
O$="GAME OVER" понятная строка
Матрица DIM Q(8,18) положений метеоров: (направление, положение)
ПОКЕР,0:POKER+1,0 устанавливает черный цвет рамки и фона
Цикл FORI=0TO7 для 8 направлений
>>>[строка1]:
Q(I,0)=VAL(MID$(B$,1+I*4,4)) первая позиция для каждого направления считывается непосредственно из строки B$
(4 символа)
READ A,B(I) прочитать приращение позиции и количество позиций
для каждого направления
FORJ=1TOB(I):Q(I,J)=Q(I,J-1)+A:NEXTJ,I для каждого направления вычисляет все ячейки памяти экрана
(по приращению) и сохраняем их в матрицу Q. Расчет производится
снаружи к центру экрана
(ячейка памяти $05F3(#1523))
Z=32 присваивает переменной Z код ASCII для
>>>[строка2]:
PRINT"{CLR}": POKE1523,160 очищает экран и помещает "сплошной квадрат" в центр экрана
(примечание: {CLR}=[SHIFT]+[CLR/HOME] )
DEF FN P(X) = INT(RND(.)*X) определяет функцию: получает случайное число от 0 до X-1
DEF FN Y(X) = -(M(X)>=0)*M(X) определяет функцию: получить M(X), если M(X)>=0, в противном случае 0
G=0 инициализировать флаг срабатывания
L$ = "УРОВЕНЬ: строка, не требующая пояснений
>>>[line3]:
POKE Q(P(C),FN Y(C)),Z удалить символ в позиции Q()
IF E(C)=0 THEN P(C)=FN P(8) выбирает случайное направление для c-го метеора (только в первый раз)
M(C) = FN P(4) - 4 индекс стартовой позиции c-го метеора (между -4 и -1)
E(C) = 1 разрешает движениеметеор
S$="{HOME}SCORE: строка для отображения счета
(примечание: {HOME}=[CLR/HOME])
>>>[line4]:
M(C)=M(C)+D увеличивает положение c-го метеора
IF M(C)>=0 THEN POKE Q(P(C),M(C)),42, если метеор находится в видимой области
затем визуализируйте его (42 — это символ ASCII для '*')
IF M(C)>=B(P(C)) THEN PRINT SPC(255)O$:END, если метеор упадет на планету... ИГРА окончена
(положение метеора превышает максимально допустимое)
>>>[line5]:
POKE Q(F,G),Z удалить последнюю позицию ракеты
POKE Q(F, B(F)),90 отобразить пушку
K=0 инициализировать переменную для получения символа
GET K$: IF K$ THEN K=ASC(K$), если нажат символ, его ASCII-код в K
IF K=Z AND G=0 THEN G=B(F), если [пробел] нажат, а выстрел еще не произошел,
узнать направление пушки
>>>[line6]:
ЕСЛИ K=82 И G=0, ТО POKE Q(F,B(F)),Z, если нажата кнопка "R" и она еще не стреляла,
очистить последнюю позицию пушки
F=-(F<7)*(F+1) если f<7, то f=f+1 иначе f=0 (всего 8 позиций)
DATA"10721083109415422015200319911504 строка данных для ячеек памяти (каждая из 4 цифр)
для 8 стартовых углов
>>>[line7]:
IF G THEN G=G-1:POKE Q(F,G),46 если пушка выстрелила, переместите ракету в новое положение
ЕСЛИ F=P(C) AND M(C)>=G, ТОГДА POKE Q(F,G),Z уничтожить метеор, если произошло столкновение с ракетой
G=0:E(C)=0:S=S+100 снова включить пушку, сбросить положение метеора, увеличить счет
GOTO 9 переход на строку 9
>>>[line8]:
PRINT S$ S TAB(Z) L$ INT(L+1) распечатать счет и уровень в верхней части экрана
C=-(C ПЕРЕЙДИТЕ 3, повторите цикл DATA 41,10,40,10,39,10,-1,18,-41,11,-40,11 пары значений: приращение для каждого направления и общее количество позиций >>>[line9]: POKE R, 2 рамки красного цвета ДЛЯ T=0 ДО 8: POKE V, FN P(15): СЛЕДУЮЩАЯ случайная громкость для получения звукового эффекта D=D+0,025 метеор движется быстрее L=L+.1 повышение уровня игры Цвет границы POKE R,0 снова черный GOTO 8 переход к строке 8 ДАННЫЕ -39,11,1,18 пар значений: приращение для каждого направления и общее количество позиций
Как скачать Meteor Storm by Sioban через торрент
Всего несколько простых шагов:
- Устанавливаем программу μTorrent, через которую мы будем скачивать торренты
- Выбираем и скачиваем подходящий торрент-файл репака Meteor Storm by Sioban
- Двойным кликом открываем скаченный файл, программа μTorrent запустится автоматически и предложит выбрать место для сохранения дистрибутива.
- После того как репак скачается, запускайте его. Начнется установка и... это все, приятной игры!