Ich entwickle ein Rollenspiel und bin an dem Punkt angelangt, an dem ich mit dem Aufbau einer feindlichen Datenbank beginnen muss. Damit sind einige Herausforderungen verbunden und einige Lösungen, über die ich nachgedacht habe.
Folgendes muss ich in meiner feindlichen Datenbank tun:
Ich habe zwei primäre Feindklassen, über die ich Daten darstellen muss:
Eine Basis-Feindklasse, die Folgendes umfasst:
Base Stats
Status Resistance Table
Elemental Resistance Table
Steal Table
Drop Table
Level
Unique ID
Base XP
AI Hook
Name
Display Name
Und eine abgeleitete Klasse, die die Möglichkeit zum Hinzufügen von Ausrüstung hinzufügt und die folgenden Felder hinzufügt:
Main Weapon
Secondary Weapon/Equipment
Armor
Accessories
Ich kann in Zukunft weitere Felder oder zusätzliche Klassen hinzufügen, wenn dies sinnvoll ist. Ich habe zwei mögliche Formate für Datenbank-Feinde in Betracht gezogen.
XML-Dateien
Ich würde es im Grunde so machen:
<?xml version="1.0" encoding="utf-8"?>
<Enemies>
<Enemy name="Red Dragon" type="BaseEnemy" level="56" displayname="Red Dragon">
<Stats HP="55000" MP="2500" SP="2500" Strength="212" Vitality="125" Magic="200" Spirit="162" Skill="111" Speed="109" Evasion="100" MgEvasion="100" Accuracy="100" Luck="55"/>
<StatusResistances>
<Resistance name="Sleep" value="100" />
<Resistance name="Stop" value="100" />
</StatusResistances>
<ElementResistances>
<Resistance name="Fire" value="75" />
</ElementResistances>
<LootTable>
<Item name="Elixir" rate="0.03" count="1"/>
</LootTable>
<DropTable>
<Item name="Elixir" rate="0.03" count="1"/>
</DropTable>
<AIScript value="BasicBehaviour.py" />
<BaseXP value="4800"/>
</Enemy>
<Enemy name="Gaverick 1" type="HumanoidEnemy" level="33" displayname="Gaverick">
<!--Same Stuff as above here-->
<Equipment>
<Weapon name="Dark Eclipse"/>
<Armor name="Terra Defense"/>
<Accessory name="Ribbon"/>
</Equipment>
</Enemy>
</Enemies>
Vorteile:
- Einfach zu erweitern, wenn ich Parameter hinzufügen / neu anordnen muss
- einfach Standardwerte zuzuweisen
- Ich habe bereits einen XML-Parser (pugixml) für Konfigurationsdateien, gekachelte Karten und das Laden von Ressourcenbeschreibungen
Nachteile:
- möglicherweise langsam (meine Datenbank wird wahrscheinlich mehrere hundert Feinde treffen)
- kann nicht nach beliebigen Feinden abfragen, muss also wahrscheinlich alle Feinde im Speicher behalten.
- Dies würde bedeuten, dass ich das Spiel neu starten muss, um auch geänderte feindliche Daten zu laden
SQLite
Dazu würde ich im Grunde eine Tabelle mit Spalten erstellen, die alle benötigten Daten darstellen, und die unnötigen Felder leer lassen
Vorteile
- Durch willkürliches Abfragen können unnötige feindliche Daten nicht mehr gespeichert werden
- Fühlt sich strukturierter an
- Kleinere Dateigröße
Nachteile
- Schwieriger, Parameterreihenfolgen zu erweitern / neu anzuordnen
- Unnötiger Aufwand für nicht verwendete Felder
- Muss einen Datenbankschnittstellen-Wrapper für SQLite schreiben
Vor diesem Hintergrund war ich neugierig darauf, Erfahrungen von außen darüber zu sammeln, was andere Leute getan haben. Ich denke vielleicht völlig falsch darüber nach, und wenn ja, schlagen Sie bitte eine Alternative zu den beiden Möglichkeiten vor, die ich hier habe.
Darüber hinaus sind Vorschläge zur Verbesserung einer dieser Möglichkeiten willkommen. Wirklich, ich möchte nur wissen, ob ich auf dem richtigen Weg bin.
Ich bin offen für die Nutzung jeder kostenlosen Bibliothek und baue bereits Boost ein