Enum Vs. Ganzzahl für Fähigkeitswerte

10

Ich implementiere ein grundlegendes Fähigkeits- und Attributsystem, obwohl ich mir Gedanken darüber mache, wie ich vorgehen soll.

Zum Beispiel könnte ich ein Dictionary / HashMap verwenden, das SkillType-Enums verwendet, um Schlüssel darzustellen, und ganzzahlige Werte, die die Werte darstellen. Aber soll ich das machen?

public class Skills
{
    public IDictionary<StatType, Int> skills; //StatType is enum, being the key; the int //is the value.

}

vs.

public class Skills
{
    public int LongBlade, Armor, Marksman; //...etc
}

Ich möchte hier die Vorteile der Typensicherheit kennen, anstatt nur einfache Ganzzahlen zu verwenden. Irgendwelche Empfehlungen?

Glücksfall
quelle
interface Skill { /* ... */ int toInt(); }; public class Skills : IList { private ArrayList<Skill> skills; /* ... */ };Eigentlich würde ich es vorziehen ...
Martin Sojka

Antworten:

8

Wenn es irgendwann geben wird:

  • eine große Auswahl an Fertigkeitstypen in Ihrem Spiel,
  • oder Fähigkeitsgewährung von Gegenständen,
  • oder Fähigkeitsgewährung Buffs,
  • oder ein großer Fähigkeitsbaum,

dann bevorzuge ich die Flexibilität von Zeichenfolgen- oder Ganzzahlschlüsseln in einem Wörterbuch anstelle einzelner Instanzfelder oder sogar eines Wörterbuchs mit einem Aufzählungsschlüssel.

Meine Argumentation - Weil Sie vielleicht bald erkennen werden ...

Junge, es wäre schön, wenn ich meine Mathematik optimieren und Einheitenfähigkeiten auswählen könnte (mein Lieblingstexteditor | Excel | ein benutzerdefiniertes Werkzeug).

... an diesem Punkt wird ein Wörterbuch mit Zeichenfolgen- oder Ganzzahlschlüsseln natürlicher, als wenn Sie Enum-Werte oder eine lange Liste von Instanzfeldern selbst verwalten müssen. Dieses Tool kann jedoch immer auch zum Generieren von C # -Code geschrieben werden, sodass Sie möglicherweise einen glücklichen Hybrid finden können.

Wenn Ihre Spielkomplexität relativ einfach und Ihre Vielfalt an Fähigkeiten gering sein soll, erscheint die manuelle Verwaltung von Instanzfeldern (anstelle von Wörterbuch und Aufzählung) bequemer und vermeidet eine Indirektionsebene sowohl zur Laufzeit als auch beim "Tastendruck" - Zeit.

DuckMaestro
quelle
Was meinst du mit Einheitenfähigkeiten und Mathematik? Zumindest in dieser Hinsicht folge ich nicht ganz. Ich würde gerne eine Aufzählung verwenden, wenn das praktisch ist.
Blissfreak
Ich stimme Ihnen teilweise zu, dass Zeichenfolgen für höhere Ebenen (z. B. die Skript-API) großartig sind, aber das Verschieben von Zeichenfolgen ist keine gute Idee (Speicher und Verschiebungszeit begrenzen die maximale Anzahl von Operationen, die Sie pro Frame ausführen können). Be hybrid kann eine Option sein: benannte Entitäten mit ganzzahligen Bezeichnern. Die Namen müssen einmal gespeichert werden (möglicherweise in einer Singleton-Map) und Entitäten identifizieren sich anhand von Ganzzahlen. Auf diese Weise können Sie bei Bedarf Zeichenfolgen in Ihre Schnittstellen einfügen und so arbeiten, als wären sie Aufzählungen.
FxIII
@fxiii Ich stimme zu und deshalb habe ich "string oder integer" erwähnt. Ich bin jedoch nicht ins Detail gegangen. Vielen Dank, dass Sie einige Gründe und Gründe für die Verwendung von ganzen Zahlen angesprochen haben.
DuckMaestro