Рекомендуемый формат данных для описания правил шахмат

Попробуйте .find_next_sibling() :

data.find('span', class_='class1').find_next_sibling()

Используйте .text, если хотите извлечь текст из объекта NavigableString.

8
задан S.Lott 11 October 2008 в 17:53
поделиться

9 ответов

Я предложил бы Пролог к описанию правил.

2
ответ дан 5 December 2019 в 12:14
поделиться

Уже существует широко используемый формат, характерный для шахмат под названием Портативная Игровая Нотация. Существует также Умный Игровой Формат, который адаптируем ко многим различным играм.

2
ответ дан 5 December 2019 в 12:14
поделиться

Давайте думать. Мы описываем объекты (местоположения и части) с состояниями и поведениями. Мы должны отметить текущее состояние, и постоянно меняющийся набор допустимого состояния изменяется от текущего состояния.

Это программирует. Вы не хотите некоторого "метаязыка", который можно затем проанализировать на регулярном языке программирования. Просто используйте язык программирования.

Запустите с обычных определений классов на разговорном языке. Заставьте все это работать. Затем те определения классов являются определением шахмат.

Только за миниатюрными исключениями все языки программирования

  • Текстовый
  • Человекочитаемый
  • Обоснованно стандартизированный
  • Легко проанализированный их соответствующими компиляторами или интерпретаторами.

Просто выберите язык, и Вы сделаны. Так как это будет требовать времени для разработки нюансов, Вы, вероятно, будете более довольны динамическим языком как Python или Ruby, чем со статическим языком как Java или C#.

Если Вы хотите мобильность. Выберите портативный язык. Если Вы хотите язык, встроенный в "большее" приложение, то, выберите язык для своего "большего" приложения.


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

  1. Не имейте клиентов на нескольких языках. Выберите тот. Java, например, и палка с ним.

  2. Если у Вас должны быть клиенты на нескольких языках, то Вам нужен язык, который можно встроить во все три среды выполнения языка. У Вас есть два варианта.

    • Встройте интерпретатор. Например, Python, Tcl и JavaScript являются легкими интерпретаторами, которые можно назвать от C или программ C#. Этот подход работает на браузеры, он может работать на Вас. Java, через JNI может использовать это, также. Существуют механизмы правил BPEL, которыми можно попробовать это.

    • Породите интерпретатор как отдельный подпроцесс. Откройте именованный канал или сокет или что-то между Вашим приложением и Вашим порожденным интерпретатором. Ваш Java и клиенты C# могут говорить с подпроцессом Python. Ваш сервер Python может просто использовать этот код.

4
ответ дан 5 December 2019 в 12:14
поделиться

Это отвечает на последующий вопрос :-)

Я могу указать, что один из самых популярных шахматных серверов вокруг документов его протокол здесь (Предупреждение, ссылка FTP, и не поддерживает пассивный FTP), но только записать интерфейсы в него, не для любой другой цели. Вы могли начать писать клиенту для этого сервера как полезный опыт.

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

Тем не менее существует более базовый протокол, используемый для взаимодействия через интерфейс к шахматным механизмам, зарегистрированным здесь.

О, и между прочим: Представительство в совете директоров в Википедии

Что-либо вне представительства в совете директоров принадлежит самой программе, как многие уже указали.

2
ответ дан 5 December 2019 в 12:14
поделиться

Править: Чрезмерно многословный ответ удален.

Короткий ответ, запишите правила в Python. Используйте Iron Python для взаимодействия через интерфейс с этим клиенту C# и Jython для клиента Java.

2
ответ дан 5 December 2019 в 12:14
поделиться

Что я собрал от ответов до сих пор:

Для представлений данных шахматной доски:

См. статью Wikipedia о [представления шахматной доски] (http://en.wikipedia.org/wiki/Board_representation_ (шахматы)).

Для представлений данных шахматного хода:

См. статьи Wikipedia о Портативной Игровой Нотации и Алгебраической Шахматной Нотации

Поскольку шахматы управляют представлениями:

Это должно быть сделано с помощью языка программирования. Если Вы хотите уменьшить объем кода, записанный в случае, где правила будут реализованы больше чем на одном языке затем существует несколько опций

  1. Используйте язык, где встраиваемый интерпретатор существует для выходных языков (например, Lua, Python).
  2. Используйте Виртуальную машину, которую общие языки могут скомпилировать в (например, IronPython для C#, JPython для Java).
  3. Используйте второстепенного демона или подпроцесс для правил, с которыми могут связаться выходные языки.
  4. Повторно реализуйте алгоритмы правил на каждом выходном языке.

Хотя мне понравился бы декларативный синтаксис, который, возможно, был интерпретирован несколькими языками для осуществления правил шахмат, которые имеет мое исследование, приводят меня ни к какому вероятному кандидату. У меня есть подозрение, что Программирование На основе ограничений может быть возможным маршрутом, учитывая, что решатели существуют для многих языков, но я не уверен, что они действительно выполнили бы это требование. Спасибо за все внимание и возможно в будущем появится ответ.

2
ответ дан 5 December 2019 в 12:14
поделиться

Пускает слюни имеет современную человекочитаемую реализацию правил - https://www.jboss.org/drools/. У них есть способ, которым пользователи могут ввести свои правила в Excel. Намного больше пользователей может понять то, что находится в Excel, чем в других инструментах.

0
ответ дан 5 December 2019 в 12:14
поделиться

Я согласился бы с комментарием, оставленным ΤΖΩΤΖΙΟΥ, то есть просто позволить серверу сделать проверку и позволить клиентам отправить потенциальное перемещение. Если это не способ, которым Вы хотите взять дизайн, то просто пишут правила в Python, как предложено S. Lott и другие.

Это действительно не должно быть это трудно. Можно разломать правила на три главных категории:
- Правила, которые полагаются на состояние платы (рокировка, en passant, тянет, проверяют, поражение, проходя через проверку, является этим даже очередь этого игрока, и т.д.),
- Правила, которые относятся ко всем частям (не может занять тот же квадрат как другая часть Вашего собственного цвета, передвинув к квадрату w/фигуру противника == получение, не могут отъехать плата),
- Правила, которые относятся к каждой отдельной части. (пешки не могут переместиться назад, замки не могут переместиться по диагонали, и т.д.),

Каждое правило может быть реализовано как функция, и затем для каждого полуперемещения, законность определяется путем наблюдения, передает ли это все проверки.

Для каждого потенциального отправленного перемещения необходимо было бы просто проверить правила в следующем порядке:

  1. действительно ли предложенное перемещение потенциально допустимо? (правильная "форма" для части)
  2. это соответствует ограничениям платы? (заблокированная часть, был бы он отъезжать край),
  3. перемещение нарушает требования состояния? (я под контролем после этого перемещения? я перемещаюсь посредством проверки? это, en passant получают законный?)

Если все те в порядке, то сервер должен принять перемещение как легальный …

0
ответ дан 5 December 2019 в 12:14
поделиться

Для представления текущего состояния платы (включая рокирующиеся возможности и т.д.), можно использовать Нотацию Forsyth-Edwards, которая даст Вам короткое представление ASCII. например:

rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1

Была бы вводная позиция платы.

Затем для представления конкретного перемещения от положения Вы могли использовать числовую нотацию перемещения (как используется в шахматах корреспонденции), которые дают Вам короткое (4-5 цифр) представление перемещения на плате.

Для представления правил - я хотел бы знать меня. В настоящее время правила для моего шахматного механизма просто записаны в Python и вероятно не так декларативны, как я хотел бы.

0
ответ дан 5 December 2019 в 12:14
поделиться