Антиобзор игры “Шакал”. Настольная игра шакал Игры типа шакала

Многим, наверняка, известна игра Шакал, по легенде некогда придуманная студентами МГУ и активно продвигаемая последнее время компанией МосИгра в виде двух (собственных) изданий — Шакал и VIP Шакал. Но даже если вы ничего не слышали об этой игре, сегодня мы разберем эту игру на «косточки».

Почему именно «на косточки»? Потому что этим постом я решил начать рубрику обзоров Начистоту, без преукрас рассказывая о настольных играх. И Шакал, по-моему, вполне подходит для этой рубрики.

Итак, приступим…

В обзоре я буду использовать описание игры с официального сайта издателя-продавца — компании МосИгра.

О чем эта игра?

В игре «Шакал» вам предстоит возглавить пиратскую шайку - и искать на острове сокровища. Из четырех соперничающих группировок победит только одна - та, которая найдет или награбит больше золота.

Цель игры

Вы подплываете к «острову сокровищ» на разных кораблях. Задача - вынести любым путём (и любой ценой) как можно больше золота и загрузить его в трюмы своего судна. Побеждает тот, кто останется самым богатым после «разграбления» острова.

Игровой процесс

Игровое поле (остров) состоит из небольших пластинок, каждая из которых «отвечает» за свой тип местности и объектов. На острове вас ждут самые разнообразные приключения: разведывая новые земли, вы можете как наткнуться на заброшенный форт или встретить туземку-лекартку, так и найти сокровища или попасть в ловушку.

Обратим внимание на игровое поле. Оно состоит из квадратных (закругленных) тайлов, выложенных на стол в форме острова:

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

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

Такое ощущение, что игра не тестировалась, либо тестировалась, но тайлы переворачивались силой мысли или какими-то особыми средствами без непосредственного контакта с полем.

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

Фактор случайности

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

Как же обстоят дела со случайностью в Шакале? Вот, что пишет издатель:

Случайность воздействует на игру только в самом начале, когда «создаётся» карта острова. В дальнейшем всё зависит исключительно от вашего умения оценивать ситуацию и принимать верные тактические и стратегические решения. Конечно, некоторые расклады дают небольшое преимущество противнику (например, не очень весело десантироваться с корабля сразу в логово к людоеду), но опытный игрок способен использовать все объекты ландшафта для своей выгоды.
В целом, кроме совсем крайних случаев, случайность на игру практически не влияет: всё полностью зависит только от вас.

Фраза довольна интересна тем, что начинается с доли правды, а заканчивается чуть ли не гипнотической чушью, дабы, ессно, не отпугнуть покупателя. Давайте разберемся поподробнее.

Случайность не то, чтобы воздействует, но формирует немалую долю будущей игровой ситуации уже в самом начале игры, когда на стол выкладываются тайлы. Аналогичный механизм присутствует и в Колонизаторах при стартовой раскладке гексов, но только если в Колонизаторах все (за исключением одного) гексы приносят ресурсы и раскладка влияет на относительное расположение ресурсов и всем игрокам, в итоге, достанутся грани ресурсных гексов, то в Шакале раскладка может привести к сильному дисбалансу за счёт попадания единственного ресурса (сундуков с золотом) в виде золотоёмких тайлов на сторону одного из игроков.

Что происходит дальше? С огромной вероятностью игрок, на чьей стороне «случайно» оказалось больше золота, быстрее остальных находит и, почти наверняка, быстрее перетаскивает на свой корабль найденное «поблизости» (конечно, не забываем про обход ловушек и удлиннение пути). При этом бывают ситуации, когда одному из игроков, напротив, достался берег, большая часть выходов на который испещрена ловушками.

Так что фраза «но опытный игрок способен использовать все объекты ландшафта для своей выгоды» уже наполовину неверна. Да, опыт имеет значение — в большинстве игр именно так. Но в Шакале простая арифметика в виде ловушек, требующих задержаться на клетке поля вплоть до 5 ходов. Так что опыт отходит на второй план, когда раскладка поля не в твою пользу.

Усугубляется дисбаланс одним из игровых правил — игрок может перемещать корабль только вдоль своего берега. Иногда это превращается в реальную проблему (как в случае с игроком, которому не повезло с берегом).

