Domanda

Sto ricominciando a programmare il gioco. 10 anni fa stavo realizzando giochi in qbasic e da allora non ho più programmato giochi, quindi sono abbastanza arrugginito. Ho programmato tutto il tempo però, sono sviluppatore web / DBA / admin ora. Ho diverse domande, ma la limiterò a una per post.

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

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

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

Ecco i requisiti per il mio gioco:

  • Ho bisogno di un accesso completamente casuale per individuare il mondo di gioco (gli NPC, i mostri, gli animali saranno tutti attivi tutto il tempo).
  • Sto usando Stackless Python 3.1, le opzioni sono piuttosto limitate a meno che non faccia molto lavoro.
  • Deve essere in grado di gestire un mondo molto vasto.
  • Il supporto della concorrenza sarebbe un vantaggio, ma non credo che ne avrò bisogno.
È stato utile?

Soluzione

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

Guarda il pickle di Python, shelve .

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


Modifica.

Consigli più importanti. Non impantanarsi nelle scelte tecnologiche. Ottieni posizioni, oggetti, personaggi, regole, ecc. Su lavoro . In Python. Nel modo più semplice e corretto possibile.

Non bruciare una singola caloria cerebrale su tutto tranne che sul modello di base, sulla correttezza e su un set di funzionalità di base per dimostrare le cose funzionano .

Una volta che hai un modello che funziona e puoi esercitarti con alcuni test unitari sofisticati, puoi fare delle scelte tecnologiche.

Una volta che hai un modello, puoi ridimensionarlo in modo significativo fino a milioni di posizioni e vedere quale tipo di archiviazione è richiesta. 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.

Altri suggerimenti

Sembra che quello che stai chiedendo sia un tipo di indice spaziale . Per un gioco 2D molto grande, consiglierei di utilizzare un quadtree . Quadtree funziona bene quando hai una vasta area e l'attività tende ad accadere nelle regioni localizzate dell'area, come nel caso della maggior parte dei giochi di tipo RPG. Manterrà bassi i requisiti di archiviazione e si spera di accelerare anche il rilevamento delle collisioni.

Per quanto riguarda il salvataggio del gioco, cose come le statistiche dei giocatori e dei mostri possono andare in un database, se sei preoccupato che cambino spesso. Per il layout di livello effettivo, consiglierei di utilizzare un formato di file binario specifico per il tuo gioco. Non ci sono molte query di tipo 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 simile a quadrifoglio in un database (anche se sono sicuro che sia possibile).

Sto usando un database non relazionale per archiviare grandi quantità di dati. Se puoi lavorare su un hardware a 64 bit, MongoDB con il suo driver Python è davvero molto buono. Non so se va bene con Stackless, ma è una possibilità.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top