Enum vs. Liczba całkowita dla wartości umiejętności

10

Wdrażam podstawowy system umiejętności i atrybutów, choć zastanawiam się, jak powinienem to zrobić.

Na przykład, mógłbym użyć Dictionary / HashMap, która wykorzystuje wyliczenia SkillType do reprezentowania kluczy, a wartości całkowite reprezentują wartości. Ale czy powinienem to zrobić?

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
}

Chciałbym poznać zalety bezpieczeństwa typu, w przeciwieństwie do zwykłych liczb całkowitych. Jakieś rekomendacje?

rozkosz
źródło
Wolałbym interface Skill { /* ... */ int toInt(); }; public class Skills : IList { private ArrayList<Skill> skills; /* ... */ };...
Martin Sojka,

Odpowiedzi:

8

Jeśli w końcu będzie:

  • duża różnorodność rodzajów umiejętności w twojej grze,
  • lub przedmioty przyznające umiejętności,
  • lub wzmocnienia wzmacniające umiejętności,
  • lub duże drzewo umiejętności,

potem zaczynam preferować elastyczność ciągów znaków lub liczb całkowitych w słowniku zamiast pojedynczych pól instancji, a nawet słownika z kluczem wyliczającym.

Moje rozumowanie - bo może wkrótce zdasz sobie sprawę ...

Chłopcze, byłoby miło, gdybym mógł ulepszyć moją matematykę i wybrać zdolności jednostek w (mój ulubiony edytor tekstu | Excel | narzędzie niestandardowe).

... w tym momencie słownik z kluczami ciągów lub liczb całkowitych staje się bardziej naturalny niż konieczność samodzielnego utrzymywania wartości wyliczeniowych lub długiej listy pól instancji. Jednak wspomniane narzędzie zawsze można napisać, aby wygenerować kod C #, więc możesz znaleźć szczęśliwą hybrydę.

Jeśli złożoność gry będzie dość prosta, a różnorodność umiejętności niewielka, to ręczne zarządzanie polami instancji (zamiast słownika i wyliczania) wydaje się wygodniejsze i pozwala uniknąć poziomu pośrednictwa, zarówno w czasie wykonywania, jak i „naciśnięciu klawisza” - czas.

DuckMaestro
źródło
Co rozumiesz przez zdolności jednostek i matematykę? Przynajmniej nie podążam za tym przykładem. Chciałbym użyć wyliczenia, jeśli jest to jednak praktyczne.
blissfreak,
Częściowo się z tobą zgadzam, łańcuchy są świetne na wyższe poziomy (np. Skryptowy interfejs API), ale przenoszenie łańcuchów nie jest dobrym pomysłem (pamięć i czas przesuwania ograniczają maksymalną liczbę operacji na klatkę). Opcją hybrydową może być opcja: nazwane jednostki z identyfikatorami całkowitymi. Nazwy należy zapisać raz (być może na mapie singletonowej), a podmioty identyfikują się za pomocą liczb całkowitych. Robiąc to, możesz w razie potrzeby umieścić łańcuchy w swoich interfejsach i pracować tak, jakby były wyliczeniami.
FxIII,
@fxiii Zgadzam się i dlatego wspomniałem o „string or integer”. Nie wdałem się jednak w szczegóły, więc dziękuję za wyjaśnienie, dlaczego i jak w odniesieniu do używania liczb całkowitych.
DuckMaestro