philosophie evenement - Java - Programmation
Marsh Posté le 01-02-2003 à 16:40:29
Plusieurs façons de voir les choses:
Les classes pour le jeu, l'interface, ... sont créees au début de la partie en fonction de la configuration. Ca ressemble au design pattern 'factory'.
Ex: un monopoly avec un grand ou un petit plateau, joué avec des dés à 6 ou 10 faces.
Code :
|
Puis tu auras un classe Options qui contient une instance de chaque interface.
Code :
|
La définition d'une configuration de jeu se fait donc en choisissant une factory pour chaque élément. C'est pas trop dur de recenser les différentes factories et de proposer à l'utilisateur d'en choisir une dans des listes par exemple
Marsh Posté le 01-02-2003 à 16:58:19
Bon, l'autre façon, c'est avec les evenements. Mais un évènement permettrait de changer les règles en cours de jeu, ce qui n'est pas forcément ce que tu veux faire, et qui risque de poser des problèmes variés (ex: le plateau devient subitement plus grand, où est-ce qu'on replace les objets?).
Les évènements sont basés sur le design patter observer.
(premier résultat google sur 'design patter observer' : http://sern.ucalgary.ca/courses/SE [...] erLib.html )
La configuration serait un 'subject' et tes différents éléments les 'observers'.
Quand les éléments sont crées (avec une factory par exemple), on leur attache la configuration comme observeur
Code :
|
Quand la configuration est changée, on appelle config.notify(), et comme chaque élémet du jeu est observeur de la config, chaque élément recevra un appel à update().
Rien ne t'empêche de faire passer des informations comme paramètre de notify() à update(), comme c'est le cas avec les composant des gui (il y a toujours un objet event en paramètre je crois)
Par contre, utilisés sous cette forme, les évènements c'est pas très pratique, car c'est toujours la même fonction qui est appelée pour les éléments du jeu quand quelque chose change.
Une possibilité est de définir plusieurs stratégies (y'a aussi un design patter strategie, mais il n'est pas vraiment utilisé comme ça) de réponse aux messages pour les observers (éléments du jeu).
Une implémentation possible est de donner une hashmap de handlers à chaque observer. Un handler est une classe qui a la fonction handle(). Le handler est choisi en fonction du paramètre de notify/update.
Donc en gros :
Code :
|
Bon, c'est ptet pas très clair car c'est présenté un peu rapidement, mais les idées sont dans les desciptions des design patterns
Bonne chance
Marsh Posté le 01-02-2003 à 21:05:26
je lis les "designs patterns" thanks !
mais je m'appercois que j'ai mal formulé le message
je pensais à inclure une instance de configuration au départ (une fois choisie) dans les classes qui en auront besoin, et les évènement pour la communications entre tous les autres modules...
et je ne suis pas encore sûr de quoi j'ai besoin, je dois encore réfléchir plus à quels type de changements de règles je veux
Marsh Posté le 02-02-2003 à 04:47:13
Juste pour relever un truc qui m'a 'choqué', histoire de faire une petite polémique ... :
_gtm_ a écrit :
|
D'après ta phrase, le code devrait etre
Code :
|
Marsh Posté le 02-02-2003 à 18:42:10
ben non...
Dans le pattern, on fait
Code :
|
On veut que les éléments de jeu soient informés quand la config change, donc ce sont les éléments les observers et la config le subject
donc bien
Code :
|
Marsh Posté le 02-02-2003 à 19:50:12
_gtm_ a écrit : ben non...
|
je me fous de ce qu'on fait dans le pattern, je te dise juste que ta phrase en français correspond pas au code que tu lui associais
Marsh Posté le 01-02-2003 à 12:57:56
bonjour
je compte essayer de développer un min jeu 2D sur plateau,
et voici la décomposition que j'ai retenue :
je voudrais décomposer les différentes modules de ce programme
en couches le plus indépendantes possible pour pouvoir les réutiliser
dans d'autres jeux2D à 2 balles.
Couche réseaux
Couche monde (Map + Entités)
Couche Jeu (le moteur du jeu)
Couche InterfaceGraphique
Couche Configuration
en fait en créant une nouvelle instance de Configuration je veux
modifier presque tout le comportement, soit pour jouer avec des
règles différentes et des modifs des maps soit pour carrément
faire un nouveau jeu.
le concept des evènement me parait bien pour ca, pour que les
parties soient indépendantes à 100% , mais jusqu'ici je n'ai vu
des events que pour les interfaces graphiques (y a bien l'eventObject
de java.util mais je n'ai pas trouvé d'examples)
est ce une bonne philosophie ?
y a t-il une meilleure approche ?