Опять-таки, частично проблему можно решить , если ввести одно домашнее правило . За несколько партий, сыгранных подряд, неудачных раскладок у нас в компании попалось больше, чем «более-менее». Поэтому было предложено разрешить кораблям (с пиратом на борту, естественно) огибать остров вокруг. И надо сказать, что при очередной однобереговой золотоносной раскладке это правило позволило уменьшить дисбаланс за счёт перемещения соперников ближе к сундукам на берег игрока-везунчика. И при этом обострило борьбу за найденные сокровища. Правда, пришлось договориться о ещё одном правиле, когда корабли могут встретиться друг с другом, тут уже как вам удобнее: мы договорились, что они бьются бортами и тот, кто получил удар в борт отодвигается вдоль берега на одну клетку и о том, что могут оплывать вокруг (за одно движение) корабль противника. НО по-прежнему была необходимость тратить ходы на перемещение к чужому берегу (а это бывает не близко) и проблема не исчерпывалась.

Исходя из всего вышеописанного, фраза «В целом, кроме совсем крайних случаев, случайность на игру практически не влияет: всё полностью зависит только от вас.» мною лично расценивается как, простите, но чистая чушь, рекламная фраза, имеющая смысл только в убеждении покупателей касательно интересности игрового процесса после приобретения этой игры. Но в этом обзоре я буду говорить на прямоту.

Что ещё нам рассказывает издатель:

Почему эта игра так интересна?
— Потому что она не требует долгого изучения правил. Начать играть можно через пару минут после открытия коробки. Конечно, поначалу вам понадобится руководство для определения типов местности, но основная идея «ухватывается» буквально «на лету».
— Потому что игра обладает очень большой глубиной: в неё можно играть бесконечно - как шахматы.
— В отличие от шахмат и других «статичных» игр, пиратский остров каждый раз новый. Это гарантирует интерес и разнообразие на протяжении многих партий.

Снова будут высказывать моё личное мнение, но:
— Изучать правила (если их действительно изучать) далеко не быстро, так как в них разъясняется не только игровой процесс, но и значения всех особых тайлов. Конечно, подробность — это плюс, но вовсе не быстрое освоение правил.
— Я не считаю, что «глубина» игры гарантирует бесконечный интерес и уж точно не рискнул бы сравнивать Шакал с Шахматами. Шакал (по легенде) существует уже около 30-40 лет. Вспомните, раньше ведь действительно в России в основном были и были именно популярны настольные игры с высоким фактором случайности или простые, незатейливые приключения. Шакал мне напомнил игровым процессом игры, в которые мне довелось сыграть ещё в детстве. И я считаю, что на глубину Шакал никак не претендует и, в принципе, и не должен. Скорее, это легкая игра-приключение на большую долю везения и небольшую долю выбора оптимального пути исследования острова. В этом, возможно даже, положительная сторона этой игры. Но издатель считает, что нужно преподносить её иначе. Что ж, это их право.
— Вот тут я отойду немного от темы и скажу, что есть так называемые Боевые Шахматы (или Battle Chess), идея которых, кстати, родилась у нас, в России, много лет назад. Перед началом игры игроки разделяют поле посередине загородкой и расставляют свои фигуры как хотят, по своей «боевой расстановке». После этого загородка убирается и начинается партия. Количество вариантов поля — огромное, сами понимаете. И появляется больший интерес к игре, т.к. игрок уже в начале игры сильно влияет на игровой процесс.

Или вспомним снова Катан — там расстановка определяет относительное расположение гексов и игроки ещё до начала игры могут с учётом неё расположить свои начальные строения, чтобы решить свои интересы касательно тех или иных ресурсов и, возможно, определиться со стратегией на партию.

В Шакале, к сожалению, расстановка поля сродни бросанию кубиков в «костях». И может повлиять на всю партию, предоставляя одному игроку огромное и, порою, неоспоримое преимущество. Конечно, на интерес к игре это влияет напрямую и «играть бесконечно» после пары партий уже не хочется.

Скажу сразу, перед первой партией мы ожидали от Шакала действительно чего-то особенного, интересного игрового процесса, романтики и «пиратской» атмосферы по ходу игры. Но уже после нескольких партий, к сожалению, разочаровались.

Компоненты игры

Есть два издания — Шакал и VIP Шакал.

Первым был издан VIP-вариант. Художественное оформление отличное — это действительно неоспоримый плюс этой игры. Качество тайлов из пластика — хорошее, особенно если посмотреть на другие российские настолки и пощупать, из чего они сделаны. Фигурки пиратов — отлично. Монетки с чеканкой — тоже отлично. А недавно издатель порадовал любителей игры переизданием VIP Шакала в деревянной коробке. Подержать её в руках ещё не довелось, но уверен, что сделано не хуже остальных компонентов. И снова повторю: для России проект VIP Шакала особо примечателен как пример качества на высоте, чего все желают другим нашим издателям.

