Waffen sind Daten. Sie sollten Daten niemals wirklich fest codieren. Ihre Strukturen / Klassen sollten alle notwendigen Parameter enthalten, um die Daten einer Waffe von Grund auf neu zu erstellen, z.
struct Weapon
{
string name;
int damageMin;
int damageMax;
bool entangle;
bool canHitNoncorporeal;
float resistFire;
float resistElec;
float attackSpeed;
//etc. ad nauseam
}
Und dann sagen Sie in Text / .CSV:
Mithril Sword,15,30,false,true,0,10,4.5
Leather Whip,2,6,true,false,0,0,11
Und ja, Sie würden normalerweise über eine LoadItems
aufgerufene Funktion laden Init
, aber denken Sie daran, sie zu trennen, da Sie möglicherweise auch LoadItems
von einer anderen Stelle aus aufrufen müssen , z LoadGame
.
Wenn einige Waffen spezielle Eigenschaften haben, wie z. B. mehrere Angriffe oder einen anderen Effekt, wäre es vorteilhaft, sie zu den separaten Klassen zu machen, um sie so wie sie sind auszuführen, anstatt dass jede Waffe im Spiel diese Funktion hat, außer dies nicht irgendetwas tun?
Nee. Sie sollten dies als einzelne Klasse tun, da es sich letztendlich um eine begrenzte Anzahl von Optionen für alle Waffen in einem bestimmten Spiel handelt. Auf diese Weise können Sie die Eingabe von Gegenständen vereinfachen (Ausnahme könnte die Delegierung viel später sein; tun Sie dies vorerst als eine Klasse , später nach SRP ausrechnen ). Der andere Grund ist, dass der Umgang mit Kombinationen statischer Klassen aus Gründen, auf die ich hier nicht näher eingehen werde, schnell schwierig wird. Es ist wirklich nichts Falsches daran, ein paar zusätzliche Daten für Waffen zu speichern, dafür ist der CPU-Cache gedacht. Und im schlimmsten Fall können Sie Ihre Daten später jederzeit bitweise komprimieren.
Wenn Sie Optionen (Mitglieder) häufig ändern möchten, müssen Sie ein benanntes Format wie JSON / XML / YAML verwenden. Andernfalls müssen Sie sich Gedanken über die Änderung der Reihenfolge wie in der obigen CSV machen, die nicht erwähnt wird WAS jeder Eintrag ist, aber nur in der richtigen Reihenfolge liefert (dies ist sicherer):
[
{
"name": "Mithril Sword",
"damageMin": 15,
"damageMax": 30,
"entangle": false,
...
},
{
"name": "Leather Whip",
...
}
]