Снова здравствуйте, сегодня мы поговорим о таком вообще-то необычном явлении, как игры про программирование. Или игры для программистов. Короче говоря, игры, где чаще всего нельзя напрямую решать какие-то проблемы, а нужно составлять указания и инструкции для их решения. Итак, для кого они вообще?
(всё это и еще больше мы рассказываем в видео-версии, которую можно найти в конце статьи; в ней можно посмотреть геймплей игр и другие материалы по теме)
Их стоит разделить на несколько категорий: первая — это обучающие игры, которые должны помочь детям или студентам понять основы программирования, составления алгоритмов, общие команды и принципы. Например популярный графический язык Scratch, которым можно пользоваться прямо из броузера. Или российская система ПиктоМир. Даже столь известный язык как BASIC при своём создании в начале 60-х задумывался как упрощённый вариант с синтаксисом, понятным непрограммистам.
Следующая категория — игры про программирование и для владеющих его основами. Игрокам уже нужно использовать свои навыки, чтобы добиться победы, т.е. в игре может использоваться какой-то реальный язык программирования или его подобие. Разумеется, в таких играх обычно есть подробный мануал.
И наконец, алгоритмические игры, где программирование является малозаметной и органичной частью игрового процесса.
Совсем не обязательно, чтобы написание алгоритма было представлено в виде текстовых команд: например, существует серия The Incredible Machine, головоломка, где из элементов нужно строить сложные механизмы для выполнения каких-то простых задач. Лопнуть все воздушные шарики на экране, проводить мышей к сыру, запустить ракету и тому подобное — уровней море. У неё есть и более современный аналог, Crazy Machines, и даже римейк от тех же авторов. Для решения вам даётся набор блоков: планки, мячи, розетки для электрических приборов, но не все строительные блоки являются статичными: в некоторых можно выставить таймер, или сделать так, что они начинают работать после включения или срабатывают на каждый второй раз, или выполняют сортировку. Огромный простор для алгоритмического творчества.
Ну, а если смотреть на совсем популярные игры, то например в Dragon Age: Origins можно детально, пошагово регулировать поведение ваших сопартийцев в бою. С новыми уровнями у них даже открываются новые опции. Можно было выбирать кого атаковать сначала, когда применять скиллы или магию, при каких условиях переключаться на других врагов и тому подобные вещи. Чем не алгоритм?
Но перейдём к истокам зарождения вопроса: когда же всё-таки программисты стали играть со своими коллегами? А это произошло в далёком 61-м году, на заре компьютерной эры, когда группа разработчиков из американской компании Bell Labs: Виктор Высоцкий (сын русских эмигрантов), Малькольм Дуглас МакЭлрой и Роберт Моррис соорудили первую игру, если так можно её назвать. Изображений или кода не сохранилась, но концепт был позже описан и опубликован. Эта игра, Darwin, представляла из себя «битву программ», т.е. используя три доступные функции — probe, kill и claim, надо было составить такую программу, которая бы перезаписала вражеский код, не давая им размножаться. И самое интересное, что битвы происходили прямо в памяти реального мейнфрейма IBM 7090 без какой-то виртуализации — неправильный ход, и синий экран, вернее, тревожные огоньки на консоли оператора! Это было сделано для повышения быстродействия, чтобы не писать интерпретатор. Игра просуществовала недолго — всего несколько недель, пока не была придумана «ультимативная» программа-убийца, которая не оставляла шансов для соперника.
Но наследие Дарвина не было забыто, и однажды другой автор, Александр Дьюдни, тоже учёный, популяризатор науки, автор научно-фантастических романов и сборников поэзии, описал в деталях схожую концепцию с рядом доработок. Он, разумеется, основал идею на Darwin. Игра называлась Core War и подробная статья о ней появилась в журнале «В мире науки» в 1984-м году. В ней уже полем битвы служила не память реального компьютера, а виртуальная среда воображаемого компьютера MARS. Код противоборствующих программ напоминал язык ассемблера. Хотя автор не представил исходных кодов, разные энтузиасты создали свои версии, которые оказались столь популярны, что по этой игре стали проводиться конкурсы на лучшую программу, появился свод правил и стандарты ещё в конце 80-х (вот оно, зарождение киберспорта!), затем и множество более поздних реализаций, и в результате соревнования проводятся по сей день. И, наверняка, собирают больше зрителей, чем стримы Старкрафта.
Следующая игра, Robot War 1981-го года была гораздо более user-friendly и приближена к традиционным компьютерным играм. Её автором был Сайлас Уорнер, известный по своей другой игре, Castle Wolfenstein, той самой, что вдохновила id Software на римейк и долгоиграющую серию. Кроме того, Castle Wolfenstein считают первой стелс-игрой, но не о ней сейчас речь.
Прототип Robot War был создан (или подсмотрен) автором во время работы с системой PLATO еще в 70-е. PLATO была уникальным инкубатором идей, где впервые появились многие вещи, привычные нам сегодня: форумы, электронная почта, веб-приложения, ролевые игры, многопользовательские танковые шутеры и многое другое. В этой игре предлагалось самостоятельно разрабатывать AI роботизированного танка. Размер кода был ограничен 256-ю строками, что не так мало. Ну, а после тестирования можно вести своего железного друга на арену, для выяснения отношений с другими жестянками, что показывалось уже графически и все действия были видны в реальном времени. Игра выходила для компьютера Apple II и ознакомиться с ней можно через эмулятор. Вообще, сражения множества AI стали популярной темой таких игр.
Еще одной игрой про роботов, был уж к ним такой интерес, стала Robot Odyssey, уже в 84-м. И это уже явное развитие, ведь помимо собственно проектирования и программирования появилась также и сюжетная часть. В игре есть персонаж — мальчик, которой провалился в подземный город роботов. И для возвращения домой ему нужно использовать роботов, которых он находит по пути, перепрограммируя их под новые задачи.
И вот здесь начинается самое интересное: игра предлагает разрабатывать не просто софт, а по факту создавать новое железо, чипы из примитивных элементов, ковыряя логику роботов. В итоге сложность и проработанность этого процесса, а также его сходство с реальностью повергла в шок не только игроков, но и специалистов настоящего времени. Robot Odyssey теперь считается «самой сложной игрой всех времён».
В плюс создателям стоит отметить, что в ней есть встроенный подробный tutorial — большая редкость в те годы. И авторы игры не питали иллюзий по поводу сложности, и прошедшим её вручался именной сертификат.
Но игровой процесс не обязательно должен быть столь жёстко-беспощадным и примером тому может быть игра Tower of Babel, трёхмерный паззл 89-го года для Atari ST. Здесь мы управляем одним из трёх роботов, которые имеют уникальные способности, но программирование не нужно осуществлять постоянно, а лишь когда в этом всплывает необходимость, и нужно координировать их действия, когда выполнить задачу одному не под силу. Не правда ли, напоминает о The Lost Vikings?
Алгоритмические игры были и в России. Например, увлекательная игра Штурман для компьютера MSX. Этот компьютер использовался в советских и российских школах со второй половины 80-х. Сама игра появилась в 89-м или 90-м году. Она носила образовательный характер и в ней надо было прокладывать маршрут для навигационного компьютера планетарного корабля, с тем чтобы поселения колонистов получали нужные им грузы. «Язык» написания алгоритма был довольно простым — чтобы не переутомлять учащихся.
Другая отечественная игра называлась Snake Battle и была сделана компанией Gamos, известной прежде всего по Цветным Линиям и квесте о Братьях Пилотах. Но именно эта игра была рассчитана явно на иную аудиторию. Основной принцип взят из классических игр а-ля Змейка, т.е. по экрану ползает змея, ест точки и становится длиннее и так далее. Но здесь в качестве пищи должны использоваться другие змеи, управляемые, как вы догадываетесь, искусственным интеллектом. Несмотря на то, что игра получилась оригинальной и в чём-то новаторской, особого распространения, признания и денег своим создателем не принесла.
И как ни странно, столь сложный и специфический жанр добрался и до приставок. Серия Carnage Heart впервые появилась на Playstation в 95-м году и с тех пор вышло несколько продолжений, в том числе на PSP. Удивительный факт, учитывая что игра действительно непростая. В ней речь идёт тоже о поединках металлических истуканов, программируемых нами. Для написания инструкций используются графические схемы, из довольно обширного списка, почти каждую из которых можно как-то настроить. Всё усложнялось тем, что встроенного руководства здесь нет, а видео с обучением находилось на втором диске.
И напоследок TIS-100 – одна из самых последних игр на эту тему, и далеко не самая простая. В центре сюжета — таинственный компьютер, который пылился в гараже у вашего дяди. Увы, дядя скоропостижно скончался и TIS-100 достаётся вам. Сведений об этой модели найти трудно, некоторые блоки памяти закрыты для доступа, хотя дядя долго бился над тем, чтобы разгадать тайну его происхождения и назначения. Ну а сейчас этот динозавр даже не хочет загружаться — не может выполнить простейший тест диагностики.
Если описывать игру простыми словами — то это тоже паззл. Здесь процесс разбит на отдельные задачки, и их необязательно выполнять в прямой последовательности. После решения, как и во многих паззлах вам покажут ваш рейтинг, причём приведя статистику других игроков и оценив вашу сообразительность.
Но сравнить TIS-100 с какой-нибудь Cut the Rope было бы не совсем корректно. Ведь это по факту симулятор транспьютеро-подобной системы, которые были популярны в 80-е. Система программируется на упрощенном языке ассемблера. Каждый процессор, или узел, а их здесь 12, имеет ограничение на количество строк программы. Вместе с тем, количество узлов даёт большую свободу в способах решения заданий. Задачи довольно разнообразны, но обычно они имеют следующий вид: взять исходные данные, провести над ними какие-то действия (сортировку, арифметические операции или что-то другое) и вывести их в нужный порт.
С одной стороны такие манипуляции легко проделать на многих языках программирования, но это вам не BASIC, и поэтому придётся искать решения с точки зрения таинственной архитектуры и списка доступных команд.
И на этом мы закончим экскурс в мир игр. Если вам понравилось, то посмотрите и наши видео на эту тему — там есть игры и факты, не затронутые в этой статье.
Спасибо за внимание!
//Virgil, Dimouse, true-grue.
P.S. Видео с передачей разбито на две части:
Комментарии (63)
zuborg
29.05.2016 21:40Добавлю в копилку:
http://vindinium.org/ — пошаговая битва четырех ботов в стиле roguelike, бот контролируется через HTTP-API — можно использовать любой язык.
https://github.com/thirdside/berlin-ai/wiki/Berlin — ещё одна пошаговая стратегия
http://www.robozzle.com/ — логическая игра-головоломка, нужно составить программу чтобы бот собрал все звездочки и не вышел за пределы игрового поля, есть очень нетривиальные задачи )
doobrik
29.05.2016 22:20+2Подскажите как в Тис-100 сделать Signal Comparator за минимальное число команд.
У меня есть вариант на 223/6/29 (самый быстрый) и есть на 292/6/18 (самый компактный).
Реально сделать за 364/6/15. Никак не могу понять как сделать за 15 команд.
SIGNAL MULTIPLEXER Делают за 298/6/14 и за 148/9/54 а ещё в 5-и нодах делают.
У меня 203/7/21 и 187/11/72. Как сделать за 14 команд, или за 148 циклов? Что-то нереальное.
Sadler
29.05.2016 22:22Ну, а если смотреть на совсем популярные игры, то например в Dragon Age: Origins можно детально, пошагово регулировать поведение ваших сопартийцев в бою. С новыми уровнями у них даже открываются новые опции.
Не сыпьте соль на рану. Первая часть была такой классной и продуманной… За что ж они так с серией-то?GreyhoundWeltall
30.05.2016 11:06Иногда создается ощущение, что мне одному понравились обе части (и даже немножечко — третья).
Везде читаю, что, мол, убили серию, оказуалили и тд. Зато во 2 части был классный сюжет и можно было реально поиграть в мир…Sadler
30.05.2016 14:05Поиграть в мир, где 10 раз ходишь в одну и ту же пещеру с переставленными в некоторых местах стенками и закликиваешь мобов. Интересный мир и механика были в первой части, вторая — её бледная тень, уступающая первой как по технологичности, так и в плане сюжета. Складывается впечатление, что на вторую часть потратили на порядок меньше средств и(или) времени.
Sadler
29.05.2016 22:28+1Ещё о Human Resource Machine не упомянули. Основы асма в игровой форме, как бы дико это ни звучало. Весьма красиво, правда лично мне интереснее было наблюдать на ютубе, как непрограммеры её проходят, чем за 5 минут прокликать самому.
Labunsky
30.05.2016 02:39Скорее, симулятор программирования в очень ограниченных условиях. На все звезды порой бывает трудновато написать, то не хватает условных операторов, то еще чего
taumag
02.06.2016 17:54Фиг ты её за 5 минут прокликаешь. Особенно если стараться уложиться в минимальное число команд.
krestic
02.06.2016 22:23Когда я полез на хабр/гиктаймс за советами по прохождению, очень удивился, что никто не написал по этому поводу статейку. По-моему гениальная игрушка, в которую даже ваша жена сможет поигнрать(ну, первые несколько уровней):)
fireSparrow
29.05.2016 23:08+4Удивлён, что в статье не упомянута Space Chem.
В неё, конечно, нет программирования в явном виде. Но по сути — есть. И циклы с выходом по счётчику или по условию, и условные переходы, и взаимодействие между параллельно выполняющимися процессами.AllexIn
30.05.2016 00:05Вы имеете ввиду, что там нет программирования текстом.
Там программирование графическое, но от этого не менее программистское.
asaq
30.05.2016 02:49У Zachtronics десяток игр. Например KOHCTPYKTOP: ENGINEER OF THE PEOPLE (Flash).
themtrx
29.05.2016 23:13Как же забыли http://fightcodegame.com? По-моему, даже статья здесь была об этом проекте от его автора.
ivan386
30.05.2016 01:22В slither.io змейкой можно управлять меняя переменные. Да и другие змеи и еда там в виде массивов. Так что можно змейку научить убегать от других змеи и собирать еду. Подрезать змей ещё не пробовал научить. Всё делается в косоли.
Cutegirl
30.05.2016 02:49+2Игры для программистов, говорите? Т.е. программист 8 часов в день говнокодит, потом приходит домой, и ради отдыха говнокодит в игрульке — так, что ли? :)
Про Дрэгон Эйдж мало расписали, хотя система автоматизации ИИ там прямо-таки отличная. Можно играть и без неё, часто нажимая паузу, но если есть тяга к подобным штукам — можно абсолютно полностью автоматизировать свою партию. Ну то есть совсем полностью, бой начался — уходишь чай пить, без тебя справятся.oleg0xff
30.05.2016 12:27+1«Т.е. программист 8 часов в день говнокодит, потом приходит домой, и ради отдыха говнокодит в игрульке — так, что ли? :)» Ну а чем еще заняться дома?
Wesha
30.05.2016 16:28Я просто оставлю это здесь: https://s-media-cache-ak0.pinimg.com/736x/d5/35/b7/d535b7e2dc5d8d9661f05fe4837e883e.jpg
antkatcin
30.05.2016 02:49+1Также накину от себя — SpaceChem, создание алгоритма сборки молекул. Увлекательно, есть демка в стиме. store.steampowered.com/app/92800
Darthman
30.05.2016 13:07Её создали ребята, сделавшие TIS-100. У них это не единственная такая игра, кстати.
Yura881
30.05.2016 02:49А Space Engineers? С встроенным редактором скриптов на основе C#.
Alex_ME
30.05.2016 07:32Ну тогда еще игр-песочниц, где программирование не является основой геймплея, а просто доп. бонус:
- Garry's Mod, мод WireMod (Expression 2) и дополнительно Expression Advanced 2 (куда более прокаченная, но менее популярная версия). Программирование неких "чипов" на Lua-подобном языке, которые могут иметь IO для связи с другими деталями Wire Mod'а (двигатели, датчики итп) или же непосредственное воздействие на любые объекты в игре (приложение силы, момента, поиск чего угодно)
- Minecraft с модом Computer Craft, вроде еще есть аналоги. Очень серьезные вещи можно писать — была здесь статья, как какие-то товарищи написали графическую оболочку.
bill876
30.05.2016 02:49+1Еще можно посмотреть на Spacechem, концепт довольно понятный, мне игра очень понравилась.
Nervovred
30.05.2016 02:50+1SpaceChem — затянула на целые выходные. Поначалу всё просто, ближе к концу реально сложные цепочки получаются.
ZaMaZaN4iK
30.05.2016 02:50+2Хотелось бы упомянуть крайне интересную игру Untrusted: alexnisnevich.github.io/untrusted
Залип на пару вечеров.
urandon
30.05.2016 02:50+2Вставлю ещё пять копеек:
alexnisnevich.github.io/untrusted — приключенческая игра, где нужно изменять код уровня, написанного на JavaScript-like языке.
Wesha
30.05.2016 04:36+1Я просто оставлю это здесь: https://ru.wikipedia.org/wiki/Colobot
ColdPhoenix
05.06.2016 19:32добавлю кстати и сам Ceebot, он конечно чуть в сторону ушел, но все равно интересен.
(+ там ты помоему можешь только флаги ставить, прямого контроля в принципе нет)
единственно не помню какая версия самая полная.
LoadRunner
30.05.2016 09:55Из того, что не упоминали (извините, не умею в ссылки):
Great Permutator — http://store.steampowered.com/app/319270/
Mu complex — http://store.steampowered.com/app/383690/ (а пару лет назад это была бесплатная флэш-игра).
Mercury13
30.05.2016 11:58А где здесь Pascal Robots? В своё время интересовался игрой, робот «Doomer» перебил всех, которые служили примерами, а робот «Trike» (полное имя Light Attack Trike) — и Думера тоже. Жаль, не с кем соревноваться было. А когда появился интернет, узнал о дисбалансе экипировки: щит, лёгкая броня и большой бак рулят!
http://corewar.co.uk/probots/
Pauloondra
30.05.2016 16:04+1Еще на Спектруме была крутая игра, где надо было программировать боевого робота, а заодно покупать ему память, оружие, ЦПУ и так далее. Задаешь программу и запускаешь бой — там уже никакого контроля над роботом нет. Называлась игрушка Soldier of the future.
КартинкамаПроцесс боя (на 4 робота):
Процесс програмирования:
Chillz
31.05.2016 18:24codecombat.com — RPG, в которой для управления героем используются языки программирования.
xshaksx
31.05.2016 18:24Когда-то вдохновившись Untrusted даже попробовал написать что-то подобное. programmeradventure.github.io, так до конца и не сделал, но играбельно.
Primus_IP
31.05.2016 18:24Опять же элементы программирования есть в Hack'n'Slash
store.steampowered.com/app/246070
cdmlex
31.05.2016 18:24На igdc как раз недавно закончился конкурс на тему таких игр:
igdc.ru/igdc_top.php?konkurs=134
Coercer
02.06.2016 17:53microcorruption.com
Интересный симулятор, в основном про взлом программ защиты
argz
Очень советую еще обратить внимание на Factorio.
tmin10
Поддержу, в неё особенно классно играть с друзьями с голосовым чатом и не в обычную версию (которая изучается полностью всего часов за 20), а с модами, например сейчас играем в bob's mod, где куча новых ресурсов, руд и технологий.
argz
Спасибо за наводку на моды :-)
tiumencev
Я бы посоветовал DyTech, он интереснее Bob's модов. В Dytech мы играли гораздо дольше, а с Bobs интерес пропал очень быстро.
proudmore
Вы только что убили невероятное количество моего времени, огромное спасибо вам за это! :)
RiseOfDeath
Я бы ее не отнес к играм для программистов. Все-таки алгоритмизации там минимум, а встроеные в игру логические элементы пока настолько бесполезны, что фактически их там нет.
am_devcorp
Можно сказать, что это не игра про алгоритмизацию/программирование, а именно игра, "которая понравится людям с техническим складом ума, например программистам". Там же больше оптимизации, чем алгоритмизации (построить фабрику так, что бы ее было легко расширять, оптимизировать затраты на топливо для электростанций, заменив их полем солнечных батарей, построить фабрику петролеума так, что бы оставалось меньше побочных продуктов, а то, что всё же останется, можно было тут же и переработать во что-нибудь полезное и так далее)
DeLuxis
Уже и тетрис там сделали ))
krestic
Это нечто потрясающее