Questions sur la conception d'un jeu

Certaines choses ne sont pas encore claires dans ma tête...

a marqué ce sujet comme résolu.

J'aurai plutôt vu quelque chose comme ça :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
class Controller{
  Controller(Model& m, View& v) : model(m), view(v){}

private:
  Model& model;
  View & view;
};

//et :
int main(){
  Model m{/*params*/};
  View  v{/*params*/};

  v.observe(m);

  Controller c{ m, v };
  c.run();
}

Rebonjour,

Je continue d'avancer comme je peux grâce à vos conseils. Mais là une question me tourne dans la tête. Étant donner que ce n'est pas à un acteur de connaître la scène et les autres acteurs, et donc de se déplacer lui-même, c'est la classe modèle qui gère son déplacement.

Donc j'ai dû ajouté plein de getters/setters aux acteurs pour permettre à la classe modèle de les déplacer. Puisqu'avant je n'en avait pas, j'ai l'impression que cela ne fait qu'alourdir mon code. Ma question est donc : ces getters/setter, bonne ou mauvaise chose ?

Généralement, les getters et le setters ont tendance à rapidement poser problème. Les setters parce qu'ils violent purement et simplement Démeter, le getter parce qu'ils donnent la tentation de le faire.

Si le setter est très souvent un défaut de conception (au mieux, parce qu'il ne fait pas que "setter" mais qu'il fait d'autres choses), le getter peut parfois être légitime, quand c'est effectivement un service auquel on s'attend de la part de la classe.

Dans le cadre d'un déplacement, je pense que ta classe Modèle pour les éléments contrôlés par le joueur devrait se contenter de relayer les ordres. Pour les éléments non-joueur, elle devrait demander à chaque élément "que veux tu faire ? Voici ta connaissance de ton environnement".

[…] Pour les éléments non-joueur, elle devrait demander à chaque élément "que veux tu faire ? Voici ta connaissance de ton environnement".

Ksass`Peuk

C'est bien ça qui me pose problème. Devrais-je rendre les fantômes (donc les éléments non-joueurs) parfaitement "intelligents" en leur donnant toutes les informations nécessaires sur leur environnement pour qu'ils se déplacent "tous seuls", sans qu'on ait à se soucier de leur position, direction (etc…) ? Ceci n'impliquerait donc aucun getter/setter. Cependant, je devrais faire passer plein d'informations en paramètre (la taille de la scène, la map, le score - car la vitesse des fantômes varie selon le score…).

En gros, un fantôme aurait-il déjà meilleur temps de connaître la map ?

1
2
// j'appellerais donc une fonction membre du genre :
void Ghost::update(const Map& map);

L'avantage que tu as à leur donner les informations tout en leur demandant de faire quelque chose est que du côté de la classe maîtresse, tu peux très facilement filtrer pour par exemple ne leur donner qu'une connaissance partielle. Et que la partie se chargeant du "raisonnement" intelligent est locale à l'élément qui dois réfléchir.

Après, selon la durée de la connaissance, tu peux la rendre permanente où ne la passer qu'à chaque appel, c'est fonction de ce que tu veux.

Tierce possibilité, la création d'un moteur de déplacement auquel les fantômes ferait appel ou auquel on enverrais les joueurs.

Le moteur recevrais un joueur (fantome par exemple) et le déplacerais en fonction des différentes données qu'il a en cet instant. Dans les logiciels ou beaucoup d'entité sont présente, c'est souvent la techniques mise en place. (moteur physique entre autre)

+1 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte