Hacer que las constantes / tablas del juego estén disponibles para las clases / rutinas de lógica de juego de manera modular

8

Supongamos que tengo un juego donde hay varias constantes y gráficos predefinidos (un gráfico de XP, costo de bienes, etc.). Esos podrían definirse en tiempo de ejecución o cargarse desde archivos al inicio. La pregunta es ¿cómo deberían esas rutinas lógicas acceder a las constantes y gráficos?

Por ejemplo, podría intentar usar variables globales, pero eso hace que todas las clases que dependen de las variables estén estrechamente relacionadas con ellas.

Extrakun
fuente

Respuestas:

3

Realmente depende de qué tipo (y cantidad / tamaño) de datos está hablando. Si se trata de un pequeño dato que se puede guardar de forma segura en la memoria durante la ejecución, mi recomendación sería algo así como una clase estática.

public static class Constants
{
    public static int[] Levels = { 0, 100, 200, 400, 800, 1600, 3200, 6400 }
}

De esta manera, la experiencia requerida para llegar al Nivel X es Constatns.Levels[X - 1];y acceder a otros datos también es fácil, si necesita una colección de Artículos, puede agregarla aquí también, si sus datos de Artículos son demasiado grandes para almacenarlos en la memoria, puede También implemente la lógica de almacenamiento en caché dentro de la clase estática.

Al hacerlo estático, se mantiene una única copia en la memoria y se asegura de que cada cliente de esta clase obtenga los mismos datos.

Si bien esto "combina estrechamente" sus clases, el acoplamiento estrecho no es algo malo si el diseño realmente lo necesita, lo que en el caso de las estadísticas de elementos y los gráficos de XP, en mi humilde opinión, es razonable acoplarlos firmemente. Siempre trato de mantenerlo simple, hasta que algo obliga a que sea complicado.

Nate
fuente
3

Crea un objeto para representar cada pieza y pasa ese objeto a las funciones que lo necesitan. Esto no es diferente a ningún otro dato: lo pasa.

DeadMG
fuente
2

Recomiendo usar una clase accesible a nivel mundial: llamémosla Diccionario (usando terminología flash). El Diccionario es básicamente una lista de pares de nombre-valor (datos, reglas, constantes) a los que desea acceder en toda su aplicación. Usando el nombre (string), otras clases podrán recuperar los valores (números, string, clases, etc.) que están conectados a su código. Entonces, su implementación es básicamente IOC, excepto que la instanciación se ha realizado previamente en el Diccionario. También puede escuchar los cambios en el Diccionario, etc.

kosmoknot
fuente
Este enfoque es bueno para la depuración: puede canalizar el diccionario a un servidor http y editar los números sobre la marcha desde otra aplicación, o imprimir los valores en la pantalla, etc.
Tenpn
0

Bueno, si estuvieras usando Java, recomendaría poner tus datos en archivos XML y usar algo como JAXB o simple-xml para obtener los datos que deseas en los objetos correctos.

Robert Massaioli
fuente
1
Si no estoy completamente equivocado, la pregunta no es sobre cómo almacenar y cargar los datos, sino más bien cómo proporcionar acceso a ellos una vez cargados (diseño de software, OOP).
bummzack