Dla zabawy próbuję napisać jedną z ulubionych gier planszowych mojego syna jako oprogramowanie. W końcu spodziewam się zbudowania na nim interfejsu użytkownika WPF, ale teraz buduję maszynę, która modeluje gry i jej zasady.
Robiąc to, ciągle widzę problemy, które moim zdaniem są wspólne dla wielu gier planszowych, a być może inni rozwiązali je już lepiej niż ja.
(Zauważ, że sztuczna inteligencja do grania w grę i wzorce wokół wysokiej wydajności nie są dla mnie interesujące).
Jak dotąd moje wzorce to:
Kilka niezmiennych typów reprezentujących elementy w pudełku gry, np. Kości, warcaby, karty, plansza, pola na planszy, pieniądze itp.
Obiekt dla każdego gracza, który zawiera zasoby gracza (np. Pieniądze, punkty), jego nazwę itp.
Obiekt, który reprezentuje stan gry: gracze, kto jest w kolejce, układ elementów na planszy itp.
Maszyna stanowa zarządzająca sekwencją tur. Na przykład wiele gier ma małą przedmeczę, w której każdy gracz rzuca, aby zobaczyć, kto pierwszy; to jest stan początkowy. Kiedy zaczyna się tura gracza, najpierw rzuca, potem się porusza, potem musi tańczyć w miejscu, potem inni gracze odgadują, jakiego rodzaju kurczaków jest, a potem otrzymują punkty.
Czy jest jakiś stan wiedzy, z którego mogę skorzystać?
EDYCJA: Ostatnio zdałem sobie sprawę, że stan gry można podzielić na dwie kategorie:
Stan artefaktów w grze . „Mam 10 dolarów” lub „Moja lewa ręka jest na niebiesko”.
Stan sekwencji gry . „Dwa razy wyrzuciłem dublety; za następnym trafiam do więzienia”. Maszyna stanów może mieć tutaj sens.
EDYCJA: To, czego naprawdę szukam, to najlepszy sposób na zaimplementowanie gier turowych dla wielu graczy, takich jak Chess, Scrabble lub Monopoly. Jestem pewien, że mógłbym stworzyć taką grę, po prostu pracując nad nią od początku do końca, ale, podobnie jak inne wzorce projektowe, prawdopodobnie istnieją sposoby, aby wszystko przebiegało znacznie płynniej, które nie są oczywiste bez dokładnego zbadania. Na to mam nadzieję.