Piszę komputerową wersję gry Dominion . To turowa gra karciana, w której karty akcji, karty skarbów i karty punktów zwycięstwa są gromadzone w osobistej talii gracza. Struktura klas jest dość dobrze rozwinięta i zaczynam projektować logikę gry. Używam Pythona i mogę później dodać prosty GUI z pygame.
Sekwencją tur graczy jest bardzo prosta machina stanowa. Tury przechodzą zgodnie z ruchem wskazówek zegara, a gracz nie może wyjść z gry przed jej zakończeniem. Rozgrywka jednej tury jest także maszyną państwową; ogólnie gracze przechodzą przez „fazę akcji”, „fazę zakupu” i „fazę czyszczenia” (w tej kolejności). Na podstawie odpowiedzi na pytanie Jak wdrożyć turowy silnik gry? , automat stanowy jest standardową techniką w tej sytuacji.
Mój problem polega na tym, że podczas fazy akcji gracza może użyć karty akcji, która wywołuje skutki uboczne na sobie lub na jednym lub kilku innych graczach. Na przykład jedna karta akcji pozwala graczowi wykonać drugą turę natychmiast po zakończeniu bieżącej tury. Kolejna karta akcji powoduje, że wszyscy inni gracze odrzucają dwie karty ze swoich rąk. Jeszcze jedna karta akcji nic nie robi w bieżącej turze, ale pozwala graczowi dobrać dodatkowe karty w następnej turze. Aby jeszcze bardziej skomplikować sprawę, często pojawiają się nowe rozszerzenia do gry, które dodają nowe karty. Wydaje mi się, że zakodowanie wyników każdej karty akcji w maszynie stanu gry byłoby zarówno brzydkie, jak i niemożliwe do dostosowania. Odpowiedź na turową pętlę strategiczną nie wchodzi w poziom szczegółowości, który dotyczy projektów w celu rozwiązania tego problemu.
Jakiego modelu programowania powinienem użyć, aby uwzględnić fakt, że ogólny wzorzec wykonywania zakrętów może być modyfikowany przez działania, które mają miejsce w trakcie tury? Czy obiekt gry powinien śledzić efekty każdej karty akcji? Lub, jeśli karty powinny implementować własne efekty (np. Poprzez implementację interfejsu), jaka konfiguracja jest wymagana, aby zapewnić im wystarczającą moc? Wymyśliłem kilka rozwiązań tego problemu, ale zastanawiam się, czy istnieje standardowy sposób jego rozwiązania. W szczególności chciałbym wiedzieć, jaki obiekt / klasa / cokolwiek odpowiada za śledzenie działań, które każdy gracz musi wykonać w wyniku zagrania karty akcji, a także w jaki sposób odnosi się to do tymczasowych zmian w normalnej sekwencji maszyna stanu kolei.