Давным-давно, чуть больше 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 — эмулирует системную командную строку возвращая дурацкие сообщения вместо адекватного результата (всего несколько команд)
Заключение
А приходилось ли вам писать какие‑нибудь занятные игры похожего типа в период обучения программированию? Поделитесь воспоминаниями! Сам я точно писал, например, упомянутую бродилку по лабиринту для которой понадобился генератор лабиринта — и кое‑что забавное из книжки Жака Арсака, о которой мы тоже вспоминали.
Комментарии (24)
Akina
10.12.2024 05:32Помню, в порядке освоения Электроника Б3-21 написал на ней "Быки и коровы" (правда, тогда я не знал, что она именно так называется). С переменным (от 4 до 8, вводилось в начале игры) количеством цифр в числе, которое нужно будет угадать.
На той же Электронике писал программу расчёта фосфатных буферов - еле влезла в память, помнится. А также линейную регрессию по МНК.
RodionGork Автор
10.12.2024 05:32Это круто - не думал что их туда можно "втиснуть" :) В этой модели (Б3-21) мне вообще всегда казалось сложно что-то уместить - там и память для команд покороче ведь, и главное самих команд меньше, поэтому некоторые популярные операции (доступные в одну команду на более поздних моделях) занимают несколько шагов... А размер! Калькулятор для ладони баскетболиста :)
Akina
10.12.2024 05:32Угу... Жуть как пришлось извращаться. Когда потом перешёл на Б3-34, то сразу, что называется, почувствовал разницу.
dFdx
10.12.2024 05:32Тоже писал подобное, но уже на TurboPascal 7.0, после 1992г, в процессе освоения этого языка.
Хотя и BASIC-интерпретатор осваивал. Были и игрушки, что грузились с аудиокассет, минут по 20-30.
Тогда-же (ещё школьником) написал и библиотеки (на ассемблере i80286 RTM) для работы как с EGA/VGA/SVGA-видеокартами стандарта VESA-SVGA, так и для работы с накопителями
(через порты и через int13h BIOS) IDE.
dFdx
10.12.2024 05:32И с аудиокартами ADLIB-совместимыми (тот-же SoundBlastet, FM),
и с digital audio (DSP).
Olegsoft
10.12.2024 05:32Во время исследования логики спектрума было написано несколько программ, как на бейсике, так и со вставками машинного кода ! И побитовой графики. На бейсике для лёгкого поиска решил вести вручную весь телеф справочник города ! Остановился где то на букве Б ... ))). Потом руссифицировал музыкальную программу Wham, а так же при изучении ассемблерных кодов переноса памяти, сделал анимацию " схема работы поршня в двигателе " и даже паузу научился ставить в код, ибо работало слишком быстро. Ну было время, заморочился с кодами. Сейчас бы ещё пострадал, но бесплатно уже не тянет ))) Ах да ещё вспомнил. Писал программку маленькую, для тренировки устного счета. Две двузначные или трех значеые цифры вываливались рандомно в пример + - * или /. И нужно было быстро ввести ответ. И надо таки добавить что эта тренировка не проходит для мозга бесследно. Навыки устного счета реально тренирует и начинаешь правильный ответ выдавать все быстрее и быстрее. Brain тренажёр короче изобретал.
koreec
10.12.2024 05:3290й год, БК-010, тренажер языка типа Змейки. Нужно было кормить змею (слово) пропущенными буквами. Если буква была неправильной, появлялось сообщение "Питон отравился и умер". На третьеклашек производило неизгладимое впечатление.
RodionGork Автор
10.12.2024 05:32Спасибо! Замечательная идея, надо будет попробовать её перевоплотить, оживить!
Demanih
10.12.2024 05:32Когда был в последних классах школы написал для своего Спектрума на бейсике игру змейка. Там змея не просто ползала и росла, а росла когда ела яблоки и был счёт яблок и даже загрузочная заставка (картинку из тетрадки попиксельно переносил). Потом очень гордился когда маман в неё играла )))
RodionGork Автор
10.12.2024 05:32гордился когда маман в неё играла
о да, по ощущениям подобное "признание" наших первых шагов в этом деле - это очень важно для мотивации!
adeshere
Надо же, 1973 год!
Как же я был наивен в 1983, когда впервые столкнулся с настоящим компьютером в ВУЗе - ведь об этой предыстории нам тогда не рассказывали.. Хотя некоторые из этих игр я позже встречал на PC, уже в 1990-е. Но не подозревая, из каких времен они родом!
А свою собственную игру (чем-то похожую на описанные) я попытался написать в 1986 году на фортране. Она называлась "ТЕЛЕПАТ", а главная идея была в том, что программа будет угадывать мысли пользователя.
Выглядело это так: юзер вводил нули и единицы, а программа анализировала полученную последовательность и искала там повторяющиеся шаблоны из 2-3-4-5 цифр, после чего предсказывала следующее число. (Предполагалось, что юзер должен сначала написать число на бумажке или назвать его напарнику, который откроет предсказание программы и проверит: угадала она, или нет). Потом юзер вводит это число, а программа
угадывает следующее
Строго говоря, это была не совсем игра. Я после учебы попал в экспедицию, которая мониторила геофизические поля на Памире и искала предвестники землетрясений. Там меня посадили анализировать временные ряды и давать прогноз изменений. Так что началось все с того, что я сел изучать алгоритмы прогноза, а для тестирования написанных функций сделал вот такой простенький "интерфейс"
Но главная фишка игры была не в этом. Как только вводимая последовательность становилась настолько случайной, что предсказание теряло смысл, моя программа громко пищала и печатала на весь экран сообщение:
Все! Ваши мысли прочитаны!!
ВЫ ЗАДУМАЛИ ОБМАНУТЬ ПРОГРАММУ!!!
К сожалению, играть в такую игру интересно лишь один раз ;-))
RodionGork Автор
Спасибо за описание игры :) сама угадайка напоминает "DIGITS" из этой книжки, но идея с определением ситуации "полной рандомности" это новый штрих!
unreal_undead2
У HMRABI корни уходят и вовсе в 1968ой.
RodionGork Автор
Да, там интересно вышло - игру сочинили когда один компьютер был на целое учреждение и "играть" мог всего один человек - тем не менее это было что-то вроде исследования в образовательные программы :)
lgorSL
О, я похожим образом сделал камень-ножницы-бумага. Программа запоминала после каких ходов какие идут и пыталась выиграть.
Но меня подвело то, что алгоритм был полностью детерминированным и можно было найти довольно простой способ постоянно выигрывать, правильно чередуя ходы