Dois-je utiliser une base de données pour stocker le contenu du jeu? [fermé]


16

J'ai un jeu 2D écrit en C ++ en utilisant SFML. Je veux rendre le jeu extensible de telle manière que du contenu comme des éléments ou des entités puisse facilement être ajouté en ajoutant une ligne / entrée / ligne à un fichier ou une base de données.

Je recherche quelque chose qui n'a pas besoin d'être compilé dans le programme, mais qui peut être lu et écrit au moment de l'exécution. Quand serait-il approprié d'utiliser une base de données?


1
Veuillez clarifier davantage vos besoins. Les bases de données sont assez rapides, mais très complexes. Avez-vous vraiment besoin de la vitesse? Pourquoi ne pas simplement utiliser un fichier texte? Avez-vous exécuté une référence?
Anko

Combien d'articles allez-vous avoir? Est-ce plus d'un million? C'est à peu près le seuil où j'envisagerais d'utiliser une base de données sur des fichiers texte.
Philipp

Je dirais qu'une base de données est exagérée pour cela, utilisez simplement une sorte de liste de définitions. Peut-être juste du texte brut. Considérez XML ou JSON.
Hugo Zink

1
Je recommande également XML ou JSON. Je préfère XML car il est plus lisible pour moi, en tant qu'humain, mais JSON est également un bon choix.
Draco18s ne fait plus confiance au SE

Je ne prétendrai pas avoir beaucoup de connaissances sur les systèmes de données, ni sur la façon dont ils sont mis en œuvre dans les jeux, mais je dirai que Microsoft a tendance à utiliser des implémentations de micro-bases de données pour bon nombre de leurs applications simples (celles qui n'ont pas beaucoup de données ou besoins extérieurs à la base de données, mais ont tendance à avoir des "relations", etc.). Tant que vous gardez à l'esprit la facilité d'utilisation, cela peut avoir du sens. (Mauvaise idée: utiliser un espace de noms XML super formalisé exigeant l'exactitude des données)
Katana314

Réponses:


26

N'utilisez une base de données que si vous en avez besoin. C'est:

  • Si vous devez souvent effectuer des requêtes complexes.
  • Si vous avez des relations de données complexes.
  • Si vos données sont énormes et ne sont pas susceptibles de tenir en mémoire.

Si les données de votre jeu remplissent l'une de ces conditions, vous pourriez bénéficier de l'utilisation d'une base de données. Notez que ceux-ci ne sont pas très courants et que vous n'en satisfaisez probablement aucun. Si vous le faites, j'irais avec SQLite ou quelque chose avec une idée similaire de ne pas avoir besoin d'un serveur en cours d'exécution et d'être juste une bibliothèque.

Sinon, utilisez des fichiers et chargez des données en mémoire au démarrage. Si vous voulez que le jeu soit modifiable, chargez ces données à partir du répertoire de votre jeu et des répertoires des mods et définissez comment les informations conflictuelles peuvent être fusionnées.

Notez également que, si vous faites utiliser une base de données, il pourrait bénéficier à la fois vous et les développeurs de mods à utiliser encore des fichiers pour lire les données initiales et construire la base de données que lorsque le chargement du jeu. À moins que la taille potentielle de cette base de données soit énorme (c'est-à-dire plus de quelques dizaines de Mio), vous souhaiterez peut-être utiliser une base de données en mémoire, ce qui est possible dans SQLite en spécifiant :memory:comme chemin de base de données .


3
J'y reviendrais fortement SQLite, même si vos besoins ne sont PAS "complexes" ou "énormes". Il y a en fait beaucoup de raisons pour lesquelles avec quelque chose de petit et intégré comme ça, vous pouvez grandement bénéficier d'avoir une base de données à portée de main.
wjl

De plus, les plates-formes mobiles utilisent des bases de données pour stocker certaines informations. Android utilise SQLite. Cela signifie que la plupart de votre travail pour les plates-formes mobiles est déjà effectué (en termes de traitement des données). De plus, il est vraiment facile de configurer SQLite et de modifier les données SQLite (avec des programmes comme SQLite Studio ou similaire). Si c'est pour utiliser SQLite, le mieux serait d'utiliser V3. Mais à part ça, allez-y!
Ismael Miguel

@wjl: D'accord, les avantages de la normalisation et des contraintes d'intégrité référentielle en valent la peine, même pour les petits jeux de données de jeu. (Maintenant, si seulement ce n'était pas si difficile de faire en sorte que SQLite fasse les bonnes contraintes d'intégrité référentielle ...)
Mason Wheeler

C'est un argument contre l'utilisation d'une base de données relationnelle . Un simple magasin de valeurs-clés indexé peut encore valoir la peine.
Mark

1
@Mark Si vous allez utiliser un magasin de valeurs-clés dans un jeu, vous pourriez tout aussi bien avoir une carte de hachage ou similaire en mémoire.
Darkhogg

5

J'aime beaucoup MongoDB pour le développement de jeux, il a de très bonnes performances et il est vraiment flexible, facile à utiliser et basé sur json.

Vous pouvez simplement ajouter n'importe quel champ dont vous avez besoin dans n'importe quelle collection car il s'agit de NoSQL Arch, il s'intègre donc très bien dans n'importe quel environnement "dynamique" comme les jeux.

Donnez-lui un coup d'oeil .

Si vous développez une sorte de jeu de stratégie basé sur MMO Turn, vous devriez probablement lire sur CouchDB , c'est une base de données NoSQL qui a un très bon système de version.


Pas une bonne réponse. La question n'était pas "quelle base de données dois-je utiliser" mais plutôt "dois-je utiliser une base de données".
uliwitness

1

CastleDB est une bonne option car il s'agit simplement d'un éditeur qui convertit ensuite une base de données en fichier JSON. J'ai vu beaucoup de réponses disant qu'un fichier texte en clair est le meilleur, donc CastleDB est probablement le meilleur des deux mondes.


Pas une mauvaise réponse, mais manque la question. La question n'était pas "quelle base de données dois-je utiliser" mais plutôt "dois-je utiliser une base de données".
uliwitness
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.