Sto costruendo un gioco di strategia in cui più unità (5 - 20) si combattono tra loro.
Ho una logica di gioco che calcola tutte le azioni eseguite su ogni turno e la mando al motore di gioco per animare.
Queste sono le azioni possibili:
- esegui un attacco
- esegui i danni provocati
- esegui lo spostamento
- mostra la mancanza
- esegui la rimozione di te stesso (morire)
Come posso trovare quali azioni posso eseguire in parallelo e quali no?
Queste sono le limitazioni che ho:
- le unità possono eseguire solo un'azione alla volta.
- ogni azione può avere tempi diversi, anche se è la stessa azione
- L'unità può eseguire l'azione
attack
, solo se l'altra unità esegue l'azionetaking damage
oremoving your self
- dopo che l'unità ha eseguito l'azione:
removing your self
, non può eseguire altre azioni.
Modifica Queste sono le situazioni che potrebbero accadere:
- una unità viene attaccata da più unità contemporaneamente
- una unità subisce danno mentre nessuna unità lo sta attaccando
- tutte le unità si muovono contemporaneamente
- tutte le unità eseguono miss allo stesso tempo
Questa domanda non riguarda il game design, ma una soluzione programmatica su come posso trovare le piastrelle parallele di azioni?
Rispondi a FrustratedWithFormsDesign , answer
Ciao amico, l'hai portato in una direzione completamente diversa, quindi voglio risponderti qui per chiarire le cose.
Questa domanda non riguarda come far muovere le unità in parallelo. Inoltre, non penso che il tuo suggerimento sia una buona idea.
Quello che hai fatto con il tuo gioco è in realtà, la giusta direzione. Sarà anche saggio lavorare su MVC e separare la vista e le logiche di gioco.
Quindi per implementare un motore di gioco userei un thread di gioco che invierà gli eventi tick, in base alla frequenza dei fotogrammi scelta. Solo le viste dovrebbero essere in ascolto per quel thread e implementare la logica di visualizzazione basata su di esso.
Nel mio gioco sto usando il framework Adobe Air con alcuni supporti Java e Objective-C nativi per i cellulari, ma è Air principalmente. Quindi tutte le mie animazioni stanno ascoltando onEnterFrameEvent, questo dovrebbe essere spuntato nel tuo esempio e implementare la loro logica di animazione.
La mia logica di gioco sta usando un lavoratore diverso (le implementazioni dei thread di Air, è più come un processo) per generare tutte le azioni in particolari turni. E poi lo sbiadisce al motore di gioco per animare. Non ti chiedo come implementare le animazioni, è gestito da Air apis e non viene calcolato qui.
Pensa a questi problemi:
unit a attacks unit b while unit b attacks unit c, while unit c is moving.
Questo si risolverà con un pasticcio sullo schermo.
Voglio che sia:
unit a attack unit b, unit b waits for a to finish attacking him to start attacking unit c, while unit c is moving. After a finish attacking unit b, unit b attacks unit c.
Quindi l'input delle azioni che ho ricevuto è stato:
- Un attacco
- B prendi danno
- Attacco B
- C prendi danno
- C sposta
E l'output era di due serie di animazioni
- Un attacco, C sposta, B subisce danno
- B attacco, C subisce danni
Questo è stato un esempio molto semplice di come vorrei parallelizzare le mie azioni. Spero che ora sia più chiaro.