Недавно появился бюджетный вариант игры без VIP приставки. Что изменилось? Коробка стала проще, тайлы сделаны из плотного картона, фигурки пиратов, к сожалению, заменили на пластиковые (из твердого пластика) фишки, а монетки… А вот с монетками авторы прогадали. Сделаны они из стали, которая со временем окисляется, и, по отзывам многих игравших, играть с такими монетками порою неприятно — с ними вынужден согласиться и я.

Правила в обоих изданиях исполнены на твердую пятерку.

И сколько это стоит?

Цена — отдельная тема для разговора. VIP Шакал с самого своего издания стоит 7700 руб., обычный Шакал — 990 руб. на сайте магазина издателя.

Ну что я могу сказать? О качестве изданий я писал выше. Но с ценами, думаю, не согласились бы многие. Цена VIP-издания делает из игры прямо-таки эксклюзив какой-то. Кстати, именно так он обычно и преподносится консультантами в магазине МосИгры. Чем это обусловлено? Вероятно, в первую очередь, дороговизной производства качественных компонентов для России, ну и, видимо, «политикой партии» МосИгры.

Для бюджетного издания с недочётом в реализации монеток, лично я считаю, цена тоже завышена. Но, как говорится, «хозяин — барин». Издатель считает иначе.

Для кого эта игра?

С учётом всего, что обсуждалось в предыдущих пунктах, игра эта рассчитана скорее на детей, которые не будут ждать от игры интеллектуального игрового процесса, сильного влияния игрока на исход игры, а будут, как это привыкли говорить, играть «ради фана», т.е. ради веселья и забавы. Поиграв, бросят фишки и побегут играть в следующую игру.

Ну и говоря про VIP Шакала, думаю, что он в большей степени подойдёт в качестве дорогого подарка и сувенира, чем в качестве игры, оправдывающей интересностью стоимость эксклюзивных компонентов.

Резюме

Игра выполнена из качественных компонентов, чем задаёт высокую планку для всех российских издателей настольных игр. Проблема с монетками в бюджетном издании, в принципе, решается заменой на реальные монетки достоинством 5 или 10 копеек.

Несмотря на качество исполнения, игровым процессом Шакал не оправдывает стоимости и не увлекает игроков настолько, чтобы, как заверяет продавец, «играть в неё снова и снова». Дисбаланс может быть ослаблен домашними правилами и привычкой раскладывать тайлы не вплотную друг к другу.

Вполне подходит в качестве подарка ребенку дошкольного и школьного возраста или в качестве дорогого сувенира «боссу» или человеку, со студенческой скамьи знакомого с механикой этой игры.

Вся претенциозная аура, навеянная издателем вокруг Шакала — по-моему, ни что иное, как реклама. А реклама, как известно, почти всегда преувеличивает и даже нередко создает из воздуха преимущества товара, в реальности являющегося малоинтересным многим покупателям.

Классическая раскладка — это квадрат 11 * 11, без угловых клеток, всего 117 клеток.
Береговая линия каждого корабля — 9 клеток.
Раскладка Идеально подходит для 2 и 4 игроков.

С такой раскладкой возможна игра втроем, оставив один берег свободным. При этом игрок напротив свободного берега оказывается в самом невыгодном положении, что вносит дисбаланс. При игре с дополнением (или Остров сокровищ) дисбаланс частично может нивелироваться наличием пещер.

Альтернативная раскладка для 3 игроков


В основе раскладки лежит квадрат 13 * 13, без углов, со скошенными берегами на свободной стороне.
Всего 118 клеток, но если у вас Классический Шакал без дополнения или Остров сокровищ, то можно обойтись без одной клетки или использовать освободившийся корабль в качестве пустой клетки.
Береговая линия каждого корабля — 11 клеток.
Раскладка хорошо подходит для 3 игроков.

Дисбаланс для игрока напротив свободного берега по прежнему существует, однако он менее значительный, чем в классическом варианте.

Альтернативная раскладка для 5 игроков


Игра впятером официально не предусмотрена, но вполне возможна, при наличии дополнения или издания Остров сокровищ.

В основе раскладки лежит прямоугольник 11 * 8 с выступающими берегами по 5 клеток.
Всего 113 клеток, 4 клетки остаются незадействованны: Пятница, Миссионер, Бен Ганн, Шлюпка (в оригинальном дополнении) или пустая клетка.
Раскладка хорошо подходит для 5 игроков.

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

В раскладке присутствует незначительный дисбаланс.

Альтернативная раскладка для 6 игроков


Разрази меня гром, оказывается можно сыграть и вшестером!

Раскладка состоит из 113 клеток, 4 пустые клетки остаются незадействованны.
Береговая линия каждого корабля — 5 клеток.

В игре будет 6 команд по 2 пирата в каждой. Чтобы не перепутать одинаковые по цвету фишки, относящиеся к разным командам, можно временно их пометить (например, обмотать ниткой). В качестве 5-го и 6-го корабля можно использовать две незадействованные клетки.

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

Настольная игра «Шакал» – оригинальная стратегия с уникальной механикой и простыми правилами. Участникам придется отправиться на поиски золота! Утащите с острова больше золота, чем остальные, чтобы стать беспощадным пиратом! Игра всегда будет разнообразной, ведь клетки поля размещаются в свободном порядке, а кубик здесь совсем отсутствует, что уменьшает случайный фактор на протяжении партии. Рекомендуемый возраст игроков 6+, а партия длится от часа и более, в зависимости от стратегии.

Уровень сложности: средний

Количество игроков: 2-5

Развивает навыки: сообразительность, стратегия, комбинативность

Какие приключения в этой коробке?

«Шакал. Остров сокровищ» включает в себя следующие компоненты:

  • тайлы, из них складывается остров – 117 шт.;
  • корабли, перевозившие пиратов – 4 шт.;
  • деревянные фишки для четырех команд – 12 шт., по 3 пирата на каждого участника.;
  • монетки для маркирования сокровища – 37 шт.;
  • брошюра с правилами проведения игры с ответами на часто задаваемые вопросы.

Капитан Шакал закопал несколько сундуков сокровищ!

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

Что нужно делать, капитан?

Остров встречает судна (2-4, в зависимости от числа участников) по разные стороны друг от друга, которые наполнены пиратами самого игрока и его соперников. В них по три морских разбойника. Участник «Шакала» высаживает их на суше. Разумеется, в начале партии остров не разведан, что и необходимо сделать игрокам. Переходя на клетки, играющий переворачивает их, изучает содержимое. Так можно встретить увлекательное приключение и не менее долгожданное сокровище. Задача в карточной игре «Шакал» – разыскать клады, которые спрятал капитан Шакал, и забрать золото к себе на судно.

А как выглядит остров?

Он представляет собой выложенные квадратные пластинки, повернутые лицевой стороной вниз и обрамленные водой. Каждая из пластинок «отвечает» за тип местности и объектов. Постепенно игроки будут переворачивать по клетке, выполняя задания, прописанные в них. Так они разведают новые земли, отыскать заветные сокровища и сталкиваются с опасностями.

Значение клеток поля


Плитки поля в «Шакале» пестрят приключениями. Существуют следующие квадраты:

  • пустые клетки;
  • стрелки с одним или несколькими направлениями – при неоднозначном выборе игрок выбирает сам направление дальнейшего передвижения пирата;
  • с изображением коней – переместить своего героя буквой «Г», подобно шахматам. Когда ход сделан, открыть неизведанную часть острова только ту, где пират остановился после хода.
  • с бочками – счастливое поле для разбойника, он следующий ход не передвигается, однако игроку разрешено в это время управлять остальными своими пиратами со своего корабля.

Игра, представляющая собой необычную стратегию, сопровождающуюся новой игровой механикой и изящным внешним оформлением. Шак-Gal можно сравнить с, уже завоевавшим популярность, Шакалом, однако здесь производителем выступает отечественная компания Задира. Каждая очередная партия в Шак-Gal заставляет участников заново продумывать стратегию собственных действий.

Говоря в двух словах – игроки отправляются в путешествие по игровому полю, в надежде найти несметные сокровища. Участников в игре

Корабли с пиратами отправляются в путь

Всего в игре присутствуют 12 пиратов, отличающихся цветами:

  • Красный – 3
  • Желтый – 3
  • Черный – 3
  • Белый – 3

Вначале партии участники должны создать игровое поле, состоящее из 121 карточки, причем как они будут расположены – зависит от них самих. Далее они выкладывают свои карточки Корабль в середину одной из стороны (каждый занимает свою), сверху которых устанавливаются Матросы.

Выбор есть всегда

Основная задача каждого участника – передвинуть к своему кораблю наибольшее количество Монет, которые аккуратно спрятаны по территории острова. В свой ход игроку разрешается выполнить лишь одно действие:

  • Передвинуть Корабль на одну клетку
  • Выпустить пирата
  • Забрать пирата
  • Передвинуть пирата

Но кроме этого есть и специальные действия, например:

  • Познакомиться с местным жителем
  • Переждать в форте
  • Использовать воздушный шар

Пираты выступают еще и в роли носильщиков – каждый может унести по одной Монете. Передвижение возможно лишь по тем клеточкам, которые открыты. Логично, что пираты воинственны и могут сражаться между собой, также зарабатывая заветные Монеты.

Что в коробке

  • 121 карточка с рисунком
  • 4 карточки Корабль
  • 12 фигурок Пиратов
  • 32 Монеты
  • Инструкция

В ситуации полной и беспросветной задницы власть в AI сразу забирали военные, и это иногда спасало партию.

Для нашего AI Шакала пришлось написать целых 4 разных AI, каждый из которых отвечал за свою задачу. А затем они собирались вместе и голосовали за то, что же делать пиратам на поле в этом ходу.

Вся эта сложная система понадобилась, потому что у нас не было единой оценочной функции. Грубо говоря, AI бывают двух типов: когда понятно, как численно оценивать вашу позицию, и когда это совершенно непонятно. Та же партия в Го в определённый момент превращается в поединок интуитивных догадок, то есть сваливается в неалгоритмизируемую по сложности и по неопределённости задачу.

Давным-давно мой преподаватель профессор Сербин рассказывал байку с сыроваром из Европы. К этому обаятельному толстяку приезжали автоматизаторы и спрашивали, как он делает такой вкусный сыр. Им нужны были эвристики для температуры, густоты и так далее. Сыровар опускал палец в мягкий сыр, медленно и кайфно чертил там дугу, улыбался во всё хитрое лицо и говорил: «Ну как вы не чувствуете!» .

Алгоритмизировать процесс гости так и не смогли. Так вот, разработка шла так: мы чертили дуги и хитро улыбались, а парни проигрывали нам в настольный Шакал. И мечтали, что за них отомстит AI.

Что надо знать про игру, чтобы понять, в чём засада с AI

Ядро AI писал разработчик idyury , который уже имел опыт создания машинного интеллекта, но не для таких стратегий. Ситуацию несколько осложняло то, что играть в «Шакала» он поначалу не умел, поэтому тесты первые полгода были просто волшебными.

Принцип «Шакала» достаточно прост – вы играете за трёх пиратов, разведывающих остров и собирающих там клады. Вот так выглядит поле во время партии:

Каждая клетка – это какое-то приключение, например, сундук с золотом, крокодил, пушка, табун диких коней или стрелка, по которой пират немедленно следует дальше. Совокупность стрелок и других элементов рождает сложный навигационный граф, который в каждой новой партии определяет рельеф острова и «узкие места», за которые идёт война.


Настольные клетки


Для экрана пришлось менять «интерфейс» клеток

Собственно, «Шакал» изначально был создан в достаточно простой форме преподавателями и студентами МГУ ещё в 70-х. До 2008 он успешно игрался с помощью двух листов бумаги, карандаша и знания теории графов, а после мы существенно переработали его и издали в виде коробки настольной игры. Чертовская простота освоения рождала казусы вроде занявшей на турнире II место 12-летней девочки и родителей, пишущих нам, как их четырёхлетние-пятилетние дети режутся в «остров».

Когда количество проданных коробок в России перевалило за 100.000 штук, мы решили делать приложение. И тут понадобился AI.

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

Одной из ключевых сложностей был достаточно большой набор возможных ячеек на игровом поле с различным действием. Действие некоторых ячеек вообще было уникальным (например, «самолет» или «аборигенка»). Тем не менее, изначально стояла задача построить такую систему, которая позволила бы структурировать всю игровую информацию и унифицировать все подсистемы. Не хотелось заниматься «подгонкой данных» и микронастройками на базе стратегий - нужна была схема, которая позволяет расширять игру любыми типами клеток.

Поэтому разработчик сел пилить некую общую модель данных для игры.

Модель данных

Разработчики поиграли с нами и усвоили некие общие модели действий внутри игры. Работу начали с создания сразу нескольких прототипов – системы навигации по игровому полю, системы оценки текущего состояния и принятия решений, системы поиска оптимальных путей, различных оценочных функций. Как раз в этот момент мы породили неприятный легаси-код, который ничем не проявлял себя полгода, а потом внезапно стал мешать.


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

Дело в том, что в настольной версии игровое поле состоит из клеток, которые надо переворачивать по мере разведки острова. И первая же модель острова предполагала граф как раз такой формы и конфигурации, где каждая клетка была узлом.

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

Проблема в том, что некоторые клетки типа пустыни проходятся за, например, 5 ходов, и в одну сторону. То есть на месте одной вершины должно быть 5 со своими связующими векторами. Поначалу для облегчения тестирования в этом месте забили костыль, который постепенно оброс кодом и стал несущей конструкцией. Что в итоге породило ещё ряд костылей в функциях поиска пути и оценки позже.

Для каждого узла графа задается список флажков, характеризующих его текущее состояние с точки зрения активного игрока (например, есть флаг, сигнализирующий о том, что текущий узел находится под атакой вражеского пирата):

Enum eLocks { eLock_Prohibited = 1 << 0, eLock_LandAttack = 1 << 1, eLock_SeaAttack = 1 << 2, eLock_TrapLock = 1 << 3, eLock_Unexplored = 1 << 4, eLock_Fortress = 1 << 5, eLock_ExcludeTrap = eLock_Prohibited | eLock_LandAttack, eLock_AllDanger = eLock_Prohibited | eLock_LandAttack | eLock_TrapLock, };

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


Пример графа для неразведанных ячеек

Оценочная функция

Когда навигационная модель была готова, потребовалось получить оценочную функцию, позволяющую отличать хорошие ходы от плохих, а гениальные – от хороших. Естественно, при заданном многообразии это было очень сложно. В итоге после долгих размышлений idyury выделил 4 подсистемы, которые определяли ваш успех в игре:
  • Разведка, то есть оценка необходимости открытия новых ячеек.
  • «Жадная» система, то есть непосредственное взятие монет с разведанных ячеек и доставка их на корабль.
  • Система восстановления пиратов – когда один из наших пиратов попадает в беду, часто рациональнее спасать его, чем хвататься за пиастры или бить врага.
  • И система атаки вражеских пиратов. Это единственная агрессивная подсистема, задача которой – снизить риски для остальных трёх систем. Забегая вперёд, скажу, что она включается как аварийная, если риски для оптимальных действий в первых трёх подсистемах слишком велики.

Надо сказать, что парни уже делали шахматы и ААА-шутеры со сложными врагами, но у них всегда под рукой была хорошая оценочная функция. Здесь же реализовали симуляцию чужих ходов исходя из своей логики оптимальных действий, а затем оценку к каждой из 4 подсистем. Пришли к набору эвристик для каждого варианта. Затем 4 подсистемы «голосуют» за свои ходы (вес голоса меняется в зависимости от ситуации на доске: например, при одном дееспособном пирате из трёх мы, скорее всего, бросим всё и пойдём спасать друзей). В итоге подобного нормирования получалась одна оценочная функция, которая потом долго балансировалась. Кстати, именно так делаются разные «характеры» ботов – для жадины мы просто можем повысить вес голоса системы взятия монет, а для острожного игрока – системы восстановления. В текущей версии баланс подобран на глаз после примерно двух сотен тестовых партий с опытными игроками. Позже будем использовать результаты реальных игр для обучения AI.

И да, сам AI должен быть простым поначалу, и постепенно развиваться, соответствуя уровню подготовки игрока. Но давайте всё же перейдём к мясу про подсистемы принятия решений.

AI разведки

Логика работы системы открывания ячеек достаточно проста – выбираем ход (ход может быть не одиночный, а состоять из множества ходов), который увеличит оценочную функцию. При этом каждой клетке сопоставлен некоторый вес, учитываемый в оценочной функции.

Чем ближе клетка к базовой клетке игрока, тем выше её вес. В качестве базовой клетки игрока выбрана клетка посредине его побережья (клетка высадки на берег), но здесь можно экспериментировать.


Веса ячеек при открывании с точки зрения игрока белого цвета на первом ходу.

Естественно, если между нами и сундуком на 5 золотых монет лежит одна неразведанная ячейка, ценность её открытия резко повышается. С точки зрения других подсистем, напоминаю, она до открытия рассматривается как пустая. Клетка с врагом и клетки под его атакой резко теряют в весе.

При равном (или сравнимом до примерно 5%) весе двух ячеек рядом (например, в начале), мы делаем случайный ход. Кстати, принцип случайности при похожести весовых коэффициентов вносит в игру совершенно дикий драйв и непредсказуемость AI – это очень круто для игроков, но совершенно дико для отладки – мы не всегда могли корректно повторить партию, чтобы посмотреть, где AI запутался – пришлось, грубо говоря, писать свой генератор случайных чисел, а не знакомиться с особенностями работы каждого на отдельных устройствах.

Далее задача - за меньшее количество ходов открыть ячейки с большим весом. Чем больше золота ещё осталось на карте – тем больше голосов разведка получает при нормализации общей оценочной функции. То есть к эндшпилю разведка используется опытными пиратами всё реже и реже, на первый план выходят проблемы доставки монет и их отжимания у врага.

Система сбора монет

Система сбора монет – самая сложная по нагрузке на процессор. Полный перебор на клиентских устройствах невозможен, поэтому, упрощая, используется метод ветвей и границ, основанный на выборочных просчётах в глубину.

При этом расчеты строятся не на отдельном ходе, а на действии, которое может включать в себя последовательности ходов различной длины. Например, когда надо плыть кораблем в любую возможную точку, или идти пиратом на клетку с монетой. Действия могут объединяться в более сложные действия, например, отнести корабль на монету можно напрямую кратчайшим путем (не обязательно пешком, пушка, воздушный шар или лошадь также учитываются), а можно доставить ее на побережье, куда может быть подогнан корабль другим пиратом. Поиск в глубину перебирает доступные ходы на несколько шагов вперед и выбирает оптимальный. В текущей версии для iPad 2 и iPhone 4 используется глубина в 2-3 хода в зависимости от ситуации, на топовых устройствах можно считать в 4 хода с ожиданием менее секунды. Есть куда оптимизировать по логике работы алгоритма, но пока глубины хватает, чтобы боты хорошо играли на тактическом уровне.

При этом пират всё также избегает нежелательной встречи с врагами. И считает, куда они могут пойти на заданной глубине прогноза.

Неразведанные ячейки не учитываются в расчете пути, когда игрок несет монету на корабль, чтобы снизить риски её «утери». При расчете пути в других случаях он может быть проложен по закрытым ячейкам с предположением, что они окажутся пустыми. После «разведки» ячейки навигационный граф достраивается.


Пиастррры!

Подсистема спасения

Пират может упасть в воду (тогда нужно подогнать корабль с другим пиратом для его спасения), может провалиться в ловушку (нужен второй друг, чтобы его вытащить), может быть съеден людоедом (придётся воскрешать его в крепости с аборигенкой) или попасть в бесконечный цикл (например, стрелка на крокодила), что приведёт к тому, что он сойдёт с ума и погибнет. Для воскрешения тоже нужна крепость и аборигенка.

Так вот, логика работы системы восстановления пиратов также не так уж проста, как может показаться. Система учитывает не только полностью мертвых пиратов, а оперирует понятием «неактивный пират». При этом пират на роме неактивным не считается, поскольку способен исцелиться сам уже к обеду следующего дня.

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

Упрощая, если наш друг провалился в ловушку в соседней клетке, оценочная функция назначает 10 очков сложности восстановлению. А если в двух клетках – сложность растёт нелинейно, например, становится уже 30 очков. Далее на основе первичной возможности восстановления отбрасываются гипотезы, которые не нужны в текущей игровой ситуации (чтобы не считать весь комплекс каждый ход, когда нужно заниматься другими вещами). Важность восстановления растёт в зависимости от игровой ситуации, количества наших активных пиратов и лёгкости восстановления.

Если восстановление всё же с высокой вероятностью нужно, считаем возможности – например, подплыть игроком к кораблю или убиться о чужой корабль и занять крепость за N ходов.

Подсистема атаки

Идея системы атаки вражеских пиратов похожа на классическую задачу просчета ходов, например, в шахматах. У нас есть некоторая оценочная функция, учитывающая, сколько потенциально пиратов может атаковать вражеских пиратов (да, крепость и аборигенка здесь, конечно, очень сильно изменяют ситуацию). Для принятия решения об атаке система также просчитывает вглубь, но оперирует уже не действиями, а именно примитивными шагами. При этом на каждом уровне выбирается несколько позиций с лучшими оценками. Полный просчет включает в себя просчет по всем пиратам всех игроков с контролем над монетами (сколько монет в данный момент находится «под защитой» пирата, а также их близость к кораблю). В итоге мы получаем дерево решений, на основании которого уже принимается окончательное решение об атаке.

Несмотря на просчет в глубину и наличие выполняемых действий, каждый ход делается новая оценка. В результате пират может оперативно изменить свое действие в зависимости от изменения ситуации на игровом поле. Для просчёта выбираются пары пиратов по схеме «я один и противники» на 2 хода вглубь минимум.

