Rendre les constantes / tables de jeu disponibles pour les classes / routines de logique de jeu de manière modulaire

8

Supposons que j'ai un jeu où il y a plusieurs constantes et graphiques prédéfinis (un graphique XP, le coût des marchandises, etc.). Ceux-ci peuvent être définis au moment de l'exécution ou chargés à partir de fichiers au démarrage. La question est de savoir comment ces routines logiques doivent-elles accéder aux constantes et aux graphiques?

Par exemple, je pourrais essayer d'utiliser des variables globales, mais cela fait que toutes les classes qui s'appuient sur les variables sont étroitement couplées avec elles.

Extrakun
la source

Réponses:

3

Cela dépend vraiment du type (et de la quantité / taille) de données dont vous parlez. S'il s'agit d'un petit morceau de données qui peut être conservé en mémoire en toute sécurité pendant la durée de l'exécution, quelque chose comme une classe statique serait ma recommandation.

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

De cette façon, l'expérience requise pour accéder au niveau X est Constatns.Levels[X - 1];et accéder à d'autres données est également facile, si vous avez besoin d'une collection d'éléments, vous pouvez également l'ajouter ici, si vos données d'éléments sont trop grandes pour être stockées en mémoire, vous pouvez implémentez également la logique de mise en cache dans la classe statique.

Le rendre statique conserve une seule copie en mémoire et garantit que chaque client de cette classe obtient les mêmes données.

Bien que cela «couple étroitement» vos classes, le couplage serré n'est pas une mauvaise chose si la conception en a vraiment besoin, ce qui, dans le cas des statistiques d'objets et des graphiques XP, est, à mon humble avis, raisonnable de les coupler étroitement. J'essaie toujours de rester simple, jusqu'à ce que quelque chose l'oblige à se compliquer.

Nate
la source
3

Créez un objet pour représenter chaque pièce et passez cet objet aux fonctions qui en ont besoin. Ce n'est pas différent des autres données - vous les faites circuler.

DeadMG
la source
2

Je recommande d'utiliser une classe accessible à l'échelle mondiale - appelons-la Dictionary (en utilisant la terminologie flash). Le dictionnaire est essentiellement une liste de paires nom-valeur (données, règles, constantes) que vous souhaitez accéder à l'ensemble de votre application. En utilisant le nom (chaîne), d'autres classes pourront récupérer les valeurs (nombres, chaîne, classes, etc.) qui sont interfacées dans votre code. Votre implémentation est donc essentiellement IOC, sauf que l'instanciation a déjà été effectuée dans le dictionnaire. Vous pouvez également écouter les modifications apportées au dictionnaire, etc.

kosmoknot
la source
Cette approche est bonne pour le débogage - vous pouvez diriger le dictionnaire vers un serveur http et modifier les nombres à la volée à partir d'une autre application, ou imprimer les valeurs à l'écran, etc.
tenpn
0

Eh bien, si vous utilisiez Java, je recommanderais de placer vos données dans des fichiers XML et d'utiliser quelque chose comme JAXB ou simple-xml afin d'obtenir les données que vous souhaitez dans les bons objets.

Robert Massaioli
la source
1
Si je ne me trompe pas complètement, la question n'est pas de savoir comment stocker et charger les données, mais plutôt comment leur donner accès une fois qu'elles sont chargées (conception logicielle, POO).
bummzack