Журнал удивительных идей


Совместный проект учителей и учеников 192 школы

Программируем... без программирования

Игра Snake Battle была очень популярной, когда ее создали, затем интерес к ней погас, и сейчас о ней мало кто знает. Нам бы очень хотелось вспомнить эту игру и провести свой чемпионат.

Принцип игры прост - мы программируем интеллект электронной змеи-кибербойца, которая затем участвует в боях без нашего участия. Подобных игр создано достаточно много, но особенность Snake Battle в том, что программируют... без программирования. Вернее сказать, без составления алгоритмов. Привычных циклов, условных операторов, подпрограмм здесь нет. Нет и самого языка программирования. Как это?

Во время боя каждая змея движется по клеточному полю. Перед каждым игровым шагом случайным образом определяется очередность ходов змей. Затем каждая змея в порядке очередности делает ход. Ход означает, что змея либо передвигается на одну пустую клеточку, либо откусывает хвост противника и передвигается на его место. Если ни того, ни другого нельзя сделать, змея стоит на месте.

Поведение змеи программируется посредством карт, состоящих из 7*7 позиций, в которые игрок помещает условные обозначения элементов, изображенных на панели управления. Можно использовать от 1 до 9 карт.

В каждый момент времени змея обозревает участок поля размером 7*7 клеток вокруг своей головы и сравнивает его с первой картой своего поведения, вращая ее по необходимости. Карта считается совпавшей с фрагментом поля, если при наложении под всеми элементами карты оказались такие же элементы на поле. Если это произошло, то направление своей головы на карте покажет направление движения на следующем шаге. При сравнении карта может вращаться любым образом, а также может быть перевернута изображением вниз. Получается всего до восьми сравнений на чип. Поэтому не имеет смысла вставлять карты с взаимно симметричным расположением элементов, так как они будут срабатывать совершенно одинаково.

Если нет, то фрагмент сравнивается со следующей картой и так далее, пока не будет найдена подходящая карта. Если ситуация на игровом поле не соответствует ни одной из заданных карт поведения змеи, то направление движения на следующем шаге выбирается случайно.

Посмотреть полные правила
(также они вложены в архив игры)

Попробуем создать свою первую змею.

Главное, что должна змея делать, - это есть хвосты противников. Выбираем в меню хвост и ставим на карту перед головой.



"Можешь съесть - ешь"

Принцип никуда не годный при игре в шахматы здесь оказывается очень полезным. Многие, видя успех своей змеи (даже с одним этим чипом она оказывается боеспособной), окружают голову плотным кольцом из хвостов, что абсолютно не годно. Ведь при сравнении должны совпасть всего восемь хвостов, а змей-противников максимум три. Но даже если, допустить, что сработать может только один хвост на карте (как сделать ИЛИ мы покажем ниже), то в половине случае змея будет шарахаться от хвоста. Например, сработала комбинация с левым нижним на карте хвостом. Так как каждый чип определяет ситуацию для движения змеи вверх (относительно карты чипа, а не поля, разумеется), то змея шарахнется от хвоста противника, вместо того чтобы преследовать его.

А что если хвост не "прямо перед носом", а по диагонали? В этом случае хорошей кажется стратегия преследования. Добавим второй чип: Добавление чипа бесполезно - наш второй чип будет проверяться в восьми позициях, в том числе и соответствующей этому чипу (то есть оба чипа работают абсолютно одинаково). А что если хвост противника виден, но не так близко? Следует ли добавить чип ? Так можно потратить все чипы на хвосты противника, а ведь еще надо не запутаться, спрятать свой хвост, рассмотреть ситуации, когда хвоста противника не видно, но видно его тело и прочее. В этом случае на помощь приходит "ИЛИ", доступное на уровне "Любитель". Можно создать такой чип:



"Видишь где-нибудь хвост? За ним!"

Хотя бы один хвост змея увидит, и ринется в погоню. Но не все так гладко. А что если ситуации на карте такая:

?

Жадность иногда подводит...

С таким чипом красная змея с фиолетовой полосой смело залезет в ловушку зелено-белой в безумной погоне (увидев хвост зеленой змеи с красными пятнами, но проигнорировав тело врага, она ринется вниз), и хвоста не догонит и запутается. Недостаточный интеллект не позволит змее сделать правильный шаг - свернуть налево.

А как же быть? А в этом-то игра и состоит. Изобрести такую систему чипов, которая приведет к победе.

Скачайте игру (менее 300 килобайт),
пробуйте победить змей из архива
и присылайте своих змей!

Напоследок один небольшой трюк. Одна из проблем - научить змею не запутываться. (Кстати для этого полезно тестировать змею одну на поле без противников.) Весьма эффективен простой чип



"Беги от себя".

И еще. Есть возможность тестировать по шагам. Обратите внимание на кнопку "Медленно" в меню боя.

М
а
т
е
м
а
т
и
к
а
Ф
и
з
и
к
а
Х
и
м
и
я
Б
и
о
л
о
г
и
я
И
н
ф
о
р
м
а
т
и
к
а