Précédent   Forum des professionnels en informatique > C et C++ > C++
C++ Forum d'entraide technique sur le langage C++. Avant de poster -> F.A.Q C++
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/02/2012, 09h44   #1
Membre à l'essai
 
Homme Alexandre
Étudiant
Inscription : décembre 2010
Messages : 44
Détails du profil
Informations personnelles :
Nom : Homme Alexandre
Âge : 20
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2010
Messages : 44
Points : 24
Points : 24
Par défaut Application C++ avec OpenGL

Bonjour à tous !

Je dois développer pour mon université une application en C++ qui implémenterait l’algorithme A-Star ainsi qu'un Decision Tree, mais je n'ai aucune base en C++.

Heureusement je connais bien le langage JAVA , mais j'ai quelques soucis de "débutant" et j'aurais besoin de conseils.

Concrètement, je souhaite créer des abeilles (de simples triangles) qui vont se déplacer vers des fleurs (certaines cases d'une grille) en utilisant l'algorithme A-Star, avec la librairie OpenGL.

Je possède d'ors et déjà un main qui instancie ma grille, l'algorithme A Star (mais pas relié aux abeilles), ainsi qu'une classe myBee qui affiche une abeille.

Ma question (Ouf ), j'aimerais savoir si je pars dans la bonne direction en voulant créer une fonction updatePosition dans ma classe myBee afin de calculer sa nouvelle position ? Devrais-je ensuite rappeler ma fonction drawBee afin que celle-ci soit en quelque sorte en train de bouger ? Et comment intégrer mon algorithme A-Star au milieu de tout ce processus ?

Merci pour vos réponses éclairées je vous suis d'avance très reconnaissant
lightalex01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 11h51   #2
Membre éclairé
 
Avatar de themadmax
 
Inscription : juillet 2005
Messages : 424
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 424
Points : 383
Points : 383
Salut,
Pour la création de petit projet en OpenGL l'utilisation de GLUT est un bon gain de temps.
Âpres tu implante des callbacks :
  • glutDisplayFunc : tu appel les primitives pour le rendu
  • glutIdleFunc : effectuer les algos de déplacement
__________________
________________________________________________
http://bliquid.fr : Blog sur Android et l'Acer Liquid
themadmax est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 13h55   #3
Membre Expert
 
Homme
Junior developer C/C++/Embedded system
Inscription : juin 2010
Messages : 656
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Junior developer C/C++/Embedded system

Informations forums :
Inscription : juin 2010
Messages : 656
Points : 1 371
Points : 1 371
Bonjour,

GLUT n'étant pas maintenue depuis 1998, j'utilise pour ma part glfw pour créer un contexte OpenGL aisément.
Bousk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 20h21   #4
Membre éclairé
 
Avatar de themadmax
 
Inscription : juillet 2005
Messages : 424
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 424
Points : 383
Points : 383
1998! sa donne un coup de vieux...
Bon en tous cas sa tourne bien sous mon 386
__________________
________________________________________________
http://bliquid.fr : Blog sur Android et l'Acer Liquid
themadmax est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2012, 08h06   #5
Responsable 2D/3D/Jeux

 
Avatar de LittleWhite
 
Homme Alexandre Laurent
Étudiant
Inscription : mai 2008
Messages : 6 567
Détails du profil
Informations personnelles :
Nom : Homme Alexandre Laurent
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2008
Messages : 6 567
Points : 14 051
Points : 14 051
Bonjour,

Pour l'histoire de GLUT, c'est pour cela que maintenant nous conseillons FreeGLUT (mis à jour récemment, licence plus libre ...)

Pour le problème de lightalex01, oui, vous pouvez faire de la sorte (avec la méthode updatePosition dans myBee).
Mais vous pouvez aussi dire que ce serait l'algorithme A-Star qui bougerai les abeilles (en utilisant une fonction setBeePosition()). Ou alors, l'abeille pourrait questionner le A Star, pour récupérer la prochaine position et l'utiliser si elle le veut vraiment. Plusieurs choix son possibles.
__________________
Vous souhaitez participer à la section Jeux ? Contactez-moi
La rubrique a aussi un blog !

Ma page sur DVP
Mon Portfolio

Qui connaît l'erreur, connaît la solution.
LittleWhite est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 08/02/2012, 17h33   #6
Membre à l'essai
 
Homme Alexandre
Étudiant
Inscription : décembre 2010
Messages : 44
Détails du profil
Informations personnelles :
Nom : Homme Alexandre
Âge : 20
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2010
Messages : 44
Points : 24
Points : 24
Tout d'abord merci pour vos réponses !

Citation:
Mais vous pouvez aussi dire que ce serait l'algorithme A-Star qui bougerai les abeilles (en utilisant une fonction setBeePosition())
J'aimerais partir la dessus, mais je ne sais pas exactement quoi faire. J'ai pour l'instant une fonction au sein de ma classe MyBee qui est la suivante :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
void const MyBee::displayBee(const MyBee& rls)
{
	glBegin(GL_TRIANGLES);
	glColor3f(1,1,1);
		glVertex3f( 0.0f, 1.0f, 0.0f);	
        glVertex3f(-1.0f,-1.0f, 0.0f);	
        glVertex3f( 1.0f,-1.0f, 0.0f);
	glEnd();
 
	//draw the X and Y axis
	glBegin(GL_LINES);
		glVertex2i(0,0);glVertex2i(0,1);
		glVertex2i(0,0);glVertex2i(1,0);
	glEnd();
}
Et je ne sais pas quoi faire avec cela afin de "modifier la position" de mon abeille... Que devrais je passé à ma fonction setBeePosition de l'algorithme A-Star ? Puis quelles fonctions utiliser afin de redessiner l'abeille ?

Merci d'avance pour votre aide !
lightalex01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 18h10   #7
Membre Expert
 
Homme
Junior developer C/C++/Embedded system
Inscription : juin 2010
Messages : 656
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Junior developer C/C++/Embedded system

Informations forums :
Inscription : juin 2010
Messages : 656
Points : 1 371
Points : 1 371
Ta fonction displayBee est un début correct.

Sauf que l'affichage de la grille ne devrait pas y figurer !
La fonction est là pour afficher une abeille, c'est tout.
La grille doit être affichée par un moyen externe.

Si tu regardes bien ce que tu as écrit, displayBee n'utilise aucune variable, ton abeille sera affichée aux même coordonnées à chaque fois.
Commencer par créer ces variables de positionnement et les utiliser, puis ajouter des fonctions pour les récupérer et mettre à jour, me semblerait être un bon début que je préconiserais.
Bousk est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 08/02/2012, 18h41   #8
Membre à l'essai
 
Homme Alexandre
Étudiant
Inscription : décembre 2010
Messages : 44
Détails du profil
Informations personnelles :
Nom : Homme Alexandre
Âge : 20
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2010
Messages : 44
Points : 24
Points : 24
D'accord je vais commencer tout ça et vous donne des nouvelles merci

(Concernant "la grille" ce n'est pas vraiment ça que j'ai voulu faire ici, mais plutôt les axes X et Y de mon objet abeille)
lightalex01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 09h31   #9
Responsable 2D/3D/Jeux

 
Avatar de LittleWhite
 
Homme Alexandre Laurent
Étudiant
Inscription : mai 2008
Messages : 6 567
Détails du profil
Informations personnelles :
Nom : Homme Alexandre Laurent
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2008
Messages : 6 567
Points : 14 051
Points : 14 051
Pour modifier la position de l'abeille, je pense que vous pouvez utiliser glTranslate()
__________________
Vous souhaitez participer à la section Jeux ? Contactez-moi
La rubrique a aussi un blog !

Ma page sur DVP
Mon Portfolio

Qui connaît l'erreur, connaît la solution.
LittleWhite est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 09/02/2012, 09h41   #10
Membre habitué
 
Homme Gilles
Inscription : août 2011
Messages : 47
Détails du profil
Informations personnelles :
Nom : Homme Gilles
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : août 2011
Messages : 47
Points : 122
Points : 122
Citation:
Envoyé par LittleWhite Voir le message
Bonjour,
Pour le problème de lightalex01, oui, vous pouvez faire de la sorte (avec la méthode updatePosition dans myBee).
Mais vous pouvez aussi dire que ce serait l'algorithme A-Star qui bougerai les abeilles (en utilisant une fonction setBeePosition()). Ou alors, l'abeille pourrait questionner le A Star, pour récupérer la prochaine position et l'utiliser si elle le veut vraiment. Plusieurs choix son possibles.
D'un point de vue modélisation la première approche est horrible : l'algo A* doit avoir connaissance d'une abeille...
De même, l'abeille ne doit pas avoir connaissance de l'algo a*, il faut un troisième élément qui mette tout ça en relation.

Idem pour le code OpenGL, il ne doit pas se trouver dans la classe abeille. Si demain tu apsses sous d3d, tu dois modifier la classe abeille ? Quel est le rapport entre une abeille et d3d / opengl ?

Message un peu dur, mais ne pas oublier les bases de la modélisation objet même quand on traite des projets plus "ludiques" (dans le sens affichage graphique et IA). Bien au contraire même, ça permet d'offrir/tester de multiples options beaucoup plus facilement.
GPPro est déconnecté   Envoyer un message privé Réponse avec citation 40
Vieux 09/02/2012, 09h46   #11
Responsable 2D/3D/Jeux

 
Avatar de LittleWhite
 
Homme Alexandre Laurent
Étudiant
Inscription : mai 2008
Messages : 6 567
Détails du profil
Informations personnelles :
Nom : Homme Alexandre Laurent
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2008
Messages : 6 567
Points : 14 051
Points : 14 051
Alors, je suis plus qu'entièrement d'accord avec vous (si cela était possible).

Mais c'est à lightalex01 de choisir s'il souhaite faire un design beaucoup plus beau ou juste intégrer son algo (pour expérimentation). Il peut aussi y avoir le cas de faire un premier essai puis de travailler sur le design.
(Notamment, je me suis retenu de dire que le code OpenGL était maintenant déprécié, mais comme il est plus simple à utiliser, je n'ai rien dit).
Finalement, comme je pense que la maitrise du code OpenGL n'est pas encore établit, essayer de faire une architecture plus poussée est un peu risqué (il faut un minimum de connaissances pour ne pas se planter dans de l'architecture mal construite à cause d'une mauvaise compréhension de la bibliothèque).

Mais vous avez bien raison
__________________
Vous souhaitez participer à la section Jeux ? Contactez-moi
La rubrique a aussi un blog !

Ma page sur DVP
Mon Portfolio

Qui connaît l'erreur, connaît la solution.
LittleWhite est déconnecté   Envoyer un message privé Réponse avec citation 11
Vieux 09/02/2012, 10h45   #12
Membre à l'essai
 
Homme Alexandre
Étudiant
Inscription : décembre 2010
Messages : 44
Détails du profil
Informations personnelles :
Nom : Homme Alexandre
Âge : 20
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2010
Messages : 44
Points : 24
Points : 24
Bonjour,

Mon problème aujourd'hui (car oui je pense que je vais au moins en avoir un par jour ) :

Dans mon fichier "main.cpp" je déclare une matrix OpenGL :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
glMatrixMode(GL_MODELVIEW);
	//initialise the modelview matrix to the identity matrix
	glLoadIdentity();
 
	glTranslatef(0.0,0.0,-50.0);
	glRotatef(-90.0,1.0,0.0,0.0);
 
	//draw things here
	if(mymap != NULL) mymap->draw();
 
	myFirstBee = new MyBee(10,0);
 
	//flush what we've drawn to the buffer
	glFlush();
	//swap the back buffer with the front buffer
	glutSwapBuffers();
Ce qui a pour conséquence de m'afficher une grille de face, ce que je souhaite. Seulement ensuite dans mon fichier "myBee.cpp", je souhaite créer une abeille qui apparaitrait dans cette grille...
Hors quand j'écris le code suivant :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
	glMatrixMode(GL_MODELVIEW);
	//initialise the modelview matrix to the identity matrix
	glLoadIdentity();
 
	glTranslatef(0.0,0.0,-50.0);
	glRotatef(90,1.0,0.0,0.0);
	//draw a bee entity at the right position
	glBegin(GL_TRIANGLES);
		glColor3f(1.0,1.0,1.0);
		glVertex2f(0.0,0.0);	
        glVertex2f(50.0,0.0);	
        glVertex2f(25.0,50.0);
	glEnd();
 
	//flush what we've drawn to the buffer
	glFlush();
	//swap the back buffer with the front buffer
	glutSwapBuffers();
L'abeille n'apparait pas dans ma fenêtre. J'ai bien essaye d'enlever la définition de la Matrix, ces fonctions pour être exacte : glMatrixMode, glLoadIdentity, glTranslatef, glRotatef, glFlush et glutSwapBuffers; mais le résultat est un triangle qui est "déformé" par rapport à ce que je dessine...

Désole pour ces erreurs de débutant mais grâce à vous j'avance petit à petit dans ce projet que je ne maitrisais pas du tout
lightalex01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 10h49   #13
Membre à l'essai
 
Homme Alexandre
Étudiant
Inscription : décembre 2010
Messages : 44
Détails du profil
Informations personnelles :
Nom : Homme Alexandre
Âge : 20
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2010
Messages : 44
Points : 24
Points : 24
Et je suis tout à fait d'accord avec vous LittleWHite et GPPro, mais il ne s'agit la que d'un petit projet pour mon université dans lequel nous sommes obligé d'utiliser OpenGL...

Je m'en tiendrai donc à une application mal modélisée mais qui implémente l'algorithme A-Star sur des abeilles.

Merci de votre aide en tout cas !
lightalex01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 11h19   #14
Membre habitué
 
Homme Gilles
Inscription : août 2011
Messages : 47
Détails du profil
Informations personnelles :
Nom : Homme Gilles
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : août 2011
Messages : 47
Points : 122
Points : 122
Citation:
Envoyé par lightalex01 Voir le message
Et je suis tout à fait d'accord avec vous LittleWHite et GPPro, mais il ne s'agit la que d'un petit projet pour mon université dans lequel nous sommes obligé d'utiliser OpenGL...

Je m'en tiendrai donc à une application mal modélisée mais qui implémente l'algorithme A-Star sur des abeilles.

Merci de votre aide en tout cas !
Oui, mais n'oublie pas que c'est en forgeant qu'on devient forgeron. Si tu as un minimum de temps devant toi, fais du mieux que tu peux. Accessoirement ça s'en ressentira sur ta note (j'ai été enseignant en fac).
Et n'hésite pas à justifier tes choix si tu as un rapport à faire avec le projet, histoire d'être sûr que le prof comprenne les choses (là aussi je parle d'expérience, ils n'en sont pas tous capables si tu le leur montres pas explicitement).
GPPro est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/02/2012, 12h04   #15
Responsable C++
 
Homme Guillaume Belz
Biochimiste
Inscription : novembre 2008
Messages : 2 904
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Belz
Âge : 36
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Biochimiste
Secteur : Santé

Informations forums :
Inscription : novembre 2008
Messages : 2 904
Points : 13 010
Points : 13 010
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 :
Code :
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
__________________
Vous souhaitez rejoindre l'équipe de bénévoles qui fait vivre Developpez (traduction, rédaction, modération) ? Contactez moi par MP.

Ma page personnelle avec la liste de mes articles - Mon blog sur la programmation des GPU.

Je suis régulièrement sur le chat pour les questions C++/Qt.
gbdivers est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/02/2012, 12h07   #16
Responsable 2D/3D/Jeux

 
Avatar de LittleWhite
 
Homme Alexandre Laurent
Étudiant
Inscription : mai 2008
Messages : 6 567
Détails du profil
Informations personnelles :
Nom : Homme Alexandre Laurent
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2008
Messages : 6 567
Points : 14 051
Points : 14 051
Sinon, en résolution du bug cité précédemment, il faut réinitialiser la matrice (qui est une matrice modèle, car celle qui définit la position d'une abeille).
Pour ce faire, il faut utiliser glLoadIdentity().

Je commence à croire (disons que j'ai souvent douter dans ma vie) que faire un diagramme UML correctement, pour architecturer une application permet de coder plus vite car cela enlève les doutes que l'on a fasse à la page blanche de l'éditeur)
__________________
Vous souhaitez participer à la section Jeux ? Contactez-moi
La rubrique a aussi un blog !

Ma page sur DVP
Mon Portfolio

Qui connaît l'erreur, connaît la solution.
LittleWhite est déconnecté   Envoyer un message privé Réponse avec citation 21
Vieux 09/02/2012, 12h29   #17
Membre habitué
 
Homme Gilles
Inscription : août 2011
Messages : 47
Détails du profil
Informations personnelles :
Nom : Homme Gilles
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : août 2011
Messages : 47
Points : 122
Points : 122
Citation:
Envoyé par LittleWhite Voir le message
Sinon, en résolution du bug cité précédemment, il faut réinitialiser la matrice (qui est une matrice modèle, car celle qui définit la position d'une abeille).
Pour ce faire, il faut utiliser glLoadIdentity().

Je commence à croire (disons que j'ai souvent douter dans ma vie) que faire un diagramme UML correctement, pour architecturer une application permet de coder plus vite car cela enlève les doutes que l'on a fasse à la page blanche de l'éditeur)
Ca aide au début, mais très vite on devient capable de concevoir les choses s'en se référer à des diagrammes UML (d'où le TDD).
GPPro est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 09/02/2012, 13h50   #18
Membre éprouvé
 
Homme Eric
Inscription : décembre 2010
Messages : 254
Détails du profil
Informations personnelles :
Nom : Homme Eric
Localisation : France

Informations forums :
Inscription : décembre 2010
Messages : 254
Points : 450
Points : 450
Ça dépend des applications et du nombre de personnes qui travaillent dessus. Dès qu'on est plusieurs et/ou que l'application est un peu grosse, quelques diagrammes font un très grand bien. Personne n'oblige à utiliser UML pour modéliser la moindre POD attribut par attribut et la moindre séquence jusqu'au plus petit clic, mais quelques diagrammes sur les points les plus "chauds" aident au raisonnement et/ou à la communication.
therwald est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 13h52   #19
Membre Expert
 
Jean-Bernard
Inscription : mars 2007
Messages : 817
Détails du profil
Informations personnelles :
Nom : Jean-Bernard
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mars 2007
Messages : 817
Points : 1 251
Points : 1 251
Citation:
Envoyé par LittleWhite Voir le message
Je commence à croire (disons que j'ai souvent douter dans ma vie) que faire un diagramme UML correctement, pour architecturer une application permet de coder plus vite car cela enlève les doutes que l'on a fasse à la page blanche de l'éditeur)
Pas toujours obligé de passer par UML. Un schéma basique sur une feuille suffit pour se remettre les idées en place.
jblecanard est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/02/2012, 18h51   #20
Membre à l'essai
 
Homme Alexandre
Étudiant
Inscription : décembre 2010
Messages : 44
Détails du profil
Informations personnelles :
Nom : Homme Alexandre
Âge : 20
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2010
Messages : 44
Points : 24
Points : 24
Citation:
Envoyé par gbdivers Voir le message
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 :
Code :
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
Merci beaucoup pour cela, mais j'aimerais comprendre ta réflexion : est-ce que chaque structure que tu as représentée est pour toi une classe différente ?
lightalex01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h25.


 
 
 
 
Partenaires

Hébergement Web