Sto costruendo un gioco basato su PHP e MySQL. C'è una modalità giocatore-vs-giocatore, ma ho pensato che dovrei aggiungere anche una modalità giocatore-computer, dal momento che i giocatori potrebbero non essere sempre online, specialmente all'inizio.
È un tipo di combattimento in cui i giocatori hanno fino a due personaggi e possono combattere a turno.
Ho deciso di salvare le unità del computer sul filesystem anziché in un database. Ci sono diversi campi di mostri che i giocatori possono attaccare. Se più giocatori attaccano lo stesso campo, vengono create istanze separate.
Tuttavia, quello su cui ho dei dubbi è se dovrei salvare le informazioni complete sull'unità nell'istanza o solo le proprietà che possono cambiare nel corso della battaglia. Lasciatemi fare un esempio.
Ecco la classe dell'unità
class Unit {
// Generic
protected $id = null;
public function getID(){ return $this->id; }
public $owner = null;
public $name;
// Vitality
public $HP = 100;
public $HPmax = 100;
public $energy = 100;
public $NRGmax = 100;
// Physical
public $strength = 0;
public $endurance = 0;
// Psychical
public $knowledge = 0;
public $wisdom = 0;
// ...
}
Ed ecco come appare la struttura del file
/PvC/prototypes/
/PvC/clones/
nei prototipi vengono salvate le impostazioni preimpostate delle singole unità, mentre nei cloni vengono salvate le istanze in cui i giocatori stanno combattendo al momento. Come funziona al momento è in cloni. Io risparmio serialize($computer->units)
che inserisce la completa informazione completa dell'unità. La mia preoccupazione è che alcune proprietà, come il nome, il proprietario e gli altri, non cambieranno mai durante la battaglia, quindi riscriverle ogni volta è praticamente inutile. E il file di istanza viene riscritto abbastanza spesso, direi, con quasi ogni singola richiesta durante la battaglia.
Per evitare la sovrascrittura continua, potrei serializzare solo le proprietà che possono cambiare durante la battaglia e quindi caricare l'unità dal prototipo così com'è, quindi sovrascriverla con le proprietà del clone. Tuttavia, il problema è che sto caricando due file anziché uno, quindi caricando un gruppo di dati dal primo file che non userò e che verrà sovrascritto.
So che non è davvero qualcosa che potrebbe importare, dato che le dimensioni del file raramente superano i 10kb. Cosa ne pensi su questo?