101 Компьютерная Игра на Бейсике — обзор старой книжки

234207b1d88c4661f2bc84d529dc7052.png

Давным-давно, чуть больше 50 лет назад вышла книга »101 BASIC Computer Games» — она стала первой книгой на компьютерную тематику, тираж которой перевалил за миллион экземпляров. Нужно понимать — это был 1973 год, до появления домашних компьютеров типа Apple II или ZX80 ещё оставалось лет пять — так что книжка предназначалась студентам и сотрудникам учреждений где были установлены «миникомпьютеры» — девайсы размером с несколько домашних холодильников -, но нередко уже многопользовательские, с подключенными телепринтерами в качестве рабочих мест. Сам BASIC ещё не разменял первый десяток лет. Программы предлагалось перепечатать вручную — тем не менее это издание сразу стало популярным.

В этой статье мы взглянем поближе -, а что же за «игры» там были, интересные ли? Я попытался разложить их по категориям, т.к. в книге они идут просто по алфавиту и выискивать что-то интересное среди них затруднительно.

Если отказаться от Бейсика — то игры из этого сборника могут быть интересны, например, на уроках программирования. Алгоритмы встречающиеся в играх могут быть не менее полезны чем задания на пузырьковую сортировку — и притом, конечно, программирование игр более увлекательно (даже если играть в получающиеся игры, прямо скажем, не очень интересно).

Общее впечатление

Спойлер на вопрос поставленный выше — большинство игр прямо скажем не очень интересны. Притом нужно понимать что вывод на телепринтер (который подразумевается в большинстве случаев — в некоторых даже написано «оторвите бумагу здесь чтобы сохранить карту») лишает возможности играть в чересчур интерактивные игры. В целом кажется что даже тогдашний Бейсик на миникомпьютерах мог «потянуть» более серьёзные программы — но, вероятно, тут ограничивающим фактором была и возможность перенабрать текст — если вы попробуете это например используя QBasic в веб-странице, о котором я писал раньше — то у вас легко может уйти час на набор полстраницы (одной колонки) программного текста. В то же время наиболее «продвинутые» игры из книги — например StarTrek или Poker — занимают несколько страниц.

Что касается набора текстов — если вы приглядитесь, то обнаружите что многие программы написаны довольно неаккуратно даже по тем временам, встречаются и ошибки — не говоря уж о том что приходилось адаптировать код к конкретному диалекту бейсика.

Тем не менее эти игры вызывают интерес и в наши дни — например можно найти на гитхабе проект посвящённый переводу их на разные современные языки. Очень актуально если захочется попробовать какую-то из игр, которая недостаточно понятно описана (например King).

Программы, которые на мой взгляд поинтереснее попробовать, выделены полужирным шрифтом. В книге есть собственный «рубрикатор» в конце, но там они разнесены скорее по предметной области, что не так интересно с точки зрения программиста.

Простые игры на случайность (14)

В этот раздел попали игры «азартного» типа и похожие на них — для их создания обычно достаточно овладеть использованием Генератора Случайных Чисел (в бейсике RND) — и приводить полученные значения к нужному диапазону, складывать результаты и т.п.

ACEDU — «Acey Ducey» — выкладываем две карты и пытаемся угадать будет ли третья «между» ними (по достоинству — например 10-ка между королём и 6-кой)
BINGO — американский вариант обычного Лото
BLKJAK — две версии Блэк-Джека
BUG — нужно «рисовать» жука бросая кубик — разные части должны рисоваться по очереди
CRAPS — упрощённая популярная в некоторых странах азартная игра (с кубиками)
CUBE — нужно пройти по графу на поверхности куба и не напороться на одну из случайно расставленных мин.
HI-LO — разновидность игры в «угадай число» — 6 попыток для диапазона 1…100, неуспешные игры пополняют «джекпот»
HORSES — симулятор ипподрома
NUMBER — угадываем число от 1 до 5 с одной попытки, результат накапливается в зависимости от того насколько близко «попал»
ROCKSP — камень-ножницы-бумага (без «предсказывающего» алгоритма)
RUSROU — нужно выиграть 10 раундов в Русскую Рулетку (это злобно)
SLOTS — симулятор «однорукого бандита»
STOCK — игра в покупку и продажу акций с тупо рандомно меняющимися ценами
WAR — карточная игра которую мы знаем под названием «Пьяница»

Логические и настольные игры (18)

Здесь достаточно много игр у которых есть хотя бы какой-то «компьютерный интеллект» против которого можно играть.

AWARI — известная африканская игра с лунками и камушками (Калах, Оуа) — интересно разобрать алгоритм компьютерного «противника»
BATNUM — простая игра на выбирание какого-то количества предметов из кучки (стратегия связана с нахождением остатка от деления)
BATTLE — игра в Морской Бой, однако, только в «одни ворота» (см. далее SALVO)
CHECKR — шашки, хотя и без последовательных взятий — опять же интересно разобрать алгоритм
CHOMP — игра в «откусывание шоколадки» популяризированная М.Гарднером в 1973, без компьютерного оппонента
EVEN — «побеждает чёт» — нужно выбрать чётное число предметов из кучки, два варианта, один из них с самообучением
GOMOKO — игра в крестики-нолики на большой доске, нужно поставить пять в ряд — есть слабенький компьютерный оппонент
HEX — «шесть пешек» — игра предложенная М.Гарднером, с самообучением
LIFE-2 — игра «Жизнь» для двоих, на доске 5×5, без компьютерного оппонента
MUGWMP — ищем объекты в сетке 10×10 используя подсказки о расстоянии до них
NIM — известнейшая игра «Ним», выбирание предметов из кучек, у компьютера есть простая, но неочевидная стратегия
POKER — игра в покер — одна из наиболее «продвинутых» в книге
QUBIC — крестики-нолики в трехмерном варианте 4×4*4 (начинающий должен выиграть, но это не так легко)
QUEEN — два игрока поочередно двигают шахматного ферзя по направлению к углу доски — у Кордемского она встречается в виде «китайской игры про выбирание камней из двух кучек» (Цзян-ши-цзы)
SALVO — продвинутая игра в Морской Бой со стрельбой залпами, с компьютерным противником
SALVO1 — упрощённая версия предыдущей — одноклеточные цели и доска поменьше
TICTAC — крестики-нолики с компьютерным оппонентом
YAHTZE — покер с кубиками — весьма продвинутая (и довольно большая) программа

Игровые среды (6)

Здесь нет ни искусственного интеллекта -, но эти приложения реализуют требуемый «игровой инструмент» для той или иной игры, в которую может играть один или несколько игроков.

HI-Q — доска для игры «Солитер» с шариками (нужно перепрыгивать и снимать шарики так чтобы остался только один)
MNOPLY — доска, фишки и пр для игры в «Монополию»
1CHECK — тоже солитер, но с шашками на шашечной доске
REVRSE — нужно упорядочить список чисел с помощью операций «блинной сортировки»
ROULET — симулятор Рулетки (европейская версия)
TOWER — пасьянс «Ханойские Башни» (катастрофическая растрата бумаги для принтера т.к. позиция печатается после каждого хода)

Физическая симуляция (7)

BOAT — подводная лодка должна потопить эсминец пуская торпеды
DICE — симулирует бросание 2х кубиков много раз и печатает распределение (не игра в общем-то)
GUNNER — стреляем из полевой пушки (2 версии — с неподвижной и движущейся целью)
ORBIT — нужно сбить корабль пришельцев летающий по орбите — его не видно, но после каждой попытки сообщают насколько далеко взорвалась запущенная бомба
ROCKET — игра в «мягкую посадку» на Луну, известная и из программируемых калькуляторов (3 версии)
SPLAT — нужно раскрыть парашют в самый последний момент
TARGET — нужно попасть в цель стреляя в 3-мерном пространстве, указывая углы и время срабатывания «трубки» на снаряде (без гравитации, по-моему)

Не категоризированные (10)

Здесь попали разные игры для которых не нашлось подходящей категории — среди них есть любопытные!

ANIMAL — компьютер угадывает загаданное вами животное задавая вопросы (в случае неудачи просит подсказку чтобы расширить свою «базу знаний»)
BAGLES — угадываем слово с побуквенными подсказками (похоже на «быки и коровы»)
BULCOW — computer guesses number by bulls-cows logic
DIGITS — предиктор для последовательности из 30 чисел из набора 0,1,2 записанных игроком предварительно (можно бы использовать с «камень-ножницы-бумага»)
FIPFOP — игра с переворачиванием монет, нужно перевернуть все, но некоторые связаны между собой
HANG — виселица, угадывание слова
HELLO — примитивная попытка диалога (за 50 лет до ChatGPT)
LIFE — игра «Жизнь» (клеточный автомат Конвея)
SPACWR — на самом деле известна как «Star Trek», а Spacewar это другая игра — нужно перемещаться по секторам в космосе и гасить вражеские корабли — возможно одна из самых продвинутых игр в книге (входит в пакет bsdgames)
WORD — опять угадывание слова в духе Быков и Коров

Простые образовательные (15)

