Partage
  • Partager sur Facebook
  • Partager sur Twitter

Créer des objets en cours d'exécution

donc sans connaître le nom de la variable en avance

    12 avril 2022 à 23:01:55

    Bonjour à tous,

    j'essai de faire un petit clone de Pokémon uniquement pour m'exercer (donc RPG Maker ne m'intéresse pas, c'est vraiment un exercice de C++ :) ).

    Mon seul pokémon en jeu est Pikachu (je n'ai pas besoin d'autres), il n'y a que lui qui apparaît dan les hautes herbes. Mon problème, c'est que je veux plusieurs pikachu, mais que je ne sais pas à l'avance combien, ni lesquels. Je doit donc créer des objets de classe pikachu en cours d'éxécution. Ceci :

    Pikachu monPika = Pikachu();

    ne peut pas fonctionner.

    Ca me fait penser à l'allocation dynamique. J'ai checké sur google l'allocation dynamique d'objet. Voici une piste que j'ai trouvée : 

    Pikachu *pointeurPika;
    pointeurPika = new Pikachu();


    Mais ensuite pour conserver mes pikachu ? Le plus logique serait de les stocker dans une liste de pikachu. Vu ma problématique de "je ne sais pas combien il y en a", je doit m'orienter vers des std::vectorJe devrai y stocker l'objet pointé par pointeurPika, puis retirer le lien entre pointeurPika et le dit objet, puis recommencer à créer un nouveau pikachu avec new. Malheureusement, je ne sais pas comment faire la deuxième étape, pouvez-vous me dire comment m'y prendre ?

    Cette méthode étant exposée, je la trouve très lourde. Ma deuxième question, en plus de celle 2 ligne plus haut, et donc de savoir si vous avez une autre méthode à me proposer ? (sachant que cette méthode ne devra pas bloquer ma prochaine problématique : enregistrer les objets dans des fichiers. Oui pour sauvegarder les pikachu capturés, et les retrouver en relançant le jeu. Mais ce n'est pas le problème du moment. Chaque chose en son temps.)

    Merci par avance !

    • Partager sur Facebook
    • Partager sur Twitter
      12 avril 2022 à 23:27:29

      Tsuruba a écrit:

      Ca me fait penser à l'allocation dynamique. J'ai checké sur google l'allocation dynamique d'objet. 

      Si tu dois chercher sur google pour l'allocation dynamique, c'est que tu ne suis pas un cours de C++. C'est une erreur, on n'apprend pas un langage en faisant du code random trouvé sur internet. Suis un cours de C++.

      Tsuruba a écrit:

      Je devrai y stocker l'objet pointé par pointeurPika, puis retirer le lien entre pointeurPika et le dit objet, puis recommencer à créer un nouveau pikachu avec new. Malheureusement, je ne sais pas comment faire la deuxième étape, pouvez-vous me dire comment m'y prendre ?

      A priori, ta question n'a pas de sens. Tu te pose ce genre de question parce que tu ne comprends pas ce que tu fais. Il faut lire un cours de C++.

      Tsuruba a écrit:

      savoir si vous avez une autre méthode à me proposer ?

      Un simple :

      std::vector<Pikachu> mes_pikachus;

      Mais tout dépend de ce que tu veux faire exactement et le reste de ton code.

      Tsuruba a écrit:

      (sachant que cette méthode ne devra pas bloquer ma prochaine problématique : enregistrer les objets dans des fichiers. Oui pour sauvegarder les pikachu capturés, et les retrouver en relançant le jeu. Mais ce n'est pas le problème du moment. Chaque chose en son temps.)

      Ce sont 2 problématiques différentes. Quelque soit la méthode choisie dans ton code, cela ne changera rien a l'enregistrement dans un fichier.

      • Partager sur Facebook
      • Partager sur Twitter
        13 avril 2022 à 4:42:01

        Snif ... moi qui ai fait de l'allocation dynamyque en C ...
        Tu as vraiment intérêt à suivre les conseils de gbdivers.
        Si tu sais comment afficher tes Pikachu, tu sauras bien lees écrire dans un fichier.
        • Partager sur Facebook
        • Partager sur Twitter

        Le Tout est souvent plus grand que la somme de ses parties.

          13 avril 2022 à 11:16:16

          Bonjour,

          Tu as un cours à jour/moderne de C++ sur le site www.zestedesavoir.com

          • Partager sur Facebook
          • Partager sur Twitter

          Mon site web de jeux SDL2 entre autres : https://www.ant01.fr

            13 avril 2022 à 12:01:42

            J'ai suivi un cours de C++ en école justement, donc je cherche sur google quand je ne sais pas. Je ne vois vraiment pas où est le problème là dedans. 

            gbdivers, quand tu dis "un simple :

            std::vector<Pikachu> mes_pikachus;

            tu veux dire créer mes objets directement à chaque éléments du vecteur ? 

            Oui c'est vrai que j'ai pas expliqué ce que je voulais faire. Exit les combats pour l'instant, je veux juste faire la capture de pikachu, puis pouvoir accéder à leurs noms, et leurs différentes statistiques. Je complexifierai plus tard. Du coup je prend cette méthode, simplement faire mes_pikachus[0] mes_pikachus[1]... Merci !


            pour l'écriture dans un fichier, je me doute que je vais modifier ma méthode afficher, et utiliser les << vers un flux de fichier plutôt que vers le flux de la sortie standard. Mais j'ai déjà eu quelques problèmes avec la sauvegarde d'objets en python, en croyant que c'était simple. Donc là, même si c'est pas le même langage, je me poserai la question plus sérieusement.

            ++

            • Partager sur Facebook
            • Partager sur Twitter
              13 avril 2022 à 15:01:39

              > J'ai suivi un cours de C++ en école justement, donc je cherche sur google quand je ne sais pas. Je ne vois vraiment pas où est le problème là dedans.
              Si c'est l'École 42 c'est encore pire qu'OpenClassrooms. On n'a apprend vraiment pas les bonnes pratiques.
              Et pour Python, l'entrée / sortie n'est pas aussi affreuse que tu le décrit.
              • Partager sur Facebook
              • Partager sur Twitter

              Le Tout est souvent plus grand que la somme de ses parties.

                13 avril 2022 à 15:12:44

                PierrotLeFou a écrit:

                Si c'est l'École 42 c'est encore pire qu'OpenClassrooms.

                Tu l'as faite ? Tu peux m'en dire plus ?

                • Partager sur Facebook
                • Partager sur Twitter
                  13 avril 2022 à 15:20:49

                  Je n'ai pas fait l'École 42 mais on a régulièrement des gens qui postent et disent l'avoir fait.
                  Ensuite, j'ai contacté les superviseurs de l'École 42 de Québec et ce n'est pas rassurant ...

                  À moins qu'il y ait un petit génie dans le groupe, ils risquent de s'enliser dans des pratiques plus que douteuses.

                  -
                  Edité par PierrotLeFou 13 avril 2022 à 15:25:55

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Le Tout est souvent plus grand que la somme de ses parties.

                    13 avril 2022 à 15:32:31

                    PierrotLeFou a écrit:

                    Je n'ai pas fait l'École 42 mais on a régulièrement des gens qui postent et disent l'avoir fait.

                    Il n'en sont pas satisfait ?

                    PierrotLeFou a écrit:

                    et ce n'est pas rassurant ...

                    pas rassurant, c'est à dire ?



                    • Partager sur Facebook
                    • Partager sur Twitter
                      13 avril 2022 à 17:32:12

                      Juste en passant rapidement

                      > Il n'en sont pas satisfait ?

                      Etre satisfait n'est pas un critère de qualité, surtout quand les personnes n'ont pas le recul pour juger le contenu technique de ce qu'ils apprennent.

                      • Partager sur Facebook
                      • Partager sur Twitter
                        13 avril 2022 à 17:40:20

                        C'est pour noyer le poisson dans l'eau ?

                        Quel est donc leur problèmes aux gens de 42 qui passe ici ?  Je viens de tant en tant sur le forum, je n'en vois pas tant que cela.

                        • Partager sur Facebook
                        • Partager sur Twitter
                          13 avril 2022 à 17:53:02

                          Il est vrai que c'est surtout sur le discord qu'on en voit souvent. En particulier parce qu'il y a un canal "Études" où les gens demandent des conseils sur les différentes écoles.

                          Globalement, ce qui est reproché, c'est de faire du marketing sur une "pédagogie nouvelle" alors qu'en fait, il n'y a pas de pédagogie, pas de prof, pas de cours (oui, je simplifie, il y a des "cours" donnés par des élèves en année sup ou d'anciens élèves), et que c'est au final juste de l'auto apprentissage (*) avec une forte sélection selon la capacité à supporter la "surcharge de travail" (ou on pourrait dire "l'exploitation des personnes").

                          (*) en soi, l'auto apprentissage n'est pas un problème. Même les étudiants en fac ou école d'ingé font aussi de l'auto apprentissage. Mais il y a une grosse différence entre faire de l'auto apprentissage tout seul, et faire de l'auto apprentissage en complément d'une formation et quand on a les bases méthodologiques de l'apprentissage.

                          Un résumé provenant du discord :

                          • Partager sur Facebook
                          • Partager sur Twitter
                            13 avril 2022 à 18:05:46

                            @gbdivers:
                            Tu as plus que résumé ce que je voulais dire.
                            + pas de cours
                            + pas de notion d'algorithmique
                            + pas de méthodologie
                            Et ils se défendent que les gens trouvent des emplois facilement sur le marché. Quel marché?
                            • Partager sur Facebook
                            • Partager sur Twitter

                            Le Tout est souvent plus grand que la somme de ses parties.

                              13 avril 2022 à 19:29:20

                              Salut,

                              gbdivers a écrit:

                              Juste en passant rapidement

                              > Il n'en sont pas satisfait ?

                              Etre satisfait n'est pas un critère de qualité, surtout quand les personnes n'ont pas le recul pour juger le contenu technique de ce qu'ils apprennent.

                              Zero.c a écrit:

                              C'est pour noyer le poisson dans l'eau ?

                              Quel est donc leur problèmes aux gens de 42 qui passe ici ?  Je viens de tant en tant sur le forum, je n'en vois pas tant que cela.

                              Non, c'est malheureusement une réalité que l'on retrouve dans tous les domaines: on ne sait pas "être" et "avoir été" en même temps

                              Ta "satisfaction" n'est que le "baromètre" de la facilité avec laquelle tu as réussi à comprendre ce que l'on t'expliquait, et non de la "qualité intrinsèque" de ce que tu as compris. Ce n'est en rien comparable avec la satisfaction que tu peux éprouver à l'achat d'une machine à laver, par exemple!

                              Lorsque tu achète une machine à laver ta satisfaction peut se baser sur des éléments concrets comme:

                              • la solidité (au moins apparente) des parois
                              • la rigidité du châssis
                              • les programmes de lavage possible
                              • la consommation électrique qui a été avancée
                              • ou que sais-je encore ...

                              Avec le temps, l'usage que tu feras de ta machine à laver viendra confirmer (ou non)  ta satisfaction (ou ta déception), parce que, quinze ans plus tard, après avoir élevé cinq enfants, tu rendra compte qu'elle fonctionne toujours aussi bien, et qu'elle n'est jamais tombée en panne (ou parce que, justement, elle est tombée en panne après deux cycles de lavages à peine).

                              Cela ne se passe pas du tout de la même manière avec la programmation.  Car les seuls exemples sur lesquels tu peux t'appuyer sont ... les programmes (finis) que tu as utilisés. Or, il s'agit -- justement -- d'apprendre à créer ces programmes.

                              Si bien que, lorsque tu débarque à l'Ecole 42 ou sur le tutoriel du site, tu ne sais absolument rien de ce qui t'attend. Et, dés le moment où tu auras ne serait-ce que l'impression de comprendre ce qui t'est expliqué, tu vas "naturellement" être "satisfait" parce que tu auras le sentiment d'avoir "appris quelque chose".

                              Et ce sentiment est normal.  Seulement, avec ce sentiment d'avoir appris quelque chose, nous nous approchons furieusement du point où l'effet Dunning-Kruger va pointer le bout de son nez:

                              En effet, grâce à l'apprentissage, tu  vas gagner "un peu" d'expérience. Et comme les exercices que l'on va te donner sont en relation directe avec ce qui t'a été expliqué, tu vas forcément avoir l'impression de "savoir" et de "connaitre".

                              Puis, viendra forcément ce qui peut être vécu comme un "long moment de solitude" parce que tu vas "t'ouvrir vers le monde extérieur", par exemple, en venant poser une question ici même.

                              Car, pour ton "malheur" (ou est-ce pour ton bonheur???), tu vas être confronté à des gens qui ont l'expérience et la pratique. Dont certains ont fait leur métier du développement informatique, et qui savent donc exactement de quoi ils parlent.  Et ces gens sont généralement unanimes: quand un cours n'est "qu'un ramassis de c...ries", il se mettent généralement en chœur pour le dire à l'unisson.

                              LA CLAQUE!!! : Alors que tu était persuadé d'avoir appris des trucs utiles et de les avoir bien compris, voilà que tout le monde se dresse contre toi et te dit, chacun à sa manière, que tu es bon pour tout recommencer, parce que  ce que tu as appris jusqu'ici, c'est "bulshit" :$

                              La suite, cela va dépendre de toi... On (comprend: ceux qui savent de quoi ils parlent) vient avec des arguments, des points de vue et des solutions qui arrivent généralement à te convaincre que "l'on n'a peut être pas tout à fait tord" ( à défaut d'arriver à te convaincre que l'on a raison, mais ca, ca viendra plus tard :D).

                              Soit tu vas accepter cet état de fait et tu vas "rectifier le tir", soit, car nous avons eu quelques cas épiques, tu vas t'obstiner à refuser la moindre remise en cause de ce que tu as appris ou du cours que tu as suivi.  Et tu t'étonnera de ne décidément pas arriver à ton but, tu en viendras à remettre en cause la qualité des compilateurs, de leur implémentation de la bibliothèque standard, juste parce que tu n'a pas l'honnêteté intellectuelle d'avouer que tu as pu te planter.

                              PS: Ceci dit, pour te rassurer, nous ne faisons aucune discrimination: on déblatère de la même manière sur le tutoriel du site que sur n'importe quel professeur, de n'importe quel établissement, qui s'obstinerait à apprendre le C++ à ses élèves de la manière dont nous l'avons nous même appris il y a vingt ans et plus ;)

                              -
                              Edité par koala01 13 avril 2022 à 19:57:53

                              • Partager sur Facebook
                              • Partager sur Twitter
                              Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait

                              Créer des objets en cours d'exécution

                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                              • Editeur
                              • Markdown