Давным-давно, чуть больше 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 - эмулирует системную командную строку возвращая дурацкие сообщения вместо адекватного результата (всего несколько команд)
Автор: RodionGork