Generalizzazione di sistemi basati su fasi per giochi di carte e giochi da tavolo

1

In un esercizio di futilità sto cercando di astrarre e generalizzare un framework in cui costruire qualsiasi sistema basato su turni / regole. Ho avuto un vantaggio, ma dopo aver decompilato HearthStone, penso che potrebbe avere una complessità più alta di quanto mi aspettassi, almeno per l'astrazione. Quindi, vorrei una revisione tra pari dell'approccio che sto prendendo.

Per i locali:

  • Nessun collegamento UI o IO per mantenere il disaccoppiamento e la testabilità. tu dovrebbe essere in grado di unire un gioco completo.

  • Sistema componente-entità, migliore gestione della memoria, orientato ai dati, deterministica.

  • Automa di pushdown centralizzato per il controllo dello stato.

Il cuore dell'architettura è l'interfaccia / trait IPhaseSystem . Ha un unico metodo, pushSystem() , che restituisce un array di IPhaseSystems .

Da quell'interfaccia più un sistema di elaborazione delle entità componiamo una classe astratta AbsGameSystem , che richiede un metodo process() . I sistemi ECS danno già la possibilità di sovrascrivere i metodi pre e post, ma non sono obbligatori.

Esiste un'interfaccia IVictory con un singolo metodo isVictory() .

L'inizializzazione del mondo richiede un singolo AbsGameSystem e un IVictory .

Il mio mondo di gioco in ogni passaggio guidato da eventi elabora il sistema in cima all'automa di pushdown, quindi procede a premere tutti gli stati restituiti da pushSystem() .

Nella mia mente, da questa semplice configurazione e un modello di comunicazione per le chiamate UI / IO, come sarebbe un Event Bus, dovrebbe essere sufficiente esprimere qualsiasi tipo di gioco da tavolo simile a Catan, Magic: The Gathering, Dominion o Stratego.

    
posta MLProgrammer-CiM 17.11.2014 - 00:39
fonte

0 risposte