Dagaz: Эпизоды (часть 2)

4isck4toxbws20hsk3nrqghdkoy.png— Один слон, одна колесница, пятеро пехотинцев и трое всадников составляют ПАТТИ, утроенное ПАТТИ составляет СЕНАМУКХУ, …
а десять АНИКИНИ составляют АКШАУХИНИ, и это есть самая крупная войсковая единица…
                                           Генри Лайон Олди «Гроза в безначалье»

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

Шахматы


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

rxrbb87dmkynfbn6kmeeiyofvom.png


Под это дело, мне пришлось научиться рисовать графические диалоги, прямо на canvas-е. До этого момента, пешки превращались только в ферзей, что было несколько неудобно в тех играх, где ферзи отсутствуют. А есть ведь ещё и такие, в которых доступный ассортимент фигур зависит от поля на котором превращение происходит!

hiuvjpe7knaex1m8gevn_jrgt4c.png


Другим важным моментом является наличие в игре «королевских» фигур. Разумеется, это не шахматное изобретение. Главные фигуры присутствуют во множестве старинных игр. Dablot, Damone, Altai Shatra — во всех этих играх «короля» можно заманить в ловушку, завершив, тем самым, игру досрочно. Особенно пикантны игры, в которых в королей могут превращаться фигуры рядовые. В «Шашматах», например, у игрока есть выбор: получить, в результате превращения, более сильную фигуру или обезопасить себя, создав «запасного» короля.

Во всех этих играх, игрок проигрывает потеряв все королевские фигуры. Так, если на доске присутствуют «принц» и «король», для победы необходимо захватить их обоих. Такое понимание «правила внезапной смерти» характерно для древних игр, таких как Чатуранга, но уже в Шатрандже шахматная мысль идёт дальше. Теперь короля атаковать нельзя — это фигура неприкосновенная, но и игрок не имеет право оставлять свою главную фигуру под ударом! Если же избежать угрозы королевской фигуре невозможно — игра заканчивается. Так появляются понятия шаха и мата.

Строго говоря, не во всех шахматных играх дело обстоит таким образом
Главной проблемой действительно больших шахматных игр является наличие в игре нескольких королей. В особо запущенных случаях, дело осложняется ещё и вычурными правилами завершения игры. Так например, в «Ko Shogi» победу приносит взятие фигур «General» и «Middle troop» либо «General» и «Banner». При этом, «Middle troop» может превратиться в «Governor» (а правила превращения в «Ko Shogi» — это отдельная большая тема), которого, в этом случае, также необходимо взять. Всё это дьявольски осложняет понятия шаха и мата. Гораздо проще разрешить брать королевские фигуры, разбираясь с возникшей ситуацией по ходу дела. Другим фактором, ломающим идею, является игра более чем двух игроков.
t351slzygjviyba6u_9q_tmv-qm.png

Здесь понятие шаха (как угрозы королю) становится ещё более абстрактным. В самом деле, если южный игрок атаковал короля западного игрока, последнему совершенно необязательно предпринимать что-то по этому поводу, поскольку до того как Юг снова получит право хода, Север и Восток могут ситуацию значительно скорректировать. Кроме того, в Yonin Shogi действует правило сброса, а королей также как и другие фигуры, разрешается забирать в свой резерв. Разумеется, для того чтобы продолжать игру, игрок должен держать на доске (а не в резерве) хотя бы одного из своих королей (можно и больше, но смысла нет), а чтобы победить, он должен собрать под своим началом королей всех четырёх армий.


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

С самой проверкой на «мат» тоже были сложности. Очень продолжительное время, условием поражения я считал отсутствие возможного хода (с учётом запретов из за короля под шахом, разумеется). В общем-то это не так уж и неверно, учитывая то, что в большинстве игр (в том числе и шахматных) так оно и есть. Но не в Шахматах! К счастью, в версии 1.2.7 я придумал как поправить ситуацию без ущерба производительности и теперь пат определяется корректно. Кстати, та же проверка на возможные угрозы используется и ботами (что сильно улучшает качество их игры), но всё равно, AI в Шахматах отвратительный (дебютная библиотека помогает незначительно). Тут уж грешить я могу только на самого себя. Всё таки, качественный шахматный AI — это не моё.

9lw_5lyzw5txvlssdgvi3gby4ps.png


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

Что ещё можно извлечь из этой игры? В Шахматах есть презабавнейший ход, при выполнении которого, двигаются две фигуры одновременно. Конечно, я говорю о рокировке. Для моего проекта эта концепция столь же важна как и составной ход, позаимствованный из шашечных игр. Существует масса игр в которых её можно применить. Dameo, Abalone, Ordo — во всех этих играх, фигуры двигаются одновременно. Но можно пойти ещё дальше!

kvatnlnq0o0_n_qyotorgcyijwi.gif


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

© Habrahabr.ru