Enum Vs. Numero intero per i valori di abilità


10

Sto implementando un sistema di abilità e attributi di base, anche se sto ripensando a come dovrei procedere.

Ad esempio, potrei usare un dizionario / HashMap che utilizza gli enum SkillType per rappresentare le chiavi e valori interi che rappresentano i valori. Ma dovrei farlo?

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
}

Mi piacerebbe conoscere i vantaggi della sicurezza dei tipi qui, invece di usare solo numeri interi di base. Qualche consiglio?


Preferirei interface Skill { /* ... */ int toInt(); }; public class Skills : IList { private ArrayList<Skill> skills; /* ... */ };, in realtà ...
Martin Sojka l'

Risposte:


8

Se alla fine ci sarà:

  • una grande varietà di tipi di abilità nel tuo gioco,
  • o oggetti che concedono abilità,
  • o buff che concedono abilità,
  • o un grande albero delle abilità,

quindi inizio a preferire la flessibilità delle chiavi stringa o intera in un dizionario anziché in singoli campi di istanza o persino in un dizionario con una chiave enum.

Il mio ragionamento ... Perché potresti presto capire ...

Ragazzi, sarebbe bello se potessi modificare la mia matematica e selezionare le abilità di unità in (il mio editor di testo preferito | Excel | uno strumento personalizzato).

... a quel punto un dizionario con stringhe o chiavi intere diventa un adattamento più naturale rispetto al dover mantenere da soli i valori enum o un lungo elenco di campi di istanza. Tuttavia, detto strumento potrebbe sempre essere scritto per generare anche codice C #, quindi potresti essere in grado di trovare un ibrido felice.

Se la complessità del tuo gioco sarà abbastanza semplice e la tua varietà di abilità ridotta, la gestione manuale dei campi di istanza (invece del dizionario e dell'enum) sembra più conveniente ed evita un livello di riferimento indiretto, sia in fase di esecuzione che in "sequenza di tasti" - tempo.


Cosa intendi per abilità unitarie e matematica? Non sto seguendo abbastanza, almeno a questo proposito. Vorrei usare un enum, se è pratico però.
blissfreak,

Sono parzialmente d'accordo con te, le stringhe sono ottime per livelli più alti (ad esempio l'API di scripting) ma spostare le stringhe non è una buona idea (la memoria e il tempo di spostamento limitano la quantità massima di operazioni che puoi fare per frame). Essere ibridi può essere un'opzione: entità nominate con identificatori di numeri interi. I nomi devono essere memorizzati una volta (forse in una mappa singleton) e le entità si identificano usando numeri interi. In questo modo è possibile inserire stringhe nelle interfacce se necessario e lavorare come se fossero enumerazioni.
FxIII,

@fxiii Sono d'accordo, ed è per questo che ho citato "stringa o numero intero". Non sono andato nei minimi dettagli, quindi grazie per aver sollevato alcuni perché e come rispetto all'uso di numeri interi.
DuckMaestro,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.