Bonjour, je suis actuellement en plein donjon et je ne sais pas où mettre les déplacements du joueur.
Le joueur se déplace dans un donjon consitué de pièces. J'utilise les classes suivantes :
- la classe Joueur
- la classe Donjon
- la classe Pièce
La classe Donjon contient un tableau de pièces, chaque pièce étant repérée par ses coordonnées (i,j).
Comment gérer les déplacements du joueur ?
Remarque :
POO-Mystère :
La classe Pièce possède la méthode :
function getMur (direction:string):boolean
qui renvoie un booléen indiquant s'il y a un mur dans la direction donnée. Est-ce vraiment POO ?
Ah au fait, cela serait POO de faire une classe Deplacement ? je suis un peu dubitatif ... parce que je n'ai pour l'instant qu'un joueur qui se déplace dans le donjon...
Humph, tant qu'on y est, mon joueur est repéré dans le donjon par ses coordonnées... Or les coordonnées du joueur (a,b) qui les possède ? Si c'est le joueur, cela ne paraît pas très valable car sans donjon, point de coordonnées valides ? Si c'est le donjon, bien... le joueur c'est pas une pièce...
Je sens que cela m'échappe un peu.
Merci pour votre aide, jacques
Bonjour,
[quote]Comment gérer les déplacements du joueur ?
[/quote]
puis :
[quote]Ah au fait, cela serait POO de faire une classe Deplacement ? je suis un peu dubitatif ... parce que je n'ai pour l'instant qu'un joueur qui se déplace dans le donjon...
[/quote]
Alors je trouve que faire une class Deplacement serait une bonne idée ... afin de pouvoir arriver à quelque chose du genre :
[code]joueur1.move(Deplacement(x_depart,y_depart,x_arrivee_y_arrivee));[/code]
ou bien :
[code]joueur1.move(Deplacement(deplacement_sur_x,deplacement_sur_y));[/code]
Enfin avec ça la gestion des déplacements est facilitée et bien encapsulée, je trouve. Donc, on peut penser que c'est POO que de créér une class Déplacement ^^
[quote]function getMur (direction:string):boolean
qui renvoie un booléen indiquant s'il y a un mur dans la direction donnée. Est-ce vraiment POO ?[/quote]
Ca, par contre, bof ... car de toute manière vu le nombre de murs dans les pièces dans un Donjon ... A la limite une fonction dans la class Joueur permettent de savoir si il y voit dans telle direction, ou bien si la case à sa droite, ou à sa gauche, etc ... , est libre. Enfin ce n'est que mon avis.
[quote]Humph, tant qu'on y est, mon joueur est repéré dans le donjon par ses coordonnées... Or les coordonnées du joueur (a,b) qui les possède ? Si c'est le joueur, cela ne paraît pas très valable car sans donjon, point de coordonnées valides ? Si c'est le donjon, bien... le joueur c'est pas une pièce...
[/quote]
C'est le joueur qui doit posséder ses coordonnées.
Il faut dès le départ que tu te fixe un repère par rapport auquel tu auras les coordonnées ... Ensuite, le donjon gèrera les déplacement des joueurs dans ce dernier en récupérant les coordonnées de joueurs, des pièces, etc ... mais il faut garder à l'esprit que créér une class revient à regrouper des données propre à un objet, un concept, ..., et des fonctions permettant de manipuler cette "chose". Et, comme, sauf erreur de ma part, des coordonnées sont propres à un joueur généralement ... hé bien les coordonnées doivent bien être mises dans le joueur. Enfin j'ai toujours fait comme ça. Il reste à avoir l'avis des autres, mais généralement, voir toujours, c'est implémenté de cette manière.
Voilà, en espérant t'avoir aidé.
__________________________
Be C++
[url=http://blog.mestan.fr/]Mon Blog (C++, Intelligence Artificielle, Prolog)[/url]
ERREUR BBCODE SUR CE MESSAGE : - La valeur de la balise "quote" n'est pas correcte !
si je ne m'abuse, le joueur est DANS le donjon nan?
Donc pourquoi ne pas faire une relation HAS A?
=>Le donjon possede un membre joueur...
__________________________
L'élève heureux est celui qui, comme la rivère, suit son cours dans son lit.
Et n'oubliez pas :Seb, c'est bien!
Ben oui ... le donjon possède un tableau de joueurs.
Mais je ne sais pas si c'était dans les questions, mais très bonne remarque!
__________________________
Be C++ Mon Blog (C++, Intelligence Artificielle, Prolog)
Donc on crée les relations suivantes : donjon HAS A piece (un tableau de pièces plus précisément) et HAS-A joueur (de même, un tableau de joueur).
Les joueurs dipsosent d'un attribut postion, modifiée par une méthode déplacement, mais cette méthode déplacement est dans une classe Déplacement. Si on définit le tableau de position en protected, il faut, pour que la classe déplacement y est accés, une relation d'héritage entre personnage et déplacement, non ?
Moi je ne trouve pas ça logique, mais j'ai peut être ma compris.
Jaime bien l'idée de la méthode Déplacement, puisque cela permet l'indépendance de la classe joueur, mais il faut reconnaître que c'est assez lourd.
Un petit éclaircissement, pour un pauvre débutant en OO ?
__________________________
[col]Woufeil[/col] et respectez la charte.
[quote]Les joueurs dipsosent d'un attribut postion, modifiée par une méthode déplacement, mais cette méthode déplacement est dans une classe Déplacement. Si on définit le tableau de position en protected, il faut, pour que la classe déplacement y est accés, une relation d'héritage entre personnage et déplacement, non ?
[/quote]
Je dirais non, car la classe Joueur [b]est implémentée[/b] en fonction de Deplacement ...
C'est à dire soit héritage privé(pas terrible une relation d'héritage ici je trouve), soit hé bien un tableau de déplacements dans joueur, toussa ... Mais je trouve que l'idée la plus simple et effiace est une méthode déplacer dans Joueur prenant un paramètre un objet de type Deplacement...
[quote]Moi je ne trouve pas ça logique, mais j'ai peut être ma compris.
Jaime bien l'idée de la méthode Déplacement, puisque cela permet l'indépendance de la classe joueur, mais il faut reconnaître que c'est assez lourd.
[/quote]
L'idée que j'ai donné dans mon premier post ?
__________________________
Be C++
[url=http://blog.mestan.fr/]Mon Blog (C++, Intelligence Artificielle, Prolog)[/url]
ERREUR BBCODE SUR CE MESSAGE : - La valeur de la balise "quote" n'est pas correcte !
Donc toi tu verrais la relation un joueur HAS A déplacement, ça parrait logique.
Et avec la méthode déplacer dans joueur, OK, je comprend bien, pas de problèmes, c'est comme ça que je l'imaginais
En fait, au début, je pensais à une méthode déplacer dans la classe joueur, mais qui ne recevrait pas d'objet déplacement, et là c'état franchement lourd, mais la dernière version répond bien, je pense, à la problématique.
En revanche, j'ai du mal à m'imaginer à quoi va ressembler la classe Déplacement, tu pourrais me dire comment tu vois ça ?
__________________________
[col]Woufeil[/col] et respectez la charte.
class Deplacement {
/*
int depart_x,depart_y,dest_x,dest_y;
C'est utilisable, mais je préfère la solution suivante
*/
int deltax,deltay; // valeur de déplacement sur x,y
public:
// accesseurs, mutateurs, et :
Deplacement(int dx,int dy) : deltax(dx),deltay(dy) { }
};
C'est clair que niveau fonctionnalités, elle est réduite, mais je trouve qu'encapsuler cela dans une class est plus pratique, plus propre, et plus léger niveau code, mais bon après chacun ses gouts. D'ailleurs il y aura surement des programmeurs uqi préfèreront une autre manière, et en principe sauf erreur de conception cela reviendra au même. Le plus important c'est que cela donne le plus d'aisance à coder le programme tout en ne perdant pas trop de consommation mémoire/cpu ...
__________________________
Be C++ Mon Blog (C++, Intelligence Artificielle, Prolog)
donc tu utilises leonstructeur si je comprend bien...
donc en fait, tu veux creer un objet déplacement a chaque fois que t'as besoinde te déplacer??
Je vois pas trop le truc là...
__________________________
L'élève heureux est celui qui, comme la rivère, suit son cours dans son lit.
Et n'oubliez pas :[b]Seb, c'est bien![/b]
ERREUR BBCODE SUR CE MESSAGE : - La valeur de la balise "quote" n'est pas correcte !
Ainsi il est créé, copié, détruit.
C'est juste de l'encapsulation, casi abusive, mais j'aime ce style et il s'avère qu'il est pas vraiment couteux, donc bon :)
__________________________
Be C++ Mon Blog (C++, Intelligence Artificielle, Prolog)