2009-10-30 10 views
7

Sto avviando di nuovo la programmazione di gioco. 10 anni fa stavo creando giochi in qbasic e non ho ancora programmato alcun gioco, quindi sono piuttosto arrugginito. Ho programmato tutto il tempo però, sono uno sviluppatore web/DBA/admin ora. Ho diverse domande, ma ho intenzione di limitarlo a uno per post.Progettare lo spazio di archiviazione per un mondo di gioco molto ampio

Il gioco a cui sto lavorando sarà un mondo grande, molto grande. Sarà un po 'come lo URW, ma un mondo ancora più grande e più simile a un' RPG '.

Quello che ho cercato di decidere, è il modo migliore per impaginare la mappa, salvarla e accedervi. Ho pensato all'idea di usare sqlite per archiviare i dati. Potrei quindi utilizzare anche sqlite db come file di salvataggio per il gioco, semplice e piacevole.

Qualcuno ha qualche consiglio su come dovrei fare questo o idee per altri metodi di archiviazione?

Qui ci sono i requisiti per il mio gioco:

  • ho bisogno di pieno accesso casuale da individuare nel mondo di gioco (la NPC, mostri, animali saranno tutti attivi per tutto il tempo).
  • Sto usando Stackless Python 3.1, le opzioni sono abbastanza limitate a meno che non faccia un sacco di lavoro.
  • Deve essere in grado di gestire un mondo molto grande.
  • Il supporto alla concorrenza sarebbe un vantaggio, ma non credo che ne avrò bisogno.

risposta

11

Non scherzare con i database relazionali a meno che non si sia costretti a usarli da fattori esterni.

Vedere Python pickle, shelve.

Shelve è veloce e si adatta bene. Elimina la conversione disordinata tra la rappresentazione Python e non Python.


Modifica.

Consiglio più importante. Non impantanarsi nelle scelte tecnologiche. Ottieni le posizioni, gli oggetti, i personaggi, le regole, ecc. A lavoro. In Python. Il più semplicemente e correttamente possibile.

Non bruciare una singola caloria del cervello su qualsiasi cosa tranne il modello di base, la correttezza e un set di funzioni di base per provare le cose lavoro.

Una volta che un modello è in realtà funziona e si può esercitare con alcuni sofisticati test di unità, quindi è possibile effettuare scelte tecnologiche.

Una volta ottenuto un modello, è possibile ridimensionarlo in modo significativo su milioni di posizioni e vedere quale tipo di memoria è necessario. Il modello non può cambiare: è l'essenza dell'applicazione. Solo il livello di accesso e il livello di persistenza possono cambiare per regolare le prestazioni.

+0

Interessante, quindi ho seguito il link. Se si osservano le restrizioni indicate (in breve: piccoli oggetti e nessuna concorrenza), sembra che sia una cattiva scelta il problema di Echo. –

+0

SQLite ha anche un limitato supporto di concorrenza. Non è chiaro dalla domanda che questo sia importante. –

+0

Non sono sicuro che funzionerà per me o meno. Ma lo esaminerò, grazie. La mensola tiene in memoria l'intero "scaffale"? Non potrei dire dai documenti. Inoltre, qualche idea di quanto bene fa con milioni di cose in esso? – Echo

3

Sembra che quello che stai chiedendo è un tipo di spacial index. Per un gioco 2d molto grande, ti consiglio di utilizzare lo quadtree. Quadtree funziona bene quando si dispone di una vasta area e l'attività tende a verificarsi nelle regioni localizzate dell'area, come nel caso della maggior parte dei giochi di tipo RPG.Manterrà i requisiti di archiviazione bassi e, auspicabilmente, accelererà anche il rilevamento delle collisioni.

Per quanto riguarda il salvataggio del gioco, cose come statistiche di giocatori e mostri possono essere inserite in un database, se sei preoccupato per chi cambia spesso. Per il layout del livello attuale, ti consigliamo di utilizzare un formato di file binario specifico per il tuo gioco. Non ci sono molte query di tipo di database che di solito devi eseguire sul layout di livello e puoi fare grandi ottimizzazioni usando il tuo formato. Non saprei come iniziare a memorizzare un formato quadtree in un database (anche se sono sicuro che sia possibile).

1

Utilizzo un database non correlato per archiviare grandi quantità di dati. Se riesci a lavorare su un hardware a 64 bit, lo MongoDB con il suo Python driver è davvero molto buono. Non so se questo è ok con Stackless, ma è una possibilità.

Problemi correlati