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

от автора

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

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

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

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

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

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

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

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

Книга в PDF легко гуглится в нескольких вариантах по названию, например:
http://www.bitsavers.org/pdf/dec/_Books/101_BASIC_Computer_Games_Mar75.pdf

Простые игры на случайность (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 — эмулирует системную командную строку возвращая дурацкие сообщения вместо адекватного результата (всего несколько команд)

Заключение

А приходилось ли вам писать какие‑нибудь занятные игры похожего типа в период обучения программированию? Поделитесь воспоминаниями! Сам я точно писал, например, упомянутую бродилку по лабиринту для которой понадобился генератор лабиринта — и кое‑что забавное из книжки Жака Арсака, о которой мы тоже вспоминали.


ссылка на оригинал статьи https://habr.com/ru/articles/865198/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *