Soll ich eine Datenbank zum Speichern von Spielinhalten verwenden? [geschlossen]

16

Ich habe ein 2D-Spiel in C ++ mit SFML geschrieben. Ich möchte das Spiel so erweiterbar machen, dass Inhalte wie Elemente oder Entitäten einfach hinzugefügt werden können, indem einer Datei oder Datenbank eine Zeile / ein Eintrag / eine Zeile hinzugefügt wird.

Ich suche etwas, das nicht in das Programm kompiliert werden muss, sondern zur Laufzeit gelesen und beschrieben werden kann. Wann ist eine Datenbank sinnvoll?

SinisterSloth
quelle
1
Bitte klären Sie Ihre Bedürfnisse mehr. Datenbanken sind recht schnell, aber sehr komplex. Brauchen Sie wirklich die Geschwindigkeit? Warum nicht einfach eine Textdatei verwenden? Haben Sie einen Benchmark durchgeführt?
Anko
Wie viele Gegenstände wirst du haben? Ist es mehr als eine Million? Das ist ungefähr die Schwelle, bei der ich erwägen würde, eine Datenbank über Textdateien zu verwenden.
Philipp
Ich würde sagen, eine Datenbank ist zu viel des Guten. Verwenden Sie einfach eine Art Definitionsliste. Vielleicht nur einfacher Text. Betrachten Sie XML oder JSON.
Hugo Zink
1
Ich empfehle auch XML oder JSON. Ich bevorzuge XML, weil es für mich als Mensch besser lesbar ist, aber JSON ist auch eine gute Wahl.
Draco18s
Ich werde nicht behaupten, viel Wissen über Datensysteme oder deren Implementierung in Spielen zu haben, aber ich werde sagen, dass Microsoft für viele ihrer einfachen Apps (solche, die nicht viel enthalten) eher Mikrodatenbankimplementierungen verwendet Daten oder datenbankexterne Anforderungen, haben aber in der Regel "Beziehungen" usw.). Solange Sie die Benutzerfreundlichkeit im Auge behalten, kann dies sinnvoll sein. (Schlechte Idee: Verwenden eines super-formalisierten XML-Namespaces, der die Richtigkeit der Daten
vorschreibt

Antworten:

26

Verwenden Sie eine Datenbank nur, wenn Sie eine Datenbank benötigen. Das ist:

  • Wenn Sie häufig komplexe Abfragen durchführen müssen.
  • Wenn Sie komplexe Datenbeziehungen haben.
  • Wenn Ihre Daten sehr umfangreich sind und wahrscheinlich nicht in den Arbeitsspeicher passen.

Wenn die Daten Ihres Spiels eine dieser Bedingungen erfüllen, können Sie von der Verwendung einer Datenbank profitieren. Beachten Sie, dass diese nicht sehr häufig sind und Sie wahrscheinlich keine davon zufriedenstellen. Wenn Sie dies tun, würde ich SQLite oder etwas Ähnliches wählen, um keinen laufenden Server zu benötigen und nur eine Bibliothek zu sein.

Verwenden Sie andernfalls Dateien und laden Sie die Daten beim Start in den Speicher. Wenn Sie möchten, dass das Spiel geändert werden kann, laden Sie diese Daten sowohl aus dem Verzeichnis Ihres Spiels als auch aus den Verzeichnissen der Mods und definieren Sie, wie widersprüchliche Informationen zusammengeführt werden können.

Beachten Sie auch , dass es sowohl für Sie als auch für die Entwickler von Mods von Vorteil sein kann, Dateien zum Lesen der Anfangsdaten und zum Erstellen der Datenbank nur dann zu verwenden, wenn das Spiel geladen wird. Sofern die potenzielle Größe dieser Datenbank nicht sehr groß ist (dh mehr als ein paar Dutzend MB), möchten Sie möglicherweise eine speicherinterne Datenbank verwenden, die in SQLite durch Angabe :memory:des Datenbankpfads möglich ist .

Darkhogg
quelle
3
Ich würde es mir sehr überlegen SQLite, auch wenn Ihre Bedürfnisse NICHT "komplex" oder "riesig" sind. Es gibt tatsächlich viele Gründe, warum Sie mit so etwas Kleinem und Eingebettetem in hohem Maße davon profitieren können, wenn Sie eine Datenbank zur Hand haben.
wjl
Mobile Plattformen verwenden Datenbanken, um einige Informationen zu speichern. Android verwendet SQLite. Dies bedeutet, dass der Großteil Ihrer Arbeit für mobile Plattformen bereits erledigt ist (in Bezug auf die Datenverarbeitung). Außerdem ist es sehr einfach, SQLite einzurichten und SQLite-Daten zu bearbeiten (mit Programmen wie SQLite Studio oder ähnlichem). Wenn SQLite verwendet werden soll, ist es am besten, V3 zu verwenden. Aber anders als das, genau richtig!
Ismael Miguel
@wjl: Einverstanden, die Vorteile der Normalisierung und der referenziellen Integritätsbeschränkungen lohnen sich auch für kleinere Spieldatensätze. (Nun, wenn es nur nicht so schmerzhaft wäre, SQLite dazu zu bringen, ordnungsgemäße referenzielle Integritätsbedingungen zu erfüllen ...)
Mason Wheeler
Dies ist ein Argument gegen die Verwendung einer relationalen Datenbank. Ein einfacher indizierter Schlüsselwertspeicher kann sich dennoch lohnen.
Mark
1
@Mark Wenn Sie einen Schlüsselwertspeicher in einem Spiel verwenden, können Sie auch eine Hashmap oder ähnliches im Speicher haben.
Darkhogg
5

Ich mag MongoDB für Spieleentwicklung sehr, es hat eine sehr gute Leistung und es ist sehr flexibel, einfach zu bedienen und json-basiert.

Sie können einfach ein beliebiges Feld in eine Sammlung einfügen, da es sich um NoSQL Arch handelt. So passt es wirklich gut in jede "dynamische" Umgebung wie Spiele.

Geben Sie ihm einen flüchtigen Blick .

Wenn Sie eine Art auf MMO Runden basierendes Strategiespiel entwickeln, sollten Sie wahrscheinlich über CouchDB lesen , es ist eine NoSQL-Datenbank mit einem wirklich guten Versionssystem.

PRDeving
quelle
Keine gute Antwort. Die Frage lautete nicht "Welche Datenbank soll ich verwenden?", Sondern "Soll ich überhaupt eine Datenbank verwenden?".
uliwitness
1

CastleDB ist eine gute Option, da es sich lediglich um einen Editor handelt, der eine Datenbank anschließend in eine JSON-Datei konvertiert. Ich habe viele Antworten gesehen, die besagten, dass eine Klartextdatei die beste ist, also ist CastleDB wahrscheinlich die beste von beiden Welten.

hjk231
quelle
Keine schlechte Antwort, verfehlt aber die Frage. Die Frage lautete nicht "Welche Datenbank soll ich verwenden?", Sondern "Soll ich überhaupt eine Datenbank verwenden?".
uliwitness