Я бы предпочел инкапсулировать поведение карты как своего собственного класса, легко допуская карты, которые имеют несколько вариантов поведения (например, выбор).Это также позволило бы вам написать параметризованное поведение, смешать и сопоставить его с карточками.
Таким образом, карточки будут содержать такие вещи, как стоимость карточки, когда она может быть сыграна, ее название и т. Д. Она также будет содержатьсписок поведений, которые может выполнять карта.
Поведения ИИ рассматриваются как часть карт.Еще одно свойство, которое имеют карты, которое можно взвесить вместе со стоимостью.
Актер ИИ, который на самом деле использует поведение карты, должно иметь возможность интерпретировать поведение, поэтому класс поведенияможет понадобиться несколько подсказок для ИИ, чтобы понять это, но никакой реальной логики ИИ там не должно быть.Если ИИ нужно определенное поведение для определенных карт, запишите такие вещи в ИИ-актера, а не в поведение карты.
Если ИИ-актеру необходимо знать, например, что это поведение имеет ожидаемую выплату победных очков.2 очка / раунд, это может быть частью поведения, которое служит подсказкой для ИИ при выборе карт для покупки / игры.
Но на самом деле я не знаю, как вы подходитеваш дизайн AI актера, так что, возможно, это не имеет смысла.Но я думаю, что может помочь представление о поведении как о свойстве карт, а не как о основной части самих карт.
Это дает вам преимущество инкапсуляции действий по умолчанию для актеров ИИ (то, что актеры могут делать безтакже требуются карты) как поведение, так что вы можете сравнивать эти действия с действиями карты без какого-либо специального кода.