JeuWeb - Crée ton jeu par navigateur
Problème de conception : variable globale - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Problème de conception : variable globale (/showthread.php?tid=6638)



Problème de conception : variable globale - Maks - 09-02-2013

Salut à tous,

J'ai un problème de conception qui m'empêche de boucler la version Beta de mon jeu. Dans tout mon code source, j'ai une seule et unique variable globale nommé "Root". Celle-ci pointe vers la classe Client côté client, la classe Room côté serveur. Bien sûr, côté client ça ne pose pas problème car la variable est globale pour un seul client. Cependant côté serveur, sous Node.JS, la variable devient globale à l'application et non à un seul client. Hors bien sûr sur le serveur tout le monde ne pointe pas vers la même room. Des pistes pour résoudre ce problème ? Smile


RE: Problème de conception : variable globale - Sephi-Chan - 09-02-2013

Je ne comprends pas : pourquoi le code client est-il utilisé dans le contexte de Node ?


RE: Problème de conception : variable globale - Maks - 09-02-2013

Parce qu'une majorité des classes est partagé entre les deux environnements Smile


RE: Problème de conception : variable globale - Ter Rowan - 09-02-2013

Design pattern multiton ?


RE: Problème de conception : variable globale - Maks - 09-02-2013

Multiton ? Multiple singleton ?

Je vais donner quelques précisions pour être plus clair ^^

Côté client

Classe Animation. Elle doit faire référence à la map, pour savoir s'il y a une collision. Du coup j'utilise
Code :
Root.map.collisionObstacle(x, y)
Seulement je deviens dépendant de la variable globale. Je ne peux pas rendre ma classe Map statique. Et une injection de dépendance par attribut dans ma classe Animation serait sémantiquement pas terrible.

Côté serveur

Même cas de figure. Toutes mes classes sont rangées dans des espaces de noms, accessibles depuis l'espace global de Node.JS. Dans le même cas de figure, je pointe vers (global.)Root sur le serveur sauf que cette fois cette variable n'est pas nécessairement la room du client souhaitée.

Du coup c'est un problème de conception à mon avis. Je dois en effet surement utilisé un design pattern, rendre certaines choses statiques, décomposer en plus de classes ?


RE: Problème de conception : variable globale - Ter Rowan - 09-02-2013

Je suis certainement moins bon que toi, donc excuse si je me plante Tongue

Je pense au mulsion :
Comme le singleton mais avec un indice(ici l id du joueur si c est ça qui discrimine)

Grosso modo

A lieu de room.getInstance() tu fais room.getInstance( id)

Et dans les données de room tu as un tableau ou une collection d objets chacun étant la room du joueur


RE: Problème de conception : variable globale - niahoo - 09-02-2013

Code :
Root.user[id].room
?


RE: Problème de conception : variable globale - Maks - 09-02-2013

Ter Rowan > C'est pas une question de niveau, regarde on sait tous que les variables globales c'est de la merde et j'ai naïvement pensé qu'en n'en faisait qu'une je serais pas embêté Big Grin

Je vois ce que tu veux dire, ça rejoins un peu l'idée de niahoo. Côté Node, j'ai une variable globale server, instance de Server, qui contient un hash d'instances de Rooms selon une clée spécifique contenant le nom de la map (pour simplifier). Je peux donc accéder à la map en question via le nom de la map server.rooms[nomMap].map ou via un ID de joueur en effet avec une petite boucle.

Le truc c'est que par exemple ma classe Animation est globale mais elle contient un attribut Character contenant un Personnage (joueur, bot...), du coup je pourrais récupérer l'ID et pointer vers la bonne Room Smile
Par contre pour d'autres classes ça sera plus compliqué car l'id ne peut sortir de nulle part ^^