Как сделать игру на калькуляторе
Программирование на калькуляторах МК: как я делал графические игры
После прочтения статьи о программируемом микрокалькуляторе на iOS на меня накатил такой приступ ностальгии, что я полез копаться в книжный шкаф, и, после продолжительного поиска, нашёл старую тетрадь с конспектами по программированию и самостоятельно разработанными играми.
На первой странице фломастером гордо накарябан урл сайта на народе, который мы делали чуть ли всем двором. Я периодически буду на него ссылаться.
Начало записей — основы программирования (код был написан для МК-61, но будет работать и на подобных устройствах).
Для перехода в соответствующий режим нужно нажать — Fпрг, для выхода — Fавт.
Базовый приём, которым я пользовался при написании программ — работа с регистрами.
Для записи в регистр используется кнопка П → Х, для вывода X → П. Например, последовательность нажатий 72 П → X 1 записывает число 72 в регистр RG1, а Х → П 1 выводит значение из регистра RG1 в регистр X.
Содержимое регистра X всегда отображается на экране — это один из стековых регистров (X, Y, Z, T). Для работы со стековыми регистрами используются команды:
— В↑ (копирует содержимое регистра X в Y, Y в Z, и т.д).
— (меняет содержимое регистров X и Y местами)
— СХ (стирает содержимое регистра Х)
Также я активно использовал функцию if — за это отвечают клавиши Fx=0, Fx=/0, Fx 0. Синтаксис:
Fx#0 (шаг для перехода, если условие не выполняется) (последующая команда при выполнении условия).
Подробнее о синтаксисе можно почитать в этой статье.
Перейдём к самому интересному. В те годы и при тех обстоятельствах ни у кого из моей компании не было устройств, на которых можно было бы программировать — мы проводили у калькулятора целые часы, и нам это действительно нравилось. Как любые дети, мы хотели играть, и заметили, что функция «инв» (логическое инвертирование) может преобразовать числа, например, в символ «Г». «Е» или «C», а если вывести на экран «8-E-C» и перевернуть калькулятор по часовой — то мы увидим что-то, похожее на человечка.
Игра, код которой был разрисован в тетради краше всего, называлась «Lamer Andrew meets America».
Инструкция гласит: «Вы можете посмотреть мультфильм (нажав ВО СП), выстрелить в монстра (БП 53), сломать машину врага (БП 74). Если вы умрёте, то увидите символы ‘8 *****’, если выиграете — ‘ECC’. В этой игре можете использовать сразу несколько видов — спереди и сверху». Незамысловато.
В значения регистров командой П (например, 80013 инв П 0) заносилась «анимация»:
Регистр | Значение для «нормального вида» | Значение для «продвинутого вида» |
0 | 80013 инв | 80013 инв |
1 | 8 инв | 8 инв |
2 | 81 инв | 81 инв |
3 | 801 инв | 8573 инв |
4 | 800077 инв | 857 инв |
5 | 80109 инв | 81308333 инв |
6 | 80108 инв | 81300876 инв |
7 | 8077099 инв | 8570757 инв |
8 | 8015 инв | 8135 инв |
9 | 80105 инв | 81305 инв |
a, b | 5 инв | 5 инв |
c | 807799 инв | 857757 инв |
d | 80779 инв | 8577333 инвa |
Сам код (для сокращения записи операции «П→x», «x→П» и «С/П» обозначены как «ИП», «П» и «СП») простой и длинный:
Итак, наша программа в основном состоит из операторов вывода на экран «анимации» (последовательности значений регистров), операторов остановки и безусловного перехода. Например, «стреляет» наш человечек вот так:
Реальный калькулятор перед новым выводом на экран гасил его на доли секунды — это придавало больше реалистичности «стрельбе».
Просто, но результат нам очень нравился, а родители даже нарисовали нам грамоту 🙂
Не наигрались? Второй (и последний) код из той самой тетради — тамагочи (да, тоже с графикой):
[ип1] [ип1] [ип1] [ип1] [ип1] [с\п] [ипВ] [В^] [2] [0] [-] [Fx>/=0] [19] [8] [0] [0] [1] [3] [Kинв] [С\П] [ипВ] [в^] [1] [+] [пВ] [С\П] [Сх] [ипС] [В^] [1] [0] [-] [Fx>/=0] [35] [ип3] [с\п] [ипD] [В^] [1] [5] [-] [Fx>/=0] [44] [ип3] [с\п] [ип8] [В^] [1] [0] [-] [Fx>/=0] [] [53] [ип3] [сп] [ВО] [ипD] [B^] [2] [-] [ПD] [C/П] [ип6] [ип7] [8] [ВО] [ипС] [B^] [2] [-] [пс] [о] [сп] [ип9] [ипА] [ВО] [ип8] [В^] [3] [-] [п8] [с\п] [ип4] [с\п] [BО] [ипВ] [B^] [10] [-] [Fx>/=0] [93] [ип2] [п1] [ВО]
Инструкция, переведённая с того языка, который я принимал в детстве за английский:
Нажмите С\П — вы увидите Андрея. Нажмите С\П ещё раз, и он начнёт программировать. Вы увидите какие-то цифры — это вывод с его программ. Нажмите С\П. После пяти программ Андрей вырастет на пять лет. Ваша цель — дорастить его до 20ти, помогая Андрею:
1. Кормите его. Нажмите БП 65 и С\П. Он поест, и коэффициент голода понизится. Если значение коэффициента достигнет 10 — он умрёт, а вы увидите отличное видео.
2. Гуляйте с ним. Нажмите БП 84 и С\П. Он погуляет и сходит в туалет. Если значение «антипрогулочного» коэффициента достигнет 10 — он умрёт. С видео!
3. Сон. Когда Андрей устал, нажмите БП 75 С\П. Чтобы разбудить — нажмите С\П. С видео.
4. Посещение врача. Когда Андрею исполнится 10, ему нужно будет сходить к врачу. Нажмите БП 55 С\П.
Если вы выиграете — вы увидите » 8 ЕС «, если проиграете — » 8——8 «. Андрей меняется по мере роста!