Jak wdrożyć turowy silnik gry?

17

Wyobraźmy sobie grę taką jak Heroes of Might and Magic, Master of Orion lub twoją grę turową. Jaka jest logika gry podczas następnej tury? Czy są jakieś materiały lub książki do przeczytania na ten temat? Mówiąc konkretnie, wyobraźmy sobie pętlę gry:

void eventsHandler(); //something that responds to input
void gameLogic(); //something that decides whats going to be output on the screen
void render(); //this function outputs stuff on screen

Wszyscy są nazywani, powiedzmy 60 razy na sekundę. Ale jak wchodzi tu turowa? Mogę sobie wyobrazić, że w gameLogic () istnieje funkcja taka jak endTurn (), która pojawia się, gdy gracz kliknie ten przycisk, ale jak sobie z tym poradzić? Potrzebujesz wglądu.

Dvole
źródło

Odpowiedzi:

21

Turowa gra będzie zarządzana przez maszynę państwową . Zasadniczo ułożyłbyś szereg stanów, które mogą wystąpić w logicznej kolejności.

Na wysokim poziomie tura gracza może być początkiem nowego stanu, po którym następują wszystkie możliwe akcje dozwolone podczas tej tury.

Na przykład

  • Stan - zmień gracza
    • teraz jest tura gracza 1
  • Akcje dozwolone
    • atak
      • wybierz wroga do ataku
    • bronić
      • wybierz jednostkę do obrony
    • przenieś jednostkę
      • wybierz jednostkę, którą chcesz przenieść
      • sprawdź, czy ruch jest dozwolony
    • itp

Oczywiście to szybko się zwiększy, ponieważ naszkicowałem tylko bardzo ograniczony plan. Dobra znajomość możliwych stanów wcześnie oznacza, że ​​powinieneś być w dobrej sytuacji do wdrożenia. Bardzo stresuję się naszkicowaniu dokładnie tego, jak chcesz, aby gra działała ... dobra gra turowa wymaga dużo planowania IMO.

ciebie
źródło
Dość mój oldschoolowy projekt, który był 3-miesięczną próbą opracowania Final Fantasy Tactics :) Wykorzystuje maszynę stanową (właściwie kilka z nich), jak opisano powyżej. sourceforge.net/projects/bpfat
James
Hej, a co z Game Engine do strategii turowej? Czy mógłbyś coś doradzić? Czy silnik Unreal może się zmieścić?
Rantiev
Do każdej jego własności. Jeśli czujesz się komfortowo z silnikiem Unreal, nie ma w tym nic złego. Zależy tylko od tego, z której mechaniki chcesz skorzystać. Szybkie wyszukiwanie wskazuje, że istnieje obecnie zestaw narzędzi dla silnika Unreal, który pomaga tworzyć turowe gry strategiczne, choć nie jest on darmowy.
the_e
3

Niedawno zbudowałem turową grę strategiczną podobną do Master of Orion (obecnie jest to tylko jeden gracz, tryb wieloosobowy byłby nieco bardziej złożony, ale podobny pomysł), oto jak wygląda moja logika funkcji endTurn (w moim główna klasa Game Controller):

//for all computer players:
computerTakeTurn(player)

//for all players
moveShips(player)

//for all players
endTurn(player)//see this function below

//for all planets
planet.repairFleet()

//for all players
resolvePlanetaryConflicts(player)

//check to see if any players were destroyed or if the game is over
checkPlayerDestroyedAndGameOver()

Moja funkcja końcowej tury odtwarzacza wykona funkcje specyficzne dla tego gracza, na który nie ma wpływu kolejność zachodząca między graczami:

eatAndStarve()

generatePlayerResources()

buildPlayerPlanetImprovements()

growPlayerPlanetPopulation()

W stosownych przypadkach funkcje te zwracają komunikaty o stanie i / lub zdarzenia wyzwalające, dzięki czemu GUI może pokazać, co się stało podczas tury lub powiadomić gracza, że ​​komputer został zniszczony itp.

Matt Palmerlee
źródło
czy możesz podać kod źródłowy tylko po to, aby sprawdzić? Byłaby świetna pomoc. Tylko do celów edukacyjnych.
Dvole,
@Dvole Obecnie pracuję nad konwersją kodu z Silverlight / C # na JavaScript za pomocą tagu canvas HTML5. Kiedy skończę, planuję otwarte pozyskiwanie kodu i wtedy z przyjemnością zobaczysz dokładnie, jak zaimplementowałem tę funkcję. Jeśli pomoże ci to uzyskać kontekst, możesz zagrać w moją grę Space Space tutaj: Astriarch - Władca gwiazd
Matt Palmerlee
2
@Dvole Zajęło mi to trochę czasu, ale właśnie otworzyłem wersję Astriarch Silverlight. Jeśli nadal jesteś zainteresowany, możesz pobrać kod źródłowy z github tutaj: github.com/mpalmerlee/Astriarch/tree/Silverlight
Matt Palmerlee