CHEMST — нужно посчитать пропорцию для разбавления кислоты водой
CHIEF — угадывает задуманное число после операций в духе «умножьте на то, добавьте это»
GUESS — компьютер выбирает число -, а игрок угадывает вопросами в духе «больше-меньше»
HURKLE — поиск существа Хёркл в квадрате — двумерный вариант угадывания числа
KINEMA — симуляция полёта вертикально брошенного тела — нужно считать высоту, время и так далее
LETTER — версия игры GUESS, но с буквами (не образующими слово)
LIT-QZ — примитивный тест по детской литературе
MATHDI — тренировка на сложение очков на двух кубиках
NICOMA — компьютер угадывает число по остаткам от деления его на 7, 11, 13
PIZZA — нужно дать указание доставщику пиццы в виде декартовых координат
STARS — угадать число по подсказкам в виде звёздочек (тем больше чем ближе догадка)
SYNONM — придумать синоним к слову предложенному компьютером
TRAIN — упражнение на вычисление пути-скорости-времени
TRAP — троичная версия «угадывания числа», предложенная 10-летним школьником
23MTCH — выбирание спичек — упрощённая версия BATNUM

Стратегические и экономические симуляторы (4)

CIVILW — битвы Гражданской войны в США, нужно попытаться достичь лучших результатов чем реальные исторические генералы
HMRABI — игра Hamurabi — один из первых экономических симуляторов (управляем страной 10 лет оперируя зерном, землёй и населением)
KING — продвинутая версия наподобие Hamurabi — теперь у нас коммунистический остров Setats Detinu и валюта Rallods:)
WAR-2 — незамысловатый военный симулятор результат битв в котором мало зависит от пользователя (нужно просто делить армию на пехоту, авиацию и флот).

Спортивные и исторические симуляторы (13)

Как можно догадаться из комментариев подобные игры мне кажутся очень скучными т.к. имеют минимум взаимодействия с игроком.

BASEBL — бейсбол со случайными характеристиками для игроков команды (бесценно для большинства из нас, кто не знает правил и смысла игры)
BASKET — баскетбол, разные типы бросков
BOMBER — симулятор бомбардировщика не обременённый игровой логикой
BOWL — симулятор боулинга — вообще без логики и какого-либо выбора для пользователя
BOXING — бокс — минимальная логика, случайный результат
BULEYE — дартс — примерно так же — разные типы бросков, стохастические результаты
BULL — симулятор корриды — всё в том же духе
CAN-AM — симулятор гонок Канада-Америка для многопользовательского бейсика — отсутствует пример запуска, по-видимому без доп.изучения трудно понять что к чему
DOGS — симулятор собачьих бегов (сравни HORSES)
FOOTBL — американский футбол, две версии (для иностранцев так же бесценно как бейсбол)
FURS — меховая торговля в Канаде 18 века, минимальное участие пользователя
GOLF — симулятор гольфа (выбор клюшек и т.п.)
HOCKEY — симулятор хоккея (выбор типа бросков)

Генерация форм, узоров и пр (10)

Это вообще не игры, а что-то вроде незамысловатых «демок»

AMAZIN — генерация лабиринта — хотя сама собой не игра, но может быть основой для других игр, начиная с простой лабиринто-бродилки
BANNER — печатает вертикально-ориентированный баннер из текста (т.е. можно его оторвать из принтера и развесить на стене
BOUNCE — отрисовывает траекторию падающего и подскакивающего мячика
BUNNY — рисует кролика — логотип плейбоя (исходник отсутствует)
BUZZWD — генерирует случайные умно-выглядящие фразы из 3 слов на компьютерную тему
DIAMND — генерирует ромбики из символов
POETRY — пишет стихи в духе Хайку (2 версии)
SNOOPY — две картинки щенка Снупи (без исходников)
3DPLOT — грубоватое отображение 3-мерного графика на бумаге
UGLY — рисует профиль «некрасивой женщины» и определяет степень «некрасивости»

Утилиты (4)

Не игры, но приложения с претензией на полезность. На Спектруме такое не станешь набирать, но в миникомпьютерах-то можно было программы сохранить в общем доступе — например для календаря в этом есть какая-то польза.

CALNDR — вечный календарь — красиво печатает требуемый месяц (в наше время вещь бесполезная т.к. функции для работы с датой есть почти в каждом языке)
CHANGE — рассчитывает сдачу по цене покупки и сумме оплаты
WEKDAY — по аналогии с календарем — высчитывает на какой день недели приходится интересующая нас дата (например дата рождения)
ZOOP — эмулирует системную командную строку возвращая дурацкие сообщения вместо адекватного результата (всего несколько команд)

© Habrahabr.ru