#javascript #java #python #constraint-programming #design-decisions
#javascript #питон #java #программирование ограничений
Вопрос:
Я хочу реализовать карточную игру. Я знаю о программировании ограничений. Но я думаю, что он используется для поиска «решений» проблем. Особенно, когда существует множество возможных решений.
В моем случае в игре много правил, но не так много. Решением было бы возможное действие игрока (с результатом, я думаю, это другой вопрос). Другие действия просто не будут разрешены.
Например:
Для одного раунда с одной игрой
- правило 1. Старшая карта (номер) выигрывает другую карту
- правило 2: Нижняя лицевая карта выигрывает другую
Для одного раунда с несколькими играми
- правило 3: если игрок А предъявляет пип-карту, а игрок В предъявляет лицевую карту, это раунд на ничью и требует еще одной игры.
…
Это были основные правила, и их стало больше. Я лучше разбираюсь в Python, JavaScript или Java.
Я действительно не хочу решать эту проблему с помощью множества встроенных условий if-else.
Я изучал теорию языка, и это, кажется, хорошо подходит. Если вы не знаете, о чем идет речь, вы можете задать возможные «слова» на языке, основанном на выражениях (например, регулярных выражениях).
Например:
(aaa(b) )*
Урожайность
aaa,aaab,aaabb,aaa,aaabbbb,...
Думая об этих терминах как о возможных действиях, можно было бы реализовать игру таким образом. Но я бы реализовал такой синтаксический анализатор или сопоставление строки с действиями. Все это возможно и не так уж сложно. Но существуют ли какие-либо возможные (возможно, более простые) реализации этого способа программирования?
Я наткнулся на Or-tools от Google, но это решатель ограничений. Это может сработать, но я не уверен, я потрачу на это больше времени.
Комментарии:
1. Трудно ответить, не зная всей формализованной структуры игры со всеми правилами. Я бы не рекомендовал использовать тот формальный языковой подход, который вы имеете в виду. Вы бы потратили слишком много времени на создание синтаксического анализатора и интеграцию его в игровой движок. Я бы начал с простого подхода к конечному автомату. Формализуйте игровые действия и структуры данных, а затем посмотрите, как правила могут быть применены наилучшим образом.
2. На данном этапе нет игрового движка, все это на бумаге. Поэтому я открыт для самых простых возможностей. Вы имеете в виду какой-нибудь пример где-нибудь с использованием конечных автоматов для какой-нибудь простой игры? Большое спасибо!
3. Итак, ваш вопрос о том, как лучше всего сгенерировать список всех допустимых ходов в любом заданном состоянии? И подобно тому, как сказал @timotgl, для получения любого лучшего совета вам нужно будет более конкретно рассказать о том, как работает ваша игра и что именно вам нужно 🙂
4. Я попытаюсь точно сформулировать, какие возможны состояния и действия, и попытаюсь перейти к некоторому программированию ограничений или реализации, подобной конечному автомату. потому что на данном этапе я не уверен, является ли мое представление о наборе правил однозначным. вот черновик github.com/bacloud14/Outscore-card-game если вы не возражаете.