IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Application C++ avec OpenGL


Sujet :

C++

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

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

    Informations forums :
    Inscription : Décembre 2010
    Messages : 95
    Points : 76
    Points
    76
    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

  2. #2
    Membre confirmé Avatar de themadmax
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 446
    Points : 496
    Points
    496
    Par défaut
    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

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 965
    Points
    32 965
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    GLUT n'étant pas maintenue depuis 1998, j'utilise pour ma part glfw pour créer un contexte OpenGL aisément.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Membre confirmé Avatar de themadmax
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 446
    Points : 496
    Points
    496
    Par défaut
    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

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 575
    Points
    218 575
    Billets dans le blog
    120
    Par défaut
    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 rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  6. #6
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

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

    Informations forums :
    Inscription : Décembre 2010
    Messages : 95
    Points : 76
    Points
    76
    Par défaut
    Tout d'abord merci pour vos réponses !

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 965
    Points
    32 965
    Billets dans le blog
    4
    Par défaut
    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.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  8. #8
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

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

    Informations forums :
    Inscription : Décembre 2010
    Messages : 95
    Points : 76
    Points
    76
    Par défaut
    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)

  9. #9
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 575
    Points
    218 575
    Billets dans le blog
    120
    Par défaut
    Pour modifier la position de l'abeille, je pense que vous pouvez utiliser glTranslate()
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  10. #10
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Août 2011
    Messages : 342
    Points : 1 091
    Points
    1 091
    Par défaut
    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.

  11. #11
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 575
    Points
    218 575
    Billets dans le blog
    120
    Par défaut
    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 rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  12. #12
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

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

    Informations forums :
    Inscription : Décembre 2010
    Messages : 95
    Points : 76
    Points
    76
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  13. #13
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

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

    Informations forums :
    Inscription : Décembre 2010
    Messages : 95
    Points : 76
    Points
    76
    Par défaut
    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 !

  14. #14
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Août 2011
    Messages : 342
    Points : 1 091
    Points
    1 091
    Par défaut
    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).

  15. #15
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  16. #16
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 575
    Points
    218 575
    Billets dans le blog
    120
    Par défaut
    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 rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  17. #17
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Août 2011
    Messages : 342
    Points : 1 091
    Points
    1 091
    Par défaut
    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).

  18. #18
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Points : 1 475
    Points
    1 475
    Par défaut
    Ç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.

  19. #19
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    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.
    Find me on github

  20. #20
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

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

    Informations forums :
    Inscription : Décembre 2010
    Messages : 95
    Points : 76
    Points
    76
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ?

Discussions similaires

  1. Application multiplateforme avec interface graphique
    Par TNorth dans le forum Choisir un environnement de développement
    Réponses: 2
    Dernier message: 31/01/2004, 18h55
  2. Réponses: 2
    Dernier message: 26/05/2003, 19h42
  3. [Kylix] application console avec kylix 3 ?
    Par Hakim dans le forum EDI
    Réponses: 4
    Dernier message: 15/11/2002, 22h45
  4. interface utilisateur avec OpenGL
    Par demis20 dans le forum OpenGL
    Réponses: 6
    Dernier message: 03/10/2002, 12h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo