"Snake" - история создания
и особенности игры
(С) 1999, Пелепейченко Александр
__________________________________________
Предисловие.
Игра Snake задумывалась как игра для
двух или более человек, поэтому "самому с
собой" играть в нее будет не очень инте-
ресно. Да и вообще она вышла довольно-таки
сложной для всеобщего понимания. Практика
показала что 95% загрузивших игру юзают
ее, не используя основной возможности (ин-
теллект), а только сидят и смотрят на вза-
имное поедание. :) Между тем 5%, хоть и
понимают как именно следует обучать змею,
практически не юзают сию прогу. Цель этого
хелпа - ознакомление с общими принципами
работы со змеями. Также здесь вы найдете
некоторые советы.
1. Основные понятия.
Итак, игра состоит из двух фаз. Первая
фаза - это создание боевой змеи, оно будет
рассмотрено ниже. Вторая фаза - это само
сражение, в котором пользователь играет
только роль зрителя и, в какой-то мере,
судьи.
Битва происходит на клетчатом поле.
Каждая "живая" змея состоит из головы, ту-
ловища и хвоста. Весь змеиный "интеллект",
включая датчики для сканирования окружаю-
щей обстановки, находится, разумеется, в
голове, а хвост является наиболее уязвимым
местом. Наличие головы и хвоста обяза-
тельно для каждой змеи, то есть мини-
мальная живая змея имеет длину две клетки.
В ходе боя возможны всего лишь два ва-
рианта движения змеи. Если голова змеи пе-
ремещается на пустую клетку, то все тело
змеи перемещается вслед за головой, так
что первая клетка туловища оказывается
там, где раньше была голова, а хвост ока-
зывается там, где была последняя клетка
туловища.
Если же змея производит атаку на про-
тивника, то ее голова окажется на той
клетке, где был хвост другой змеи, а все
тело останется на месте. Таким образом,
длина укусившей змеи увеличивается на еди-
ницу, а длина укушенной на единицу
уменьшается.
Змея не может перемещаться на клетку,
занятую своим или чужим туловищем, а также
за пределы игрового поля. Змея всегда пе-
ремещается, если у нее есть такая возмож-
ность и остается на месте только тогда,
если все пути ее перемещения блокированы.
Таким образом, суммарная длина участни-
ков боя остается постоянной, а длина Вашей
змеи является показателем того, насколько
успешно воюет именно она. Задача-максимум
для пользователя состоит в том, чтобы его
змея полностью "съела" всех противников,
задача-минимум - добиться того, чтобы его
змея имела максимальную длину.
В самой битве одновременно участвует от
двух до четырех змей. Сразу замечу, что
бой с участием четырех змей гораздо инте-
реснее и менее предсказуем, чем с участием
пары. Бой заканчивается в одном из случа-
ев:
- когда одна змея уничтожила всех против-
ников;
- когда ни одна из змей не имеет хода;
- по прерыванию пользователя: СТОП.
(в любом случае надо нажать СТОП)
Можно продолжить сражение, обновить по-
ложения змей, выйдя и зайдя в БОЙ снова.
Так как фактор случайности играет су-
щественную роль, результат однораундового
боя, вообще говоря, не является особо по-
казательным, так что стоит проводить не
менее десяти раундов, для того чтобы дос-
таточно объективно оценить силу противни-
ков. Исследование показало, что надежность
порядка 90% в определении победителя дает
матч, состоящий из 15 раундов.
2. Создание боевой змеи.
Создание боевой змеи включает в себя
несколько операций:
- выбор имени змеи.
- выбор пароля змеи.
- пользователь заполняет паспорт змеи,
указав в нем ту информацию, которую
считает нужной (например, информацию
о себе).
3. Обучение змеи.
Как же программируется поведение змеи?
Итак, слушайте...
3.1 Чему змею учить будем?
1. Змея должна "видеть" поле. Она долж-
на уметь находить хвост противника, начи-
нать его преследование, сближаться и ата-
ковать. Итак, змея должна "сканировать"
окружающее пространство. Чем больше радиус
"сканирования" Вашей змеи, тем интеллекту-
альнее ее поведение.
2. Змея должна избегать тупиковых ситу-
аций вблизи кромки поля. Пример такой си-
туации, когда она не может никуда дви-
нуться, приведен на рис. 1. Хвост такой
змеи беззащитен для атак соперников. От
кромки вообще, по-видимому, стоит дер-
жаться подальше, кроме тех случаев, когда
там водится добыча.
Рис. 1. "Тупик" у стенки.
3. "Умная" змея может избегать ситуа-
ции, когда она запутывается в собственных
(и не только собственных) кольцах (рис.2)
Рис.2 "Тупик" в собственных кольцах.
4. В ситуации "собачьих бегов", когда
две змеи безуспешно преследуют друг друга
по замкнутому маршруту, "умная" змея
должна уметь "срезать" углы и сокращать
расстояние (рис. 3)
Рис.3 Техника "срезания" углов
5. Змея должна уметь "разрывать" устой-
чивые связи. В ситуации, когда две змеи,
повинуясь своему "инстинкту" (правильнее
сказать - Вашей программе) пожирают друг
друга с хвоста, "умная" змея разорвет та-
кую связь. Одним словом, программа на
"разрыв связи" должна иметь более высокий
приоритет, чем "основной инстинкт" (рис.
4)
Рис. 4 Патовая ситуация
"взаимного поедания".
6. Ваша змея может "уметь" еще очень и
очень многое. Так, например, удавалось по-
лучать очень неплохие результаты даже и
для очень "глупых" змей, которых обучили
только одному - правильно оценивать и об-
рабатывать дебютную ситуацию.
7. Бои с участием 2-х, 3-х или 4-х бой-
цов проходят по-разному. Известны примеры
отличных индивидуальных бойцов, которые не
способны хорошо работать в групповой
схватке и наоборот. Так что "сила" бойца -
понятие относительное. Все зависит от то-
го, с кем и в каких условиях ему придется
сразиться. Поэтому воспитание "универ-
сального" бойца - это дело, связанное с
чувством баланса и многими компромиссами.
8. Интересно, что во многих случаях си-
ла бойцов - понятие нетранзитивное. Так,
если змея "Альфа" устойчиво побеждает "Бе-
ту", а "Бета", в свою очередь, не дает
спуску "Гамме", то это еще совсем не озна-
чает, что "Альфа" будет сильнее "Гаммы".
Вполне может оказаться, что у последней
есть такие индивидуальные черты характера,
которые "Альфе" окажутся не по зубам. По-
работав несколько дней со своими бойцами,
Вы сами это почувствуете и, опять же, вос-
питание универсального бойца станет делом
скрупулезного исследования и взвешенного
баланса различных качеств и свойств.
3.2 Как учат змею.
Программирование змеи выполняется очень
элегантно, наглядно и доступно. В "голове"
у Вашего питомца установлены 9 программи-
руемых матриц. Матрица N1 имеет более вы-
сокий приоритет, чем матрица N2 и т.д. То
есть, если змея исполняет программу, запи-
санную в первой матрице, то до остальных
она не дойдет. Если же реальная обстановка
не соответствует программе, записанной в
матрице N1, то может быть использована
матрица N2 и т.д.
Каждая "матрица" имеет размер 7х7 кле-
ток. Вы можете заполнять эти матрицы по
своему разумению с целью обеспечить наибо-
лее эффективное поведение змеи (что такое
"наиболее эффективное поведение" - решайте
сами, однозначного ответа тут быть не мо-
жет).
Основой логики поведения змеи является
ее голова. Эта голова должна быть изобра-
жена на каждой используемой матрице в
единственном экземпляре (кроме того, она
должна быть поставлена туда после всех ос-
тальных голов, а уже потом все остальные
надо убрать). Голова змеи на исходной мат-
рице всегда смотрит вверх (на север).
Компьютер поочередно просматривает все
матрицы, накладывая их таким образом, что-
бы голова змеи совпадала с ее текущим по-
ложением. Если окружающая обстановка сов-
пала с тем, что занесено в матрицу, то
змея перемещается в указанном направлении.
Если совпадения не произошло или такой ход
невозможен, то в случайном порядке переби-
раются все повороты и отражения этой кар-
ты. Если совпадения не произошло ни в од-
ном варианте, то происходит переход к сле-
дующей карте. Если же ни одна карта не да-
ла совпадения, то направление следующего
хода выбирается случайным образом.
Незанятая клетка матрицы в виде сеточки
означает, что данный квадратик не принима-
ется во внимание.
Элемент в столбце меню "НЕ" означает,
что элемент изображения считается совпав-
шим, если он любой, кроме указанного в со-
ответствующем квадратике. При каких
обстоятельствах его полезно применять -
решать пользователю.
Элемент "ИЛИ" - совпадение фиксируется,
если совпал хотя бы один из подкрашеных
этим цветом.
Пользователю не следует также забывать
о том, что все другие змеи абсолютно рав-
ноправны. Поэтому, в частности, может
произойти, что змея пользователя погонится
за "далеким хвостом", игнорируя хвост дру-
гой змеи, расположенный гораздо ближе.
Кроме того, если пользователь будет ориен-
тироваться в какой-то матрице на относи-
тельное расположение хвоста и туловища
змеи врага, то не исключен вариант, что
будет зафиксировано совпадение при том,
что хвост будет принадлежать одной змее, а
фрагмент туловища - другой.
4. Некоторые стандартные положения.
Запутавшаяся и заблокировавшая сама се-
бя змея. Если такая ситуация возникнет в
ходе игры, то любой противник сможет с
комфортом "съесть" значительную часть та-
кой змеи, прежде чем она освободится. Хо-
рошая змея должна стараться избегать по-
добных ситуаций.
"Массовый" клубок змей. Окончание раун-
да сражения подобным образом - не редкость
в этой игре.
Три змеи сидят друг у друга на хвосте.
В результате каждого такта сражения каждая
из них как приобретает, так и теряет одну
единицу длины и длина каждой змеи остается
неизменной. Подобная ситуация часто возни-
кает и с двумя змеями. Читатель может по-
думать о том, стоит ли и каким именно об-
разом пытаться разорвать такой цикл. Я
придумал два возможных механизма подобного
разрыва, но они пока несовершенны и чаще
ухудшают, а не улучшают ситуацию.
Две змеи, причем одна из них устойчиво
преследует другую, а преследуемая при этом
не имеет никакого представления о местона-
хождении преследователя и полагается
только на бегство. Читатель может подумать
о том, как, во-первых, добиться того, что-
бы его змея не попадала на роль преследуе-
мого, а, во-вторых, что надо сделать, что-
бы подобное преследование могло оказаться
успешным (змеи ведь движутся с одинаковой
скоростью!).
5. Немного об аналогах.
Вообще прообразом Snake явилась PC-de-
mo. В хелпе к ней имелось следующее:
Идея сделать программу, которая позво-
лит пользователю не только получить удо-
вольствие от игры, но и самому приложить
свои способности, творчество и вдохнове-
ние, отнюдь не нова, но в таком виде, как
"Змеиный Бой" проявляется впервые.
У давних и опытных любителей компьютер-
ных игр при взгляде на эту программу сразу
рождаются какие-то ассоциации с древней
культурой под названием "CoreWar" ("Бой в
Памяти"). Для тех, кто подключился к
компьютерным играм в последнее десятиле-
тие, наверное надо напомнить об этом явле-
нии, поскольку о нем давно уже никто не
вспоминал.
А "CoreWar" была не просто программой,
это была поистине культура и явление. И
развивалась эта культура наиболее активно
в начале 80-х. Суть состояла в том, что
каждый программист сам писал себе не-
большую программу в машинном коде, после
чего две программы разных авторов запуска-
ли в память машины. Куда, в какие адреса
пошли эти программы, никому неизвестно.
Суть игры сводилась к тому, что эти
программы должны были "обстреливать"
большие пространства памяти машины с целью
"зацепить" и уничтожить программу-соперни-
ка. Когда жертва не подавала операционной
системе сигналов "Я жива", бой заканчивал-
ся.
Но "обстреливать" память наугад - не
единственное, чем занимались бойцы. Лучшие
образцы умели "размножаться", "залечивать"
поврежденные участки, "маскироваться",
"сканировать" память и пр.
"CoreWar" получила широчайшее распрост-
ранение на Западе. Проводились чемпионаты,
турниры. Организовывались клубы, а эти
клубы выпускали регулярные бюллетени, то
есть, появились как бы средства массовой
информации по этой культуре.
Многочисленные журналы имели постоянные
разделы, в которых организовывались сорев-
нования, рассказывалось о новых открытиях
и достижениях.
Конечно, участие в подобных мероприяти-
ях было доступно только для программистов,
причем высокой квалификации. Кроме турни-
ров для определения лучшей программы, про-
водились многочисленные конкурсы на самую
короткую, самую оригинальную программу.
Это движение много дало развитию програм-
мирования как искусства и созданию новых
технологий.
При всей своей массовости движение "Co-
reWar" не могло захватить круги обычных
пользователей, но зато дало неожиданный
побочный эффект. Невооруженным взглядом
видно, что те же свойства, которыми должен
обладать хороший "боец в памяти", нужны и
зловредному вирусу. Так, из культуры "Co-
reWar" произросли самые выдающиеся вирусо-
воды и вирусоведы.
Мы не знаем почему, может быть именно
из-за того, что самые психически ущербные
программисты стали проявлять порочную
страсть к написанию (и распространению)
вирусов, это движение стало затухать
где-то к 1984 году, и сейчас о нем редко
вспоминают.
Конечно полной аналогии между "Боем в
памяти" и "Змеиным Боем" нет и быть не мо-
жет. Но я думаю, что сама идея довольно
хороша для создания нового направления в
написании игровых программ.
__________________________________________