Я пишу комп’ютерну версію гри Dominion . Це покрокова карткова гра, де картки дій, картки скарбів та карт перемоги накопичуються в особистій колоді гравця. У мене структура класу досить розвинена, і я починаю розробляти логіку гри. Я використовую python, і я можу пізніше додати простий GUI з pygame.
Послідовність повороту гравців регулює дуже проста державна машина. Повороти проходять за годинниковою стрілкою, і гравець не може вийти з гри до її закінчення. Гра в один поворот - це також державна машина; загалом гравці проходять через "фазу дій", "фазу купівлі" та "фазу очищення" (у такому порядку). На підставі відповіді на питання Як реалізувати покрокову ігрову систему? , державна машина - це стандартна методика для даної ситуації.
Моя проблема полягає в тому, що під час фази дії гравця вона може використовувати карту дій, яка має побічні ефекти, як на себе, так і на одного або декількох інших гравців. Наприклад, одна картка дій дозволяє гравцеві зробити другий хід відразу після завершення поточного ходу. Інша карта дій змушує всіх інших гравців викинути дві картки з рук. Ще одна картка дій нічого не робить для поточного ходу, але дозволяє гравцеві намалювати зайві картки на наступному кроці. Щоб зробити речі ще складнішими, в гру часто з’являються нові розширення, які додають нові карти. Мені здається, що жорстке кодування результатів кожної картки дій в державній машині гри було б і потворним, і непридатним. Відповідь на покрокову стратегію циклу не вникає в рівень деталізації, який стосується конструкцій для вирішення цієї проблеми.
Яку модель програмування я повинен використовувати, щоб охопити той факт, що загальну схему поворотів можна змінювати діями, що відбуваються в межах черги? Чи повинен ігровий об’єкт відслідковувати ефекти кожної картки дій? Або, якщо картки повинні реалізовувати власні ефекти (наприклад, реалізуючи інтерфейс), яка установка потрібна, щоб дати їм достатню потужність? Я придумав декілька рішень цієї проблеми, але мені цікаво, чи існує стандартний спосіб її вирішення. Зокрема, я хотів би дізнатися, який об’єкт / клас / все, що відповідає за відстеження дій, які повинен виконувати кожен гравець внаслідок відтворення картки дій, а також, як це стосується тимчасових змін у звичайній послідовності машина повороту.