Sono in fase di analisi per un gioco basato su browser che sto facendo e ho una domanda sulla programmazione del sistema economico. Userò un sistema semplificato per porre la mia domanda.
Ogni utente come oggetto GameState
, contenente tutto ciò che c'è da sapere sul suo gioco. Le strutture, ogni livello, l'esercito e quant'altro. Ancora più importante:
- La sua attuale quantità di denaro
- Il suo attuale reddito in denaro per ogni ciclo (un ciclo deve ancora essere definito, diciamo 1 secondo per l'esempio)
- Il suo attuale cap in denaro, l'importo massimo che può raggiungere.
Il mio problema si trova qui:
Come faccio ad aggiornare in modo pulito e carino i soldi di tutti al secondo con il minor numero di risorse possibile?
La mia conoscenza dei database e delle query è piuttosto limitata, in quanto non so davvero quanto tempo / risorse occorra perché una query di tale dimensione si verifichi. Ma temo che molto veloce, con una piccola quantità di giocatori, il database inizierà a rallentare a causa della quantità di richieste che farò ogni secondo aggiunte a tutte le richieste che effettivamente faranno quei giocatori.
In questo momento, ho alcune idee possibili che non funzionano:
Every second, loop on every single player and update his money by his current income.
Questo sembra abbastanza folle, poiché il ciclo potrebbe non essere completato dopo un secondo, il che farà sì che i giocatori inizino a rimanere indietro in termini di cicli di denaro.
Load the complete database in memory, update all the players money, rewrite complete database.
Questo sembra ancora più folle, con gli stessi svantaggi della prima soluzione + più problemi possibili dovuti al caricamento del database completo in memoria e molte cose potrebbero accadere mentre si verifica l'aggiornamento. Questo è un no-no.
Not updating the money. Only calculate it when someone needs it (an enemy player or the player itself). I would save the timestamp of latest update, compare with server-time
now
, and multiply by income and I should be good. Right?
Ogni volta che l'utente vuole vedere il suo conteggio del denaro, dovrebbe aggiornare la pagina per assicurarsi che sia un po 'aggiornato. Va bene per me, davvero.
Questa soluzione mi sembra il mio miglior scatto, ma ho davvero una brutta sensazione al riguardo. Non riesco a puntare il dito su di esso, ma sembra così incline agli errori.
Comunque, sono qui per vedere se qualcuno di voi ha già fatto qualcosa del genere, o ha un'idea da condividere. Non sono sicuro di come affrontarlo, anche se sembra piuttosto semplice su piccola scala.
Nota: userò C # per tutta la mia logica, il sito web sarà un sito Web basato su .NET (ancora lavorando su questo), ma probabilmente sai cosa intendo. La persistenza dei dati sarà probabilmente un database MySQL o qualcosa di simile, forse Entity Framework.