- PVSM.RU - https://www.pvsm.ru -

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

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

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

Шахматы

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

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


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

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


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

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

Строго говоря, не во всех шахматных играх дело обстоит таким образом

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

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


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

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

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

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


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

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

Автор: GlukKazan

Источник [39]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/shahmaty/335842

Ссылки в тексте:

[1] статье: https://habr.com/ru/post/459456/

[2] проекта: https://glukkazan.github.io/

[3] исправлять: https://www.facebook.com/groups/228184761151081/permalink/466609280641960/

[4] Шахматы: https://ru.wikipedia.org/wiki/%D0%A8%D0%B0%D1%85%D0%BC%D0%B0%D1%82%D1%8B

[5] пешку: https://ru.wikipedia.org/wiki/%D0%9F%D0%B5%D1%88%D0%BA%D0%B0

[6] взятия на проходе: https://ru.wikipedia.org/wiki/%D0%92%D0%B7%D1%8F%D1%82%D0%B8%D0%B5_%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D1%85%D0%BE%D0%B4%D0%B5

[7] традиционных шахматных игр: https://glukkazan.github.io/checkmate/chess.svg

[8] играх: https://glukkazan.github.io/checkmate/demi-chess.htm

[9] такие: https://glukkazan.github.io/checkmate/balbo-chess.htm

[10] Dablot: https://glukkazan.github.io/checkers-like/dablot-prejjesne.htm

[11] Damone: https://glukkazan.github.io/checkers/italian-damone.htm

[12] Altai Shatra: https://glukkazan.github.io/checkers/altai-shatra.htm

[13] Шашматах: https://glukkazan.github.io/checkers/cheskers.htm

[14] Чатуранга: https://glukkazan.github.io/checkmate/chaturanga.htm

[15] Шатрандже: https://glukkazan.github.io/checkmate/shatranj.htm

[16] шаха: https://ru.wikipedia.org/wiki/%D0%A8%D0%B0%D1%85_(%D1%88%D0%B0%D1%85%D0%BC%D0%B0%D1%82%D1%8B)

[17] мата: https://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%82_(%D1%88%D0%B0%D1%85%D0%BC%D0%B0%D1%82%D1%8B)

[18] действительно: https://glukkazan.github.io/shogi/chu-shogi.htm

[19] больших: https://glukkazan.github.io/shogi/tenjiku-shogi-board.htm

[20] шахматных: https://glukkazan.github.io/shogi/makadaidaishogi-board.htm

[21] игр: https://glukkazan.github.io/shogi/ko-shogi-kanji-board.htm

[22] Ko Shogi: https://en.wikipedia.org/wiki/Ko_shogi#Game_end

[23] правила превращения: https://en.wikipedia.org/wiki/Ko_shogi#Promotion

[24] Yonin Shogi: https://en.wikipedia.org/wiki/Yonin_shogi

[25] правило сброса: https://ru.wikipedia.org/wiki/%D0%A1%D1%91%D0%B3%D0%B8#%D0%A5%D0%BE%D0%B4%D1%8B

[26] Белорусских шахматах: https://glukkazan.github.io/checkmate/belarusian-chess.htm

[27] мат королём: http://www.gambiter.ru/checkers/item/276-chess-checkers.html

[28] дублировать: https://github.com/GlukKazan/Dagaz/blob/master/src/debug/games/chess/chess-invariant.js

[29] не в Шахматах: https://ru.wikipedia.org/wiki/%D0%9F%D0%B0%D1%82

[30] Шахматах: https://glukkazan.github.io/checkmate/chess.htm

[31] дебютная библиотека: https://github.com/GlukKazan/Dagaz/blob/master/src/debug/games/chess/data/chess.txt

[32] Momentum Chess: https://glukkazan.github.io/checkmate/momentum-chess.htm

[33] общим: https://glukkazan.github.io/checkmate/neutral-king.htm

[34] должна: https://glukkazan.github.io/checkmate/anti-king.htm

[35] рокировке: https://ru.wikipedia.org/wiki/%D0%A0%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0

[36] Dameo: https://glukkazan.github.io/checkers/dameo.htm

[37] Abalone: https://glukkazan.github.io/elimination/abalone.htm

[38] Ordo: https://glukkazan.github.io/breakthrough/ordo.htm

[39] Источник: https://habr.com/ru/post/472908/?utm_campaign=472908&utm_source=habrahabr&utm_medium=rss