Come implementare il motore di gioco a turni?


17

Immaginiamo giochi come Heroes of Might and Magic, o Master of Orion, o il tuo gioco preferito a turni. Qual è la logica di gioco alla base del prossimo turno? Ci sono materiali o libri da leggere sull'argomento? Per essere precisi, immaginiamo il loop di gioco:

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

Tutti quelli che vengono chiamati dicono 60 volte al secondo. Ma come entra a turni qui? Potrei immaginare che in gameLogic () esista una funzione come endTurn () che si verifica quando un giocatore fa clic su quel pulsante, ma come gestisco tutto? Hai bisogno di approfondimenti.

Risposte:


21

Un gioco a turni sarà governato da una macchina statale . Fondamentalmente, si dovrebbe disporre una serie di stati che possono verificarsi in un ordine logico.

Ad alto livello, il turno di un giocatore potrebbe essere l'inizio di un nuovo stato, seguito da tutte le possibili azioni consentite durante quel turno.

Per esempio

  • Stato - cambia giocatore
    • ora è il turno del giocatore 1
  • Azioni consentite
    • attacco
      • seleziona il nemico da attaccare
    • difendere
      • seleziona l'unità da difendere
    • spostare unità
      • seleziona l'unità da spostare
      • verificare che sia consentito il movimento
    • eccetera

Ovviamente questo andrà a gonfie vele abbastanza rapidamente, dato che ho solo delineato un piano estremamente limitato. Avere una buona conoscenza dei possibili stati all'inizio significa che dovresti essere in una buona posizione per implementare. Sottolineerei molto nel disegnare esattamente come vuoi che il gioco funzioni ... un buon gioco a turni richiede molta pianificazione dell'IMO.


Un mio progetto scolastico piuttosto vecchio che è stato un tentativo di sviluppo di 3 mesi presso Final Fantasy Tactics :) Utilizza una macchina statale (alcuni dei quali in realtà) come descritto sopra. sourceforge.net/projects/bpfat
James

Ehi, per quanto riguarda Game Engine per la strategia a turni? Potresti consigliare qualcosa? Potrebbe essere il motore Unreal potrebbe adattarsi?
Rantiev,

A ciascuno il suo. Se ti senti a tuo agio con il motore Unreal non c'è niente di sbagliato in questo. Dipende solo da quali meccanici vuoi trarre vantaggio. Una rapida ricerca indica che esiste un toolkit attuale per il motore Unreal per aiutare a creare giochi di strategia a turni, anche se non è gratuito.
the_e

3

Di recente ho creato un gioco di strategia a turni simile a Master of Orion (al momento è solo giocatore singolo, il multigiocatore sarebbe un po 'più complesso, ma un'idea simile), ecco come appare la mia logica della funzione endTurn (nella mia classe principale del controller di gioco):

//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()

La mia funzione di fine turno del giocatore eseguirà funzioni specifiche per quel giocatore che non è influenzato dall'ordine che ha luogo tra i giocatori:

eatAndStarve()

generatePlayerResources()

buildPlayerPlanetImprovements()

growPlayerPlanetPopulation()

Se del caso, queste funzioni restituiscono messaggi di stato e / o attivano eventi in modo che la GUI possa mostrare cosa è successo durante il turno o far sapere al giocatore che un computer è stato distrutto, ecc ...


potresti fornire il codice sorgente solo per dare un'occhiata? Sarebbe di grande aiuto. Solo a scopo educativo.
Dvole,

@Dvole Attualmente sto lavorando per convertire il codice da Silverlight / C # a JavaScript utilizzando il tag canvas HTML5. Una volta terminato, ho intenzione di aprire il codice di approvvigionamento e in quel momento sei più che benvenuto nel vedere esattamente come ho implementato questa funzione. Se aiuta a ottenere un contesto, puoi giocare al mio gioco di strategia spaziale qui: Astriarch - Ruler of the Stars
Matt Palmerlee

2
@Dvole Mi ci è voluto un po 'di tempo, ma ho appena aperto la versione Silverlight di Astriarch. Se sei ancora interessato, puoi scaricare il codice sorgente da github qui: github.com/mpalmerlee/Astriarch/tree/Silverlight
Matt Palmerlee
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.