Enum Vs. Целое число для значений навыков


10

Я внедряю базовую систему навыков и атрибутов, хотя у меня есть вторые мысли о том, как мне это сделать.

Например, я мог бы использовать Dictionary / HashMap, который использует перечисления SkillType для представления ключей, и целочисленные значения, представляющие значения. Но я должен сделать это?

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
}

Я хотел бы знать преимущества безопасности типов здесь, а не просто использовать основные целые числа. Любые рекомендации?


Я бы предпочел interface Skill { /* ... */ int toInt(); }; public class Skills : IList { private ArrayList<Skill> skills; /* ... */ };, на самом деле ...
Мартин Сойка

Ответы:


8

Если в конечном итоге будет:

  • большое разнообразие типов навыков в вашей игре,
  • или предметы, дающие способности,
  • или баффы, дающие способности,
  • или большое дерево способностей,

затем я начинаю предпочитать гибкость строковых или целочисленных ключей в словаре вместо отдельных полей экземпляра или даже словаря с ключом enum.

Мои рассуждения-- Потому что вы скоро можете понять ...

Мальчик, было бы хорошо, если бы я мог настроить свой mathcraft и выбрать способности юнитов в (мой любимый текстовый редактор | Excel | пользовательский инструмент).

... в этот момент словарь со строковыми или целочисленными ключами становится более естественным, чем необходимость поддерживать значения перечисления или длинный список полей экземпляра самостоятельно. Однако указанный инструмент всегда можно написать для генерации кода на C #, так что вы сможете найти счастливый гибрид.

Если сложность вашей игры будет довольно простой, а разнообразие навыков - небольшим, то управление полями экземпляров вручную (вместо словаря и перечисления) кажется более удобным и позволяет избежать уровня косвенности как во время выполнения, так и при «нажатии клавиши» - время.


Что вы подразумеваете под способностями юнитов и математикой? Я не совсем следую, по крайней мере, в этом отношении. Я хотел бы использовать перечисление, если это практично, хотя.
блаженство

Я частично согласен с вами, строки отлично подходят для более высоких уровней (например, API сценариев), но перемещать строки не очень хорошая идея (память и время перемещения ограничивают максимальное количество операций, которое вы можете сделать за кадр). Быть гибридным может быть вариант: именованные объекты с целочисленными идентификаторами. Имена должны быть сохранены один раз (возможно, в одноэлементной карте), и сущности идентифицируют себя, используя целые числа. При этом вы можете при необходимости вставлять строки в свои интерфейсы и работать, как если бы они были перечислениями.
FxIII

@fxiii Я согласен, и именно поэтому я упомянул "строку или целое число". Я не вдавался в подробности, так что спасибо за то, что вы подняли вопрос, почему и как в отношении использования целых чисел.
DuckMaestro
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.