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


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

Шахматы


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


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


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

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

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


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

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

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


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

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


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

Комментарии (7)


  1. XVadim
    07.11.2019 15:35
    +3

    Как всегда интересно и познавательно.


  1. valemak
    07.11.2019 15:47
    +2

    Особенно мне понравились гравитационные шахматы, скриншот которых приведён в тексте (вот ссылка на них, если кому интересно сыграть).

    Когда я в них наигрался от души, то какое-то время ощущал интересный психологический эффект. При программировании казалось, что символы напечатанного в Notepad++ кода под влиянием притяжения вот-вот посыпятся в низ экрана.


    1. GlukKazan Автор
      07.11.2019 15:50
      +1

      Мне Momentum Chess больше понравились. Более предсказуемо и всё равно очень необычно. Кстати, картинки в статье — это ссылки на игры.


      1. valemak
        07.11.2019 16:01
        +1

        Для «скользких шахмат» (так я называю Momentum Chess), ИМХО, гораздо сложнее понять как вообще там можно выиграть. Мат там попробуй ещё поставь.

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


        1. GlukKazan Автор
          07.11.2019 16:09
          +1

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


    1. Deosis
      08.11.2019 08:16
      +1

      Вот только бот какой-то слабоватый там.
      Сначала сходил конем, а потом постоянно пытался ходить ладьей вверх.


      1. GlukKazan Автор
        08.11.2019 08:41
        +1

        Он везде слабоватый. Как я уже неоднократно писал, боты это не моё.