Аты-Боты
Архив Число игр, известных человечеству, с наступлением компьютерной эпохи необыкновенно возросло, и с этим трудно не согласиться - ряды игроков ширятся день ото дня. "Геймеры" объединяются в клубы, делятся секретами ремесла с новообращенными, "режутся" в многопользовательские версии своих любимых игр по Интернету... В то же время, наряду с завоевавшими сердца миллионов бестселлерами, на свете есть немало "тихих" компьютерных игр, круг приверженцев которых не так уж широк. К их числу, безусловно, можно отнести и интеллектуальное развлечение, ставшее героем этой статьи. Пользуясь отсутствием единого имени для игр этого жанра (в одних источниках они известны как "бои роботов", в других - "programming games", в третьих - "игры с подгружаемым интеллектом"), для краткости мы назовем их просто робо-играми.
В отличие от других игр, где меряются силами или интеллектом представители вида Homo Sapiens, здесь это выпадает на долю созданных и запрограммированных ими бойцов - роботов, или просто ботов (bots). Разумеется, в наши дни, когда электронные игроки все ощутимее теснят белковых и в самых обычных играх (вспомним хотя бы "шахматного гения" Deep Blue), удивляться этому нелепо, но в робо-играх человеческий разум на поле битвы не допускается принципиально. Человеку здесь отводится роль тренера, а собственно игра для него заканчивается к тому моменту, когда его детище вступит в схватку с порождением разума противника.
Подготовка собственного бота к испытаниям - захватывающее и поистине многопрофильное занятие. Наряду с программистскими навыками, "бото-тренеру" не повредит владение азами дрессировки, окажется весьма кстати и педагогический опыт. Давайте рассмотрим, как это делается в различных робо-играх. С одной стороны, это позволит желающим быстрее освоить их правила. А с другой, как знать, может быть, в не столь отдаленном будущем чемпионаты мира среди ботов постепенно вытеснят соревнования людей, и на нашу долю останется лишь тренерская работа, начинать подготовку к которой необходимо уже сейчас.
Проще всего постичь ее секреты, пожалуй, можно при помощи незатейливой, но увлекательной отечественной игры Snake Battle фирмы Gamos. К робо-играм ее можно отнести лишь условно: здесь, для того чтобы создать и обучить "бойца", совершенно необязательно владеть каким-то языком программирования. DOS-версия "змеиных боев" появилась на заре 90-х годов, но и сейчас она остается ведущей отечественной игрой в этом жанре.
В каждой битве (рис. 1) участвует одновременно до четырех змей, главной достопримечательностью которых являются их хвосты, длина которых измеряется в условных единицах (возможно, в попугаях) и перед началом каждого раунда одинакова у всех участниц. В ходе битвы каждая змейка в меру воспитания и возможности стремится найти и откусить кончик хвоста соперницы, уменьшив на единичку ее длину и настолько же увеличив собственную. Бой состоит из нескольких раундов, по окончании каждого объявляется победитель - самая длинная (нередко она же - единственная) среди выживших змей, и начисляются призовые очки участницам в соответствии с размерами их хвостов. Хорошо запрограммированная "очковая" змея должна овладеть целым арсеналом знаний: например, о том, как уберечь свой хвост от посягательств, обогнуть то или иное препятствие и оставить с носом (точнее, без хвоста) соперниц.
Роль игрока сводится к рисованию "плана местности" условными знаками в виде специальных шаблонов размером 7х7 клеток (пример такого шаблона приведен на рис. 2). На каждом шаблоне отображается голова змеи и все, что может ее окружать (тела других змей, препятствия, собственный хвост и т. д.). В боевых условиях поведение змеи определяется так: перед началом каждого хода она "окидывает взглядом" участок игрового поля вокруг своей головы и по очереди проверяет на совпадение с ним заготовленных шаблонов. Если результат осмотра полностью совпадает с каким-то шаблоном, то змея на следующем ходу сдвинется в указанном в нем направлении, если же этого не произошло - поползет куда глаза глядят, в случайно выбранную сторону. При помощи операций "И", "ИЛИ", "НЕ" можно строить составные условия, и такая "змеиная логика" позволяет решать довольно сложные проблемы из жизни боевых рептилий.
Каждый шаблон предусмотрительная киберзмея вертит так и эдак, анализируя каждое из возможных направлений. В отличие от героини анекдота, выбравшей в качестве пути генеральную линию партии, вашей питомице не грозит сломать себе шею: назад и через себя змеи в этой игре ползти не могут. А это значит, что к числу ваших задач добавляется еще одна: не дать своей воспитаннице запутаться в собственных хитросплетениях, дабы не стала она легкой добычей для соперниц. Для удобства наблюдения за прыткими змейками в программе предусмотрен отладчик, позволяющий отследить их телодвижения в пошаговом режиме.
Умелому "заклинателю" змей его детище может принести славу и богатство, но для этого необходимо выиграть какой-нибудь "змеиный" турнир. "Зов трубы", возможно, приведет вас на сервер интеллектуальных игр "Сагиттариус" (home.ptt.ru/iq). По информации "из первых рук", здесь вот-вот стартует чемпионат этого года. Так что советуем всем заинтересованным лицам не мешкать, а прямо сейчас найти на сайте распорядителя турнира (www.chat.ru/~almanzor/snake) программу игры с документацией, примерами из "жизни замечательных змей", и начинать усердно готовиться.
От боев "сестер наших меньших" перейдем к настоящим сражениям, а именно к игре Robot Battle. В ней уже используется собственный, правда, довольно незамысловатый, язык программирования, напоминающий Visual Basic. В нем заложены специфические команды и переменные, а также стандартные математические и логические операторы. Ботами здесь являются боевые танки, а мерой успеха - накопленная ими энергия. Немудрено поэтому, что во время битвы (рис. 3) эти агрегаты разъезжают по полю, постреливая друг в друга энергетическими ракетами, объезжая энергетические мины и собирая энергетическое же печенье (energy cookies).
Тем, кто когда-нибудь разрабатывал программы под Windows, освоить эту игру будет совсем нетрудно. Используется знакомый принцип: вы пишете процедуры-обработчики различных игровых событий. Например, событие "попадание ракеты в танк" вызовет к жизни команды обработчика MissileHit, если, конечно, он предусмотрен в программе. Заметим, однако, что потерять энергию при вражеском попадании ваш танк сможет и без всякого обработчика событий, а вот запеленговать и наказать обидчика - вряд ли. Можно написать обработчик для новых, нестандартных событий, сделав, таким образом, поведение бота настолько гибким, насколько это понадобится. Скачать Robot Battle, полюбоваться на чужие танки, а заодно и похвастаться собственным детищем можно на официальном сервере игры www.robotbattle.com.
С танкового стрельбища отправимся в мрачные катакомбы, где в изобилии водятся известные, прямо-таки всемирно популярные отпрыски славного робо-племени - Quake-боты. Казалось бы, лишь романтической человеческой природе свойственна страсть к блужданиям впотьмах с оружием в руках - ан нет! Искусственный интеллект и тот не устоял перед суровым очарованием "стрелялок". Речь идет о ботах, имитирующих реального игрока в Quake (а также и в прочих подобных игрушках во множестве их модификаций). Если у вас нет доступа к Интернету, а руки чешутся устроить deathmatch - эти монстры всегда к вашим услугам. Технология настолько отлажена, что хороший бот без труда отделает большинство настоящих квейкеров за счет скорости и меткости, о которой людям остается только мечтать. Заметим при этом, что тупость и предсказуемость поведения, свойственные большинству ранних ботов, в последних моделях успешно преодолены. Для программирования злейших друзей квейкера обычно используется язык C и его специальные модификации (например, QuakeC или UnrealScript). Желающих пройти подробный англоязычный инструктаж по изготовлению ботов мы отсылаем к серверу www.inside3d.com, а тех, кто просто хочет помериться с монстрами силами, - на www. botepidemic.com.
До сих пор мы рассматривали игры, в которых приходится программировать одного конкретного робота. В то же время интересно бывает представить, как повела бы себя целая их колония, каждый из членов которой не просто прозябает в определенном месте доски (как, например, клетки в широко известной "Жизни"), но и ведет полноценную жизнь по "законам племени": двигается, размножается, отличает "своих" от "чужих". Если вас заинтересовала подобная модель, попробуйте поиграть в RoboCom.
Овладев примитивным языком игры (всего дюжина команд!), любой желающий может основать собственное "племя", став его летописцем и творцом. Игра проходит на клетчатой доске 16х16, противоположные стороны которой склеены. Любая "война миров" (например, такая, как на рис. 4) неизменно начинается с того, что в случайные места на доске высаживается по одному "первопоселенцу" от каждого племени, потомкам которых суждено вести борьбу за выживание. Уровень абстракции при этом неограничен: можно возомнить себя господом богом, а можно - биологом, с любопытством разглядывающим штаммы различных видов бактерий. И в том, и в другом случае не мешает сначала заглянуть на www.cyty.com/robocom. Если проблемы "искусственной жизни" заинтересовали вас всерьез и надолго, к вашим услугам Zooland (alife.santafe.edu/~joke/zooland) - целая энциклопедия по этой интереснейшей теме со множеством ссылок и примеров.
Говоря о робо-играх, нельзя не упомянуть о CoreWars ("Боях в памяти") - игре, у которой есть свои евангелисты, своя история, международная федерация любителей и официально утвержденный ею свод правил. Сюжет игры приближен к жестоким реалиям жизни: программы, написанные на подобном ассемблеру языке Redcode, борются друг с другом в области памяти (core) некоторого абстрактного компьютера. Учитывая специфику игры, ее можно рекомендовать как хобби всем вирусописателям для направления их неуемной энергии в общественно безопасное русло.
Важнейшее понятие CoreWars - инструкция (нечто вроде элементарного байта памяти), которая обычно содержит два параметра, например, MOV 1,2; JMP; DAT 0,0 (именно так выглядит пустая ячейка памяти, не занятая никакой программой). Инструкции, записанные в память, последовательно выполняются до тех пор, пока процессору не попадется инструкция-пустышка. Если это происходит, выполнение программы завершается, откуда следует единственный способ уничтожить программу противника - забросать ее DAT-бомбами.
Простейший "вирус" (даже не использующий DAT-стратегию) называется Imp. Он состоит всего из одной строки и выглядит так:
MOV 0,1
Как это работает? Команда MOV в нашем примере копирует инструкцию по адресу 0 в адрес 1. В CoreWars используется только относительная адресация, при этом адрес 0 всегда соответствует инструкции, исполняемой в данный момент. Так что MOV 0,1 переносит "вирус" в следующую ячейку памяти. Затем процессор переходит к выполнению инструкции, записанной в этой самой следующей ячейке, то есть опять MOV 0,1. В результате копия этой инструкции опять попадает на следующий байт, выполняется процессором, и цикл повторяется. Так как массив памяти в абстрактном компьютере замыкается кольцом, Imp будет перемещаться по нему бесконечно. Он может затереть таким образом программу-противника, которая, хотя и выживет, зато станет выполнять тот же самый код и превратится в копию нашего бойца. Исход битвы вирусов-"близнецов" очевиден - ничья.
Здесь, пожалуй, мы прервем рассказ о RedCode, полное описание которого, несмотря на простоту освоения, занимает несколько десятков килобайт текста. Всех заинтересовавшихся "Боями в памяти" ждет сервер игры www.koth.org. В соответствии с названием сайта "King of the Hill" ("Царь горы"), в его стенах ведутся смертельные бои между "вирусами", входящими в "Top 20", и регулярным пополнением из прибывающих к месту сражений по e-mail "новичков". Там же размещается архив классических core warriors, у которых вашей программе всегда найдется чему поучиться.
Разумеется, в этом обзоре нам удалось лишь бегло коснуться нескольких самых популярных робо-игр. Тем, кому не терпится приступить к практике, мы желаем успехов на этой ниве и надеемся, что ваши питомцы доставят вам немало приятных минут. Возможно, случится так, что со временем вам станут тесны рамки какой-то из существующих игр и вы изобретете собственный шедевр, который завоюет широкое признание. Или (дальняя перспектива, но чем черт не шутит!) когда-нибудь этим займется новый "венец эволюции" - смышленый бот, ведущий свою родословную от первобытного предка, некогда созданного вами...