В тактическом блоке учитывается влияние игроков на клетки поля и их влияние на золото на поле - это вопрос безопасности наших операций и потенциальной выгоды от того, что мы ворвёмся в чужие. Главный вопрос - сколько пират контролирует золота в перспективе нескольких ходов. Опять же, если наши пираты напрямую контролируют золото или виртуально контролируют золото через 2 хода – приоритет в голосе будет отдан в систему таскания монет, скорее всего. Потому что AI знает, что лучше синица в руках. Также целесообразность включения этой системы напрямую зависит от необходимости расчистки пространства для безопасности – если врагов нет близко, она даже не включается по факту.

Итого

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

Все системы работают, практически, независимо друг от друга. Каждая из них, опираясь на навигационную систему, определяет доступные решения и делает оценку. Система принятия решения на основании полученных оценок и с учетом контекста выбирает оптимальный вариант. При этом важно, что предлагаемые решения не ухудшали положение игрока на поле. Если таких решений в данный момент не существует (по аналогии с безысходностью), система выберет любой вариант атаки врага, даже если он ухудшит позицию. Да-да, здесь мы вспоминали тот самый конкурс AI про безмолвных животных, где русские коровы ели чужую траву.


Скриншот режима отладки. Голубой – текущая позиция, желтый - выбранный наилучший ход. Формат вывода: количество пиратов (минус означает противников) | разница атакующих клетку своих и защищающих её чужих | перспективность клетки для сбора золота | итоговый счет клетки. На скрине видно, что желтый решил сходить по диагонали и занять клетку, с которой можно атаковать другую клетку с вражескими пиратами и с запасом золота. Позиция улучшилась при этом с -20.61 до -12.37.

Реализация и тесты

Здесь я процитирую:
В первую очередь была реализована навигационная система. Эта задача на многих проектах решается приблизительно одинаковым способом, необходимо было только учесть специфику Шакала (пришлось, к примеру, дорабатывать алгоритмы после того, как выяснилось, что упавшие монеты лежат в подслотах «длинных» клеток, а не на ячейке в целом).

Имея навигацию, была предпринята попытка пойти по пути наименьшего сопротивления и реализовать обычный алгоритм просчета в глубину. Очень быстро стало понятно, что ничего хорошего из этого не получится. Слишком большое количество возможных ходов для каждого пирата. Плюс были трудности с формализацией поведения ячеек различного типа. Поэтому дальше разработка шла по шагам. Системы открывания ячеек и сбора монет делались практически параллельно. Первая, конечно же, была закончена много раньше по причине своей относительной простоты. Вторая развивалась и совершенствовалась до самого окончания разработки. После них была реализована система восстановления пиратов. Система атаки вражеских пиратов делалась в последнюю очередь. В принципе, можно сказать, что каких-то особенных сложностей в процессе работы не возникло, всё-таки, сказался наработанный ранее опыт. Основные переделки были связаны с не совсем полным или неправильным пониманием правил игры, например, должен ли пират, пришедший на крокодила через лед, умереть, либо оправляться обратно туда, откуда пришел.

Первоначальное тестирование проводилось в автоматическом режиме еще на этапе разработки. Сама система управления игрой построена таким образом, что работает универсально. Это изначально было заложено для возможностей мультиплеерной игры. Любой игрок может управляться одним из трех типов контроллеров: человеком, компьютером или удаленным игроком (удаленный игрок также может быть человеком или компьютером). В любой момент игры контроллер одного типа может быть заменен на контроллер другого типа (например, компьютер может занять место игрока, «отвалившегося» от сети, но впоследствии игрок может подключиться заново и вернуться в игру). Для тестирования Шакала в целом и ИИ, в частности, это сыграло очень хорошую службу. Игра запускалась с игроками-компьютерами, и они играли сами с собой. Оставалось только следить за их поведением и собирать статистику. В игре сейчас используется SFMT-генератор случайных чисел, что позволяло по ходам воспроизвести ее заново, если в ней на каком-то этапе возникал момент, требующий отладки или доработки. Подобная методика очень удобно позволяла определять и локализовывать многие проблемы, например, вечные циклы в навигации пиратов, нелогичные или неправильные действия и прочее. Вторым этапом тестирования было тестирование в игре с реальными людьми, которое строилось на похожих принципах, однако для воспроизведения игровой сессии использовалась специально разработанная система протоколирования игровых событий, записывающая и сохраняющая на диске все сыгранные партии. Впоследствии игровая сессия просто воспроизводилась по ходам.

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

Собственно, в комментарии можно задавать вопросы

Похожие публикации