Partage
  • Partager sur Facebook
  • Partager sur Twitter

Dictionnaire et parcours

Sujet résolu
    10 mars 2011 à 12:40:03

    Bonjour, je reviens à la charge avec mes pouvoirs.
    On m'a conseillé de créer un dictionnaire pour stocker mes effets de pouvoir

    Voici la création de ma classe.

    class Effect(object): # Exemple : Congelation : Immobilise l'ennemi sur place
    	EffectCount = 1
    	effectAll = {}
    
    	def __init__(self, name, desc):
    		""" Create an item """
    		self.id = Effect.EffectCount
    		self.name = name
    		self.desc = desc
    		Effect.EffectCount += 1
    		print ('Creation of', self.name)
    		Effect.effectAll[name] = (self, desc)
    
    	def __str__(self):
    		return self.name
    

    J'ai repris sa de Yohann qui me la conseillé. Mais je suis un peu perdu.
    cela va t'il me créer un dictionnaire complet unique de tous les pouvoirs que je créé?
    Je souhaiterais les afficher de la sorte :

    Nom du pouvoir > Desc du pouvoir
    Mais je ne m'en sort pas :/ print (Effect.effectAll['Brulure'].name) il n'aime pas.

    Merci une fois de plus.
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      10 mars 2011 à 14:30:04

      Vite fait j'ai fais ceci qui fonctionne très bien, je ne comprend pas pourquoi tu t'évertues à gérer un dico dans ton __init__

      >>> class Pouvoir(object):
      ...     def __init__(self):
      ...         self.dico = {}
      ...     def descript(self, power, descript_power):
      ...         self.dico[power] = descript_power
      ...     def get_dico(self):
      ...         return self.dico
      ... 
      >>> P = Pouvoir()
      >>> P.descript("congelation", "tu vas congeler")
      >>> P.get_dico()
      {'congelation': 'tu vas congeler'}
      
      • Partager sur Facebook
      • Partager sur Twitter
        10 mars 2011 à 14:44:42

        Hum oui ok sa marche bien. Maintenant dans ma classe Character je veux lui attribuer un pouvoir. Je procédais ainsi :
        class Character(object):
        	def ChooseAPower(self, powerAll): #powerAll était ma liste-tuples de pouvoir
        		""" Allow to choose one power and add it to your hero """
        		Power.DisplayAll() # une méthode qui affichait tout mes pouvoirs
        		choice = EnterAnInt(1,Power.PowerCount) #entre 1 et le nombre de pouvoir créer, soit le max
        		print ('\n Vous avez choisi'+ powerAll[(choice-1)].name) #J'allais cherche dans ma liste, le pouvoir correspond avec son index
        		self.power = powerAll[choice-1] j'affecte le pouvoir à l'attribut power de l'objet character
        		return powerAll[choice-1]
        


        Mais avec ton nouveau dico, plus rien n'est compatible..
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          10 mars 2011 à 14:48:17

          C'est là où tu découvres (enfin je sais pas hein :p) l'héritage.

          Un exemple avec ce que je t'ai donné comme code précédent, ça marche super

          class Pouvoir(object):
              def __init__(self):
                  self.dico = {}
              def descript(self, power, descript_power):
                  self.dico[power] = descript_power
              def get_dico(self):
                  return self.dico
          
          class Personnage(Pouvoir):
              def __init__(self, name):
                  Pouvoir.__init__(self)
                  self.name = name
              def test_personnage(self):
                  if self.name == "Troll":
                      self.descript("congelation", "{0} te congelera".format(self.name))
                      return self.get_dico()["congelation"]
          
          P = Personnage("Troll")
          print P.test_personnage()
          


          Résultat

          Troll te congelera
          • Partager sur Facebook
          • Partager sur Twitter
            10 mars 2011 à 14:52:16

            J'ai appris en cours que héritage ce n'était pas pour sa.
            Pour moi héritage =
            class personne (nom prenom age)
            class employe (fonction) : personne

            La classe employe hérite de la classe personne donc elle a un nom prenom age et une fonction..


            PS: On m'enseigne le C# mais sa ne me plait guère. J'apprends le python.
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              10 mars 2011 à 15:01:57

              Euhhh l'héritage c'est acquérir des fonctions d'une classe indépendante de classe que tu écris.

              En gros si t'as besoin d'une méthode d'une classe externe, tu hérites dans ta classe.

              Un exemple :

              class ma_liste(list): #j'herite de la classe list avec ses méthodes append, remove, etc...
                  def __init__(self, liste):
                      list.__init__(self, liste)
                      self.liste = liste
                  def add(self, nb):
                      return self.append(nb)
                  def sub(self, nb):
                      return self.remove(nb)
                  def get(self):
                      return self
              
              a = ma_liste([12, 6, 9])
              a.add(16)
              a.sub(12)
              print a.get()
              


              Résultat :

              [6, 9, 16]


              En gros ton prof te donne un cas pratique, mais pas général, il faut adapter l'héritage selon tes besoins.

              D'ailleurs l'héritage n'est pas forcément utile, tout dépend de ton design pattern
              • Partager sur Facebook
              • Partager sur Twitter
                10 mars 2011 à 15:11:06

                Hum. Tu me perds à chaque explication XD, je crois que je vais devoir refaire ma vision de la poo, et t'expliquer clairement ce que je veux.. car je ne remet pas en cause tes explications, (loin de là, j'attendais Fred1599 depuis 1h :D) mais tu ne réponds pas toujours ce que j'attends, tu vas trop loin je crois ^. je te mets au clair le plan de mon jeu d'ici 5 min. (en Edit)
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  10 mars 2011 à 15:15:53

                  Citation

                  Hum. Tu me perds à chaque explication XD, je crois que je vais devoir refaire ma vision de la poo, et t'expliquer clairement ce que je veux.. car je ne remet pas en cause tes explications, (loin de là, j'attendais Fred1599 depuis 1h :D) mais tu ne réponds pas toujours ce que j'attends, tu vas trop loin je crois ^. je te mets au clair le plan de mon jeu d'ici 5 min. (en Edit)



                  Non je ne te met pas quelque chose en correspondance avec ton jeu exprès, je veux que tu comprennes et que tu adaptes ce que je t'explique à ton jeu.

                  Si tu sais le faire tu auras compris ce que j'explique...

                  • Partager sur Facebook
                  • Partager sur Twitter
                    10 mars 2011 à 15:23:51

                    C'est un jeu simple de combat sans grande fonctionnalités pour l'instant.
                    Le but est de m'apprendre le Python.

                    Le joueur contrôle un personnage.
                    Un personnage dispose d'un pouvoir et de plusieurs objets (dans son inventaire par exemple)
                    Un pouvoir a un effet, pareil pour un objet.
                    Par exemple:
                    • le pouvoir "Froid Dévorant" inflige des dégâts et applique l'effet Congélation.
                    • l'objet Potion applique l'effet: Vie + 30.

                    Plusieurs pouvoirs applique le même effet (Froid Dévorant > Congélation, Vent Glacial > Congélation aussi !)

                    C'est pourquoi, je veux créer un pouvoir qui possède 3 attributs: nom, description et effet. Effet étant un objet déjà créé.
                    Puis affecter un pouvoir à un personnage. (nom, prénom, force, agilité, pouvoir (objet !).

                    Donc voila, mes problèmes sont :
                    Comment répertorier mes pouvoirs et mes objets ? dictonnaires, tuples, tuples-listes..
                    Comment les affecter (effet aux pouvoirs et objets, pouvoirs aux personnages)

                    Un forum anglais m'a conseillé de créer une liste-tuple de mes personnages et de mes pouvoirs

                    Voila à peu près.;
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      10 mars 2011 à 15:38:06

                      Citation

                      Effet étant un objet déjà créé



                      Oui mais de quel type? liste, string,...?

                      Citation

                      Comment répertorier mes pouvoirs et mes objets ?



                      Je ferais par dictionnaire, mais les autres sont aussi forts possibles.

                      dico_personnage = {"Troll" : "congelation"}
                      dico_pouvoirs = {"congelation", "tu seras congelé"}
                      


                      Mais c'est juste une idée.

                      Après c'est peut-être moi qui me complique un peu la vie, mais j'ai bien l'impression que ce n'est pas si simple que ça.

                      • Partager sur Facebook
                      • Partager sur Twitter
                        10 mars 2011 à 15:43:29

                        Mais dans ton dico Troll, tu lui affecte le pouvoir congélation la ?
                        Ou sont tous les autres attributs, force, agilité, nom...

                        Je crois que je vais d'abord devoir faire une mise au clair dans ma tête avant d'aller enquiquiner la tienne =)

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          10 mars 2011 à 15:49:08

                          Il faut que tu adaptes avec ce que tu connais déjà

                          Citation

                          Ou sont tous les autres attributs, force, agilité, nom...



                          dico_personnage = {"Troll":["congelation", 15, 8, "mega troll"]}
                          


                          Tu peux aussi créer un fichier csv, ou une base de donnée, tout est possible
                          • Partager sur Facebook
                          • Partager sur Twitter
                            10 mars 2011 à 15:52:49

                            Citation : fred1599

                            Tu peux aussi créer un fichier csv, ou une base de donnée, tout est possible


                            Ne compliquons pas plus les choses :D. Plus tard en effet j'aimerais interagir avec une bdd mysql ou mariadb.

                            Bon je vais codé un peu toute la soirée puis jreviendrais aux nouvelles ;)

                            Merci.
                            • Partager sur Facebook
                            • Partager sur Twitter

                            Dictionnaire et parcours

                            × 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