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 :

Question poo C++


Sujet :

C++

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Octobre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Octobre 2016
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Question poo C++
    Bonjour,

    J'ai une question relativement simple pour les initiés concernant la poo en c++

    Je cherche pour m'amuser à simuler des gouttes d'eaux tomber et une fois en bas essayer de former un "liquide".
    Pour cela j'ai créé une matrice 2D pour en faire mon environnement. 0 dans la case si il n'y a rien et 1 s'il y a une goutte d'eau.
    En gros dans un premier temps la goute aura pour mission d'aller dans la case en dessous si elle vaut 0, si elle vaut 1 elle reste a sa place.
    Rien de bien sorcier. Mais j'aimerais écrire ça sous forme d'allocation dynamique et en poo.
    Car j'aimerais inclure la pression la viscosité...

    je débute en poo.

    J'aimerais travailler dans la matrice 2D pour la map. 0 une case vide 1 une goute et 8 un mur.
    (pour le moment je travail qu'en console je mettrais un peu de SFML plus tard)

    Donc ma question est :

    Comment je peux écrire une goute comme objet/class avec des infos (Coordonnées x y, pression...)
    Et surtout comment le programme peut automatiquement générer une nouvelle goutte ? (et la détruire pour soulager la mémoire quand il n'y en aura plus besoin)

    Et durant mes itérations si une goute est ici : map[3][4] par exemple comment je peux aller chercher la valeur de la pression de la goutte situé en map[2][4] par exemple?

    Dois-je mettre dans le tableau2D les pointeurs de chaque goute ? si oui comment?

    Je ne sais pas si j'ai été clair, mais ce problème peut-etre le même si je veux créer des petits personnages dans un jeu... (par exemple un jeu comme age of empire...)
    J'ai des idées de jeux très très simples, je suis bon en programmation embarqué... et j'ai envie de me mettre à développer des petits jeux et à chaque fois je bloque car je ne sais pas comment générer le même objet plusieurs fois en interactions avec ses "clones" ou d'autre objets.

  2. #2
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    Si ton environnement est quantifié au niveau de la goutte (i.e. : c'est le niveau le plus fin de granularité) alors je ne vois pas d'utilité à créer un type dédié : la répartition des gouttes d'eau est décrite par les valeurs contenues dans la matrice. Le type des éléments de cette matrice peut être une simple structure qui regroupe plusieurs paramètres. Il suffit d'itérer sur les colonnes pour faire tomber les gouttes.

    En revanche, si les cases de ta matrices peuvent contenir une quantité d'eau exprimée avec plus d'un bit et/ou si les gouttes d'eau ont un déplacement continu (par opposition à un déplacement discret, d'un nombre entier de cases), alors tu auras peut-être besoin de décrire les gouttes avec des objets dédiés. Tu pourrais par exemple toutes les stocker dans une liste globale, ou mieux les partitionner directement dans la matrice : chaque case disposerait d'une liste évolutive des gouttes qui y sont présentes.

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 073
    Points : 12 119
    Points
    12 119
    Par défaut
    Ça sent le devoir à la maison.

    Citation Envoyé par bacelar
    "using namespace std;", on dégage (cf. des dizaines/centaines de files de messages dans ce forum).

    Pas de tableau à la C, et encore moi des tableaux à 2 dimensions ((cf. des dizaines de files de messages dans ce forum). Préférez utiliser des types C++, soit des types comme Matrice (voir dans ce forum les références), ou un std::vector monodimensionnel avec des mécaniques de calcul d'indice de R²->R.

    La "grille" n'est qu'un conteneur de données, il faudrait l'encapsulé dans une classe avec de vrais fonctionnalités, comme une classe "World", par exemple.

    Il faut que chaque classe ait un rôle bien défini en termes de services rendus.

    C'est quoi les services rendus par une classe "Goute" ?

    Sa position, non, c'est le "world" qui connait sa position.

    Sa pression vectorielle, ça dépend de comment elle est calculé, si c'est fonction uniquement de son environnement, c'est clairement de la responsabilité de "world" de la calculer.

    Donc une classe "Goutte" n'est peut-être pas souhaitable, si elle ne sert à rien.

    Juste une classe "World" contenant en interne une "grille" de int pour stocker le niveau d'eau peut faire l'affaire.

    >Dois-je créer un objet goutte ?

    Peut-être pas, car rien dans ton exposé n'oblige à l'utilisation d'une classe "Goutte".

    >si oui comment le générer plusieurs fois

    Si cette classe est nécessaire, le constructeur de la classe a pour rôle de générer les objets à la demande.

    >et comment une goutte X peut aller chercher l'info de la pression de la goutte X-1 par exemple ?

    Si cette classe est nécessaire, c'est le genre de service qu'une classe "World" doit être en possibilité de donner. Pour qu'une goutte connaisse le "world", suffit de le passer en paramètre du constructeur de la goutte, par exemple.

    >Le seul problème que je rencontre est la rédaction du C++

    Vous avez un problème à analyser le problème en terme d'objet, mais vous êtes très loin dans avoir fini. Il reste bien d'autres choses après l'analyse.

    >Dois-je trouver un moyen de mettre les pointeurs de chaque goutte dans la case de la matrice ?

    Pourquoi diable des pointeurs ??? On n'est même pas sûr que vous ayez besoin de goute.


    Faites une classe "World" contenant un champ Matrice<unsigned int> qui implémente les règles physiques du monde et je pense que cela suffira.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Octobre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Octobre 2016
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Nan trop vieux pour avoir un DM à faire

    Nan c'est juste par passion.

    J'apprends à mon rythme

    Je cherche à programmer avec SFML en C++ mais pour commencer je tests mes algos en mode console

  5. #5
    Membre expérimenté Avatar de SkyZoThreaD
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2013
    Messages
    583
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 583
    Points : 1 615
    Points
    1 615
    Par défaut
    Citation Envoyé par Rynon Voir le message
    Nan trop vieux pour avoir un DM à faire
    Ouai enfin il y a "Lycéen" sous ton pseudo
    Sinon, comme Matt l'a dit: pas besoin d'objets pour représenter une molécule... faire de la poo juste pour faire de la poo c'est contre-productif. Ou faut faire du Java (j'ai le droit c'est trolldi)
    La liberté est à la sociologie ce que l'instant présent est à la physique relativiste.

  6. #6
    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 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Tu peux faire une représentation à la jeu de la vie.
    Tu as une grille, chaque case peut avoir 3 états : Vide, Eau, Mur
    Tu lances une goutte d'eau, elle descend tant qu'elle peut, quand elle rencontre une autre goutte, random droite/gauche (attention à l'éventuel mur, ou goutte déjà présente d'un côté) et elle dérive, jusqu'à atteindre le sol, que les 3 cases dessous soient déjà pleines d'eau, ou rencontrer un mur.
    Dela POO là-dedans... pour quoi faire ?
    Eventuellement tu peux avoir une classe Goutte et Mur, mais c'est un peu de l'enculage de mouches. Un World, matrice d'enum, suffit amplement.
    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.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Octobre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Octobre 2016
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Pour le jeu de la vie, je connais bien
    J'ai essayé de faire la même chose

    j'ai réussi à programmer du "sable" c'est à dire des gouttes soumisent que à la gravité. Le problème se corse vraiment quand je veux mettre en place de la pression. Car dans le sable la seule contrainte est de regarder si elle a un voisin dans la case d'a côté..
    Avec de l'eau la pression intervient, donc je dois voir si elle à un voisin et la pression du voisin... si il y a beaucoup de gouttes la goutte en bas aura la pression accumuler de toutes les gouttes sur sa tête...

    Et cette gestion de la pression, je ne sais pas comment la représenter en C++. Je tourne en rond je pense ne pas utiliser la bonne méthode.
    J'avais commencé par utiliser un tableau 3D les deux première cases pour y et x et la 3ème case pour les infos, pression... Mais c'est un bordel monstre...
    C'est pour cela que je vous ai parlé d'objet.
    Je me disais que créer une classe goutte comprend calcul de sa pression...

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Pour ça, je verrais bien un tableau 2D de structures/objets Goutte, chacun contenant une valeur de pression qu'on calculerait de haut en bas...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 073
    Points : 12 119
    Points
    12 119
    Par défaut
    @Rynon, ne le prend pas mal, j'ai ajouté le speech sur de DM aussi pour que les administrateurs de DVP ne me casse pas les bonbons pour avoir directement donné un lien vers au autre site.

    Penses à regarder ma réponse, et celles des autres, sur l'autre site.

    Mais c'est quand même très bizarre, qu'au même moment ou presque, la même question (très particulière) sur des site différentes par des utilisateurs différents soit posée.

    mais pour commencer je tests mes algos en mode console
    C'est bien, l’adhérence à la couche d'IHM est plus facile à supprimer, si nécessaire.

    Je me disais que créer une classe goutte comprend calcul de sa pression...
    Bin non !!!

    Ce n'est pas la goutte qui connait sa pression. C'est le monde extérieur qui applique une pression.

    Si nous avons un objet "World" à qui on peut poser la question "World.getPressure(x,y,z)", ça serait bien plus simple et logique.

    Commencez simple, pas besoin d'une classe goutte pour le moment.
    Il est facile d'ajouter une classe si nécessaire, la supprimer, c'est bien plus délicat.

    Donc concevez une classe World, qui contient une grille (avec des classes adaptés type Matrix, cf. les liens dans les réponses sur le site OCR) de int. Le int représentant le niveau d'eau pour la cellule discrètes (x,y).
    Avec cette grille, n'êtes-vous pas en mesure d'implémenter la méthode "getPressure(x,y,z)" ?
    S'il manque des choses, comme la prise en compter des murs, il sera toujours temps de transformer cette Matrix<int> en Matrix<Goutte> (puis éventuellement en Matrix<reference_wrapper<...>> en fonction du type de sémantique que l'on veut pour la classe Goutte).
    Donc, on ne grille pas les étapes, faites une classe "World" en mesure de calculer une pression à un endroit précis.

Discussions similaires

  1. Template de liste, question POO
    Par losformen dans le forum C#
    Réponses: 5
    Dernier message: 23/03/2011, 09h18
  2. Question POO, états globaux
    Par Gruik dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 06/02/2010, 18h25
  3. [Templates] Quelques questions POO/Template
    Par iwf-fr dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 27/04/2007, 16h04
  4. Question Poo en delphi
    Par the big ben 5 dans le forum Delphi
    Réponses: 6
    Dernier message: 03/11/2006, 10h25
  5. [POO] Question POO
    Par shadeoner dans le forum Langage
    Réponses: 1
    Dernier message: 10/04/2006, 14h51

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