Игра Питон для ЭКВМ


Главная / ЭКВМ / Программы для ЭКВМ / Игры

экран игры Питон на ЭКВМ Электроника МК-152

Несмотря на то, что ЭКВМ предназначены не для игр, на них можно выполнять игровые программы. Быстродействия клавишных ЭВМ достаточно даже для динамических игр с ограниченным количеством движущихся объектов. На примере известной игры "Питон" (он же "Червяк" или "Змейка") рассмотрим способы работы с графическим экраном, выполнение опроса клавиатуры без останова программы, а также косвенную адресацию массива координат.

На специализированных игровых машинах, а также на персональных компьютерах, КПК, смартфонах, телефонах и т.п. эта игра выглядит более красочно. Но суть игры и структура программы от качества графики принципиально не изменятся, а в программе размером 360 байт разобраться куда легче.




Игровая программа "Питон" для ЭКВМ "Электроника МК"

  0 1 2 3 4 5 6 7 8 9
000 Cx П 9 П А П С РР П 90 10 РР П 90 01
010 РР П 90 03 1 РР П 90 02 2 П 7 3
020 2 П 3 П 4 П 8 6 4 П В 2 2 0
030 Р П 17 4 5 0 Р П 16 Cx ИП В РР П
040 90 00 6 3 ИП В РР П 90 12 Cx B↑
050 8 5 РР П 90 00 3 2 2 РР П 90
060 21 1 РР П 90 03 РР ИП 90 55 Р П 18
070 Р ПП 03 11 ИП 3 - F x≠0 70 ИП Е ИП D РР П
080 90 11 ИП 7 2 × П 0 ИП 8 П 5 ИП 3 К П 5
090 F L0 89 5 РР П 90 50 РР ИП 90 29 K NOT
100 F x≠0 31 Р ИП 17 - F x≠0 23 F x<0 27 1
110 + F x=0 17 1 /-/ БП 18 1 П А Cx
120 П 9 БП 31 1 /-/ БП 28 1 П 9 Cx
130 П А ИП 9 F x=0 40 ИП А F x=0 40 Р БП 02 87
140 ИП 9 ИП 3 + П 3 F x<0 50 ИП В + БП 54
150 ИП В - F x≥0 55 П 3 ИП А ИП 4 + П 4 F x<0
160 65 ИП В + БП 69 ИП В - F x≥0 70 П 4
170 ИП 4 ИП 3 РР ИП 90 11 P x≠0 02 54 ИП 4 ИП Е
180 - P x=0 03 28 ИП 3 ИП D - P x=0 03 28
190 ИП 8 ИП 7 2 × + 1 - П 5 2 +
200 П 6 К ИП 5 К П 6 К ИП 5 К П 6 ИП 7 1 + П 7 Р ИП
210 16 - F x≥0 17 Р ИП 16 П 7 2 0 B↑
220 8 0 РР П 90 00 Cx B↑ 3 ИП С 1
230 + П С РР П 90 24 4 4 0 ИП 8 РР П
240 90 52 Р ПП 03 11 РР ИП 90 11 F x=0 42
250 F O РР П 90 11 ИП 7 П 0 2 × ИП 8 +
260 П 1 2 + П 2 К ИП 1 К П 2 К ИП 1 К П 2 F L0 64
270 4 РР П 90 01 ИП 7 2 × ИП 8 + 1
280 - П 5 К ИП 5 К ИП 5 РР П 90 11 0 РР П 90
290 01 ИП 8 1 - П 5 ИП 4 К П 5 ИП 3 К П 5 РР П
300 90 11 К ГРФ РР ИП 90 50 F x=0 03 Р БП 00
310 92 К СЧ ИП В × K [x] П Е К СЧ ИП В × k [x]
320 П D В/О 8Fh A8h E2h AEh ADh 00h РР ИП 90
330 55 К МС→Г Р ИП 18 К МС→Г - F x<0 43 2 4
340 + БП 36 К Г→МС П 0 Cx ИП 0 K [x] 6 0
350 × ИП 0 K {x} 1 0 0 × + ИП С С/П

Программа загружается и запускается с нулевого адреса. После загрузки нажать "В/О", "С/П".

экран игры Питон на ЭКВМ Электроника МК-152

Цель игры - собрать как можно больше призов за меньшее время. Призы выводятся как отдельные точки на игровом поле (слева). Количество собранных призов выводится справа. После каждого собранного приза питон удлинняется, но не более максимального значения, записываемого в R16 в адресах 32-36. Сбор приза подтверждается звуковым сигналом, частота которого (высота тона) задается в адресах 235-237. Для отключения звука следует записать по этим адресам нули.

Управление питоном производится при помощи клавиш со стрелками: ←,↑,↓,→. Сразу после запуска программы питон неподвижен до нажатия любой клавиши. Игровое поле замкнуто (тороидальная топология), то есть ушедший вправо питон вылезет слева и т.п. Питону нельзя пересекать самого себя.

После окончания игры (самопересечения) в регистре X выводится число собранных призов, в регистре Y - потраченное время в формате "М,С".

Приведенную программу следует рассматривать как основу для более интересных игр. При желании она может быть усовершенствована. Например, добавлено большее количество жизней (допустимое количество самопересечений), различные типы призов, препятствия. Возможна реализация и сетевого варианта игры - несколькими питонами на общем игровом поле, с обменом данными между ЭКВМ по параллельному или последовательному порту.




Структура программы "Питон"

Краткое описание структуры программы приведено ниже в таблице. Программа использует следующие регистры:
R0 - вспомогательная переменная для организации циклов;
R1, R2 - вспомогательные переменные для косвенной адресации с автодекрементом;
R5, R6 - вспомогательные переменные для косвенной адресации с автоинкрементом;
R3, R4 - координаты головы питона X и Y соответственно;
R7 - текущая длина питона (от 2 до 450 в программе);
R8 - база для косвенной адресации массива координат точек питона (т.е. младший регистр массива, в программе 32);
R9 RA - текущее изменение координат питона на каждом шаге по X и Y соответственно (числа -1,0,1);
RB - константа 64;
RC - счетчик призов;
RD, RE - координаты очередного приза X и Y соответственно;
R16 - максимальная длина питона (450 в программе);
R17 - константа 220 (для опроса клавиатуры);
R18 - время старта программы (из часов реального времени).

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

Адрес Выполняемые действия
00-36 Занесение начальных значений в регистры. Инициализация и очистка графического экрана
37-47 Отрисовка вертикальной линии в центре экрана
48-60 Вывод строки "Питон", записанной с адреса 322
Примечание: Шрифт надписи в программе не соответствует виду экрана на фотографии - разные версии игры
61-64 Установка шрифта 1 в R9003.
Примечание: Если вставить эти команды до вывода строки в R9021 (по адресам 55-61), надпись будет выводиться крупным шрифтом, как на фотографии
65-69 Запись времени начала игры из часов реального времени R9055 в R18
70-76 Выбор координат приза так, чтобы координата X приза не совпадала с координатой X головы питона. Координата Y не проверяется, для несовпадения точек достаточно и одной. Координаты устанавливаются в подпрограмме по адресу 311
77-81 Отрисовка приза точкой (R9011)
82-91 Подготовка переменных R0, R5 и цикл занесения начальных координат в массив точек питона. Здесь координаты X и Y всех начальных точек совпадают, поскольку берутся из одного регистра R3.
92-95 Задание минимального времени одного шага питона в сотых долях секунды в таймере R9050. В программе минимальное время одного шага составляет 0,05 сек, т.е. скорость питона не более 20 пикселей в секунду. Для изменения можно заменить 5 на другое число
96-101 Считывание скан-кода нажатой клавиши из R9029, и его инвертирование. Если ни одна клавиша не нажата, переход на адрес 131
102-130 Проверка скан-кода нажатой клавиши. Установка содержимого R9, RA в соответствии с кодом клавиши
131-139 Проверка R9, RA. Если равны 0, то питон неподвижен - переход на адрес 287
140-154 Изменение X координаты головы R3+=R9, приведение R3 к диапазону 0-63
155-169 Изменение Y координаты головы R4+=RA, приведение R4 к диапазону 0-63
170-177 Считывание точки с экрана в текущей позиции головы питона. Если пустая, переход к адресу 254
178-189 Точка установлена, проверка на совпадение с призом. Если не приз, то это самопересечение, переход на адрес 328
190-208 Приз, добавление одной точки к питону в массив координат. Инкремент R7
209-216 Корректировка длины питона с учетом ограничения в R16
217-234 Инкремент числа призов RC и вывод числа в форматированном виде в R9024
235-241 Звуковой сигнал. Частота задана непосредственно 440 Гц, продолжительность взята из R8. Для отключения звука ввести частоту 0 или заменить эти команды на "КНОП"
242-253 Выбор координат нового приза. Проверка, что точка под ним была пустая. Отрисовка точки
254-269 Цикл сдвига массива координат точек в памяти с использованием косвенной адресации с автодекрементом. Соответствует движению питона
270-290 Гашение точки в хвосте питона. Для этого атрибуты вывода в R9001 временно устанавливаются значением 4 (инверсия)
291-301 Рисование точки в голове питона. Следует обратить внимание, все тело питона на каждом шаге не перерисовывается, что заметно ускоряет работу программы
302-310 Отрисовка графического экрана. Цикл проверки таймера R9050. Переход на адрес 92, если время задержки истекло
311-321 Подпрограмма генерации случайных координат приза без проверки на занятость позиции. Занесение в RD, RE
322-327 Строка "Питон" в кодировке ЭВМ (кодовая страница 866)
328-359 Вычисление времени работы программы. Преобразование времени в формат "М,С". Вывод числа призов. Останов программы



экран игры Питон

Хотя существующий вариант игры вполне удовлетворителен по скорости, его можно усовершенствовать. Для этого следует заменить цикл сдвига массива по адресам 254-269, поскольку время выполнения этого блока линейно зависит от длины питона. Вместо сдвига массива в памяти следует использовать кольцевой массив с двумя указателями. Но эта структура хранения координат точек потребует некоторого изменения алгоритма программы.


НПП "СЕМИКО" (383) 271-01-25 (многоканальный)