Pull to refresh

Comments 9

Частным случаем этой ситуации является отказ игрока от выполнения всего составного хода (в некоторых играх, например в «Го», это допускается).

Неудачный пример. Отказаться от хода действительно можно, но только от просто хода, составных ходов в Го нет.
По описанию игр: вы не пробовали функциональные языки? Там хорошо описываются зависимости в моделях, для описания каскадного хода возможно подойдёт такая вещь как продолжения (continuations).
Ну тут пример скорее на тему, что можно отказаться не только от продолжения составного хода (если разрешён более короткий префикс), но и от всего хода (то есть выполнить 0 частичных ходов, если разрешён ход не содержащий действий). Ход в Го можно рассматривать как частный случай составного хода, содержащего от 0 до 1 частичных. Про continuations много думал конечно. Вначале вообще всё хотел на Схеме делать. Решил что слишком сложно (для меня во всяком случае).

Кстати говоря, метод toString у хода может быть нетривиален, и требовать рассмотрения легальности других ходов на доске. Пример из шахмат: пусть есть две белых ладьи, a4 и h4. Если одна из них идет на e4, то по правилам краткой нотации мы должны указать ее начальную вертикаль. Например, Rae4. Но! Если ладья h4 связана (например, на h8 стоит черная ладья, а на h1 — белый король), то неоднозначность исчезает! И мы должны тот же самый ход записывать просто как Re4.

Есть такой момент. Метод toString для ходов можно перегружать JS-плагинами. Правда я не рассматривал возможность взаимозависимости ходов (об этом стоит подумать). Также, в отличии от Zillions с его ZSG, я не использую текстовую нотацию для сериализации хода. Текстовое представление используется только для того, чтобы показать его человеку, ни для чего больше. По этой причине, нотация не обязательно должна включать в себя полное описание хода. Например в Го, нотация может включать только сброс камня на доску. Подразумевается, что взятие камней (если оно есть) будет выполнено в соответствии с правилами игры. Сам ход (JS-объект) будет включать в себя эти действия, но нотация хода их описывать не обязана.
Если только для демонстрации, то вопрос легко снимается полной нотацией, конечно. Мне-то краткая понадобилась, когда для машинного обучения начал читать базы чужих партий в формате PGN.
Вообще тема нотации достаточно больная. PGN еще более менее (хотя короткая нотация хода безусловно засада), но для Го, например, хочется сделать поддержку SGF. Он очень широко применяется, поскольку позволяет хранить разбор партий (дерево, а не просто последовательность ходов). У шашек своя нотация, у Сёги своя. Кто во что горазд. А поскольку хочется универсальности, надо и для манкал что-то вменяемое придумать. И это я ещё не рассматриваю карточные игры и домино! Сложная в общем тема.
Всё таки, с шахматной, а заодно и с шашечной нотацией пришлось разбираться. Исключительно для того, чтобы добавить в проект дебюты. Разумеется, для интерпретации ходов потребовалось состояние доски. Но всё это, право же, меркнет, по сравнению с нотацией «Китайских шахмат».
Добрый день, а как вы в целом позиционируете проект? Java+JS фреймворк для создания досочных логических игр, с MVC архитектурой и с поддержкой DSL-описаний от Zillion of Games?
Пока скорее прототип, но в целом да, именно так. Причём без Java. На Java написан только конвертер ZRF файлов в JS, без него вполне можно обходиться. И пока это только маленькая часть фреймворка, фактически, только модель.
Sign up to leave a comment.

Articles