[*] LAN (длинная алгебраическая нотация), например, "e2e4" < /li>
san (стандартная алгебраическая нотация), например, "NF3" < /li>
UCI, сокращенная алгебраическая < /li>
Пользовательский внутренний формат < /li>
< /ul>
Каждое обозначение выражает различное количество информации. Например, SAN включает в себя неоднозначные индикаторы, продвижение и проверку/партнеры, которые зависят от государства Правления. Некоторые языки выражают концепции, которые другие опускают или выражают по -разному. Аналогично, каждая шахматная нотация представляет собой движение по-разному, иногда встраивая больший контекст или требует специфической для позиции интерпретации.
Я думаю, что моя проблема похожа на управление несколькими системами перевода без ухода от последовательного центрального значения. Он сознательно содержится свободным от бизнес -логики, такой как законность, чек или приятель.
Код: Выделить всё
pieceMoved
[*] Piece, захваченная в пункте назначения (
Код: Выделить всё
pieceCaptured< /code>) < /li>
Необязательная часть продвижения < /li>
Флаги для особых движений (например, Castling, En Passant) < /li>
< /ul>
a move < /code всегда строится из состояния доски и координат. во время создания (даже если пустовать). < /p>
В моей кодовой базе я различаю два режима создания: < /p>
[b] vall move < /strong> построен из координат и базовой платы (list[list[str]]
It reflects a mechanical displacement from one square to another.
It can produce incoherent or illegal moves, but still records accurate pieceMoved and pieceCaptured from the given layout.
[*]A valid Move[/b] is created Разрешив строку локальной сети против полной игры < /code> (включая поворот, права, en passant и т. Д.).
это гарантирует законность и полноту в соответствии с правилами шахмат. />
Код: Выделить всё
LANtoRawMove(lan: str, board: list[list[str]]) -> Move
< /ul>
Эти функции в основном используются для файлов анализа и настройки тестов, а не логики ядра двигателя.raw_fixt< /code>:
принимает список строк локальной сети и снимка платы.
использует Lantorawmove < /code> для генерации перемещения, применяет их последовательно и возвращает полученную плату и список движений. < /p>
< /li>
valid_fixt< /code>:
To Sist of Strings Lan и GameState < /code>.
использует Lantovalidmove < /code>, применяет движения последовательно и возвращает полученное состояние и список действительных движений. /> < /ul>
Я подумал о том, чтобы превратить эти приспособления в утилиты общего назначения (например, raw_generate () < /code>), чтобы использовать их внешние тесты, но это не влияет на основные проблемы. />
Например, могу ли я протестировать lantorawmove < /code>, используя RAW_FIXT < /code>, хотя RAW_FIXT < /code> называет его внутри? Настройка? Дайте мне знать, если необходимо какое -либо разъяснение.
Подробнее здесь: https://stackoverflow.com/questions/796 ... e-of-truth