— Один слон, одна колесница, пятеро пехотинцев и трое всадников составляют ПАТТИ, утроенное ПАТТИ составляет СЕНАМУКХУ,…
а десять АНИКИНИ составляют АКШАУХИНИ, и это есть самая крупная войсковая единица…
Генри Лайон Олди «Гроза в безначалье»
В прошлой статье я рассказывал о шашках и это не случайно. Шашечные игры, с их составными ходами, послужили основой проекта, составили его костяк. До сих пор, шашки подкидывают мне сюрпризы. Например, буквально на днях, мне довелось исправлять застарелый баг, связанный с опцией отложенного взятия. И вообще, как я уже говорил, шашечные игры сильно недооценены. Но одними лишь шашками дело не ограничивается…
Шахматы
Шахматы не кажутся нам какой-то необычной игрой, но это всё просто потому что мы к ним очень сильно привыкли. Взять, у примеру, пешку. Если вдуматься, это очень необычная фигура. Единственная в шахматах, которая бьёт не так как ходит. А правило взятия на проходе и вовсе сложно считать чем-то очевидным (да-да, знаю, так сложилось исторически). Но не будем о банальном. Пешка умеет превращаться в другие фигуры! Причём, в отличии от большинства других традиционных шахматных игр, выбор не ограничивается максимум двумя вариантами.
Под это дело, мне пришлось научиться рисовать графические диалоги, прямо на canvas-е. До этого момента, пешки превращались только в ферзей, что было несколько неудобно в тех играх, где ферзи отсутствуют. А есть ведь ещё и такие, в которых доступный ассортимент фигур зависит от поля на котором превращение происходит!
Другим важным моментом является наличие в игре «королевских» фигур. Разумеется, это не шахматное изобретение. Главные фигуры присутствуют во множестве старинных игр. Dablot, Damone, Altai Shatra — во всех этих играх «короля» можно заманить в ловушку, завершив, тем самым, игру досрочно. Особенно пикантны игры, в которых в королей могут превращаться фигуры рядовые. В "Шашматах", например, у игрока есть выбор: получить, в результате превращения, более сильную фигуру или обезопасить себя, создав «запасного» короля.
Во всех этих играх, игрок проигрывает потеряв все королевские фигуры. Так, если на доске присутствуют «принц» и «король», для победы необходимо захватить их обоих. Такое понимание «правила внезапной смерти» характерно для древних игр, таких как Чатуранга, но уже в Шатрандже шахматная мысль идёт дальше. Теперь короля атаковать нельзя — это фигура неприкосновенная, но и игрок не имеет право оставлять свою главную фигуру под ударом! Если же избежать угрозы королевской фигуре невозможно — игра заканчивается. Так появляются понятия шаха и мата.
Здесь понятие шаха (как угрозы королю) становится ещё более абстрактным. В самом деле, если южный игрок атаковал короля западного игрока, последнему совершенно необязательно предпринимать что-то по этому поводу, поскольку до того как Юг снова получит право хода, Север и Восток могут ситуацию значительно скорректировать. Кроме того, в Yonin Shogi действует правило сброса, а королей также как и другие фигуры, разрешается забирать в свой резерв. Разумеется, для того чтобы продолжать игру, игрок должен держать на доске (а не в резерве) хотя бы одного из своих королей (можно и больше, но смысла нет), а чтобы победить, он должен собрать под своим началом королей всех четырёх армий.
Но даже если рассматривать лишь те игры, в которых правила «шаха» и «мата» действуют, всё оказывается не так просто. Прежде всего, полная проверка на всевозможные угрозы королю оказывается довольно затратной. Учитывая то, что атаки, в общем случае, не обязательно могут быть только шахматными (в "Белорусских шахматах", например, можно атаковать короля шашечными фигурами, а приоритет во взятии шашечными фигурами позволяет поставить мат королём) было бы заманчиво выполнять генерацию всех допустимых ходов с последующей проверкой угроз королю. На практике, это работает слишком медленно. Приходится дублировать схему перемещения фигур, чтобы проверять возможные угрозы без генерации списка ходов.
С самой проверкой на «мат» тоже были сложности. Очень продолжительное время, условием поражения я считал отсутствие возможного хода (с учётом запретов из за короля под шахом, разумеется). В общем-то это не так уж и неверно, учитывая то, что в большинстве игр (в том числе и шахматных) так оно и есть. Но не в Шахматах! К счастью, в версии 1.2.7 я придумал как поправить ситуацию без ущерба производительности и теперь пат определяется корректно. Кстати, та же проверка на возможные угрозы используется и ботами (что сильно улучшает качество их игры), но всё равно, AI в Шахматах отвратительный (дебютная библиотека помогает незначительно). Тут уж грешить я могу только на самого себя. Всё таки, качественный шахматный AI — это не моё.
Всё это не отменяет того факта, что в шахматных играх есть на что заморочиться. Эта игра, конечно, в большой степени шутка (да и нет у меня уверенности, что удалось исправить все ошибки в её реализации), но в похожую по духу "Momentum Chess" вполне можно серьёзно поиграть. С самой трактовкой мата также возможны варианты. Например, король может быть общим или в игре может быть фигура, которая должна постоянно находиться под шахом (есть её, при этом, нельзя). В общем, шахматы — это весело.
Что ещё можно извлечь из этой игры? В Шахматах есть презабавнейший ход, при выполнении которого, двигаются две фигуры одновременно. Конечно, я говорю о рокировке. Для моего проекта эта концепция столь же важна как и составной ход, позаимствованный из шашечных игр. Существует масса игр в которых её можно применить. Dameo, Abalone, Ordo — во всех этих играх, фигуры двигаются одновременно. Но можно пойти ещё дальше!
Согласен, это довольно далеко от первоначальной концепции рокировки, но зачем себя ограничивать? Надо выжимать из заложенных концепций всё, по максимуму.
Автор: GlukKazan