Enum vs. Entero para valores de habilidad


10

Estoy implementando un sistema básico de habilidades y atributos, aunque tengo dudas sobre cómo debo hacerlo.

Por ejemplo, podría usar un Dictionary / HashMap que usa enumeraciones SkillType para representar claves y valores enteros que representan los valores. ¿Pero debería hacer esto?

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
}

Me gustaría conocer los beneficios de la seguridad de tipos aquí, en lugar de usar enteros básicos. ¿Alguna recomendación?


Preferiría interface Skill { /* ... */ int toInt(); }; public class Skills : IList { private ArrayList<Skill> skills; /* ... */ };, en realidad ...
Martin Sojka

Respuestas:


8

Si finalmente va a haber:

  • una gran variedad de tipos de habilidades en tu juego,
  • o artículos que otorgan habilidades,
  • o beneficios que otorgan habilidades,
  • o un gran árbol de habilidades,

entonces empiezo a preferir la flexibilidad de las cadenas o las teclas enteras en un diccionario en lugar de los campos de instancia individuales o incluso un diccionario con una clave enum.

Mi razonamiento ... Porque pronto te darás cuenta ...

Chico, sería bueno si pudiera modificar mi matemática y seleccionar habilidades de unidad en (mi editor de texto favorito | Excel | una herramienta personalizada).

... en ese momento, un diccionario con cadenas o claves enteras se convierte en un ajuste más natural que tener que mantener los valores de enumeración o una larga lista de campos de instancia usted mismo. Sin embargo, dicha herramienta siempre podría escribirse para generar código C # también, por lo que puede encontrar un híbrido feliz.

Si la complejidad de su juego será bastante simple y su variedad de habilidades es pequeña, entonces administrar los campos de instancia a mano (en lugar de diccionario y enumeración) parece más conveniente y evita un nivel de indirección, tanto en tiempo de ejecución como "pulsación de tecla" - hora.


¿A qué te refieres con habilidades de unidad y matemáticas? No estoy del todo siguiendo, al menos en ese sentido. Sin embargo, me gustaría usar una enumeración, si eso es práctico.
blissfreak

Estoy parcialmente de acuerdo con usted, las cadenas son excelentes para los niveles superiores (por ejemplo, la API de secuencias de comandos), pero mover las cadenas no es una buena idea (la memoria y el tiempo de movimiento limitan la cantidad máxima de operaciones que puede hacer por cuadro). Ser híbrido puede ser una opción: entidades con nombre con identificadores enteros. Los nombres deben almacenarse una vez (quizás en un mapa singleton) y las entidades se identifican utilizando números enteros. Al hacerlo, puede colocar cadenas en sus interfaces si es necesario y trabajar como si fueran enumeraciones.
FxIII

@fxiii Estoy de acuerdo, y es por eso que mencioné "cadena o entero". Sin embargo, no entre en gran detalle, así que gracias por plantear algunos por qué y cómo con respecto al uso de enteros.
DuckMaestro
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.