Je plussois aussi.
Les bonnes pratiques de programmation et de conception objet ne servent pas uniquement à faire "plus joli" : ça permet de gagner du temps (meilleur compréhension de ce qu'on écrit car organisation du code plus logique, donc moins de bugs, évolutivité et maintenance plus facile)
Pour t'aider un peu :
Tu as les "objets" suivant dans ton monde :
- l'univers, consitué d'une grille
- les fleures, avec une position
- les abeilles, qui ont une position
Tu peux "diviser" tes abeilles en 3 sous-objets :
- l'état de l'abeille (sa position dans ton cas)
- l'affichage de l'abeille (dans lequelle tu mets les fonctions GL)
- le déplacement de l'abeille (l'algo A*)
Tu peux également ajouter des classes accessoires : position (x et y) et une "ruche" (une liste d'abeille)
Au final, tu as les classes suivante :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| struct Position { float x,y; };
struct Univers {
void draw() { /* dessine la grille*/ }
};
struct Fleur { Position p; };
struct Abeille { Position p; };
struct AbeilleMover {
void udapte(Abeille& a) { /* déplace l'abeille d'une case grâce à A* */ }
};
struct AbeilleDrawer {
void draw(Abeille& a) { /* déplace l'abeille d'une case grâce à A* */ }
};
struct Ruche {
std::vector<Abeille> all;
Ruche(size_t n) : all(n) {}
};
main() {
Univers u; // on créé l'univers
Ruche r(100); // on le peuple
while(!fin) {
for(Abeille& a : Ruche) { AbeilleMover(a); } // on déplace toutes les abeilles
Univers.draw(); // on dessine la grille
for(Abeille const& a: Ruche) { AbeilleDrawer(a); } // on dessine toutes les abeilles
} |
J'ai séparé les abeilles en 3 classes comme proposé par GPPro mais il est peut être conceptuellement possible ici d'en faire une seule
Partager