Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4
  1. #1
    Invité régulier
    Homme Profil pro Maxime Charron
    Étudiant
    Inscrit en
    novembre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Nom : Homme Maxime Charron
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2011
    Messages : 20
    Points : 9
    Points
    9

    Par défaut [Aide] Fonction dans un jeu

    Bonjour tout le monde, je viens ici car j'ai un léger problème.

    Je défini une fonction mob() qui retourne un mob aléatoirement. Jusque là tout fonctionne.

    Mais le problème est là : le mob retourné à des attributs (vieMob, nbDegatsMob..) et je ne sais pas comment les récupérer.

    J'ai donc ce code ci :

    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
    # -*- coding: utf-8 -*-
    #Caractéristiques mobs.py
     
    import random
     
    def mob():
    	lettre = random.choice('hgst')
    	if lettre == "t":
    		nomMob = "Troll"
    		vieMob = 70
    		nbDegatsMob = random.randint(1,15)
    	elif lettre == "g":
    		nomMob = "Gnoll"
    		vieMob = 50
    		nbDegatsMob = random.randint(1, 25)
    	elif lettre =="s":
    		nomMob = "Satyre"
    		vieMob = 120
    		nbDegatsMob = random.randint(5, 30)
    	elif lettre=="h":
    		 nomMob = "Hydralysk"
    		 vieMob = 250
    		 nbDegatsMob = random.randint(20, 70)
    	return nomMob
    	return vieMob
     
    print ("Le "+mob()+" a "???????" PV.")
    Et ici, je ne sais pas quoi mettre à la place des ??? pour avoir les points de vie du mob. J'ai déjà essayé les choses suivantes :

    mob().vieMob
    vieMob.mob()
    mob(vieMob)

    Mais nada, rien ne marche, j'ai toujours des erreurs. Pourrez-vous m'aider à résoudre ceci ? Ca me ferait avancer d'un pas gigantesque dans mon développement, parce que la je stagne, comme tout ce que je fais est aléatoire et a plusieurs attributs, je ne peux que tout ajouter au main et ca fait un code de 350 lignes alors que ca pourrait en faire 100 et avoir d'autres fichiers avec les fonctions à côté.

    Merci d'avance !

  2. #2
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    5 325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 5 325
    Points : 7 429
    Points
    7 429

    Par défaut

    Salut,
    Je remplacerais:
    Code :
    1
    2
    3
    4
    	return nomMob
    	return vieMob
     
    print ("Le "+mob()+" a "???????" PV.")
    par:
    Code :
    1
    2
    3
    4
    	return nomMob, vieMob
     
    n, v = mob()
    print ("Le "+n+" a "+v+" PV.")
    comme tout ce que je fais est aléatoire et a plusieurs attributs, je ne peux que tout ajouter au main et ca fait un code de 350 lignes alors que ca pourrait en faire 100 et avoir d'autres fichiers avec les fonctions à côté.
    Ne serait-il pas temps d'apprendre à réfléchir à regrouper les attributs qui sont communs à de mêmes objets en liste, dictionnaires,... et soyons fou "classes"?

    En exagérant un peu, vous pourriez écrire cela ainsi:
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    import random
     
    class MobType(type):
        registry = []
     
        def __init__(cls, *args, **kwds):
            if cls.__name__ != 'Mob':
                MobType.registry.append(cls)
     
        def create(cls):
            return random.choice(MobType.registry)()
     
    class Mob:
        __metaclass__ = MobType
     
        def __init__(self):
            self.vie = self.vie_initial
            self.degats = random.randint(*self.args_degats)
     
        @property
        def name(self):
            return self.__class__.__name__
     
        def __str__(self):
            return "%s a %d PV" % (self.name, self.vie)
     
    class Troll(Mob):
        vie_initial = 70
        args_degats = (1,15)
     
    class Gnoll(Mob):
        vie_initial = 50
        args_degats = (1, 25)
     
    class Satyre(Mob):
        vie_initial = 120
        args_degats = (5, 30)
     
    class Hydralysk(Mob):
        vie_initial = 250
        args_degats = (20, 70)
     
    print (Mob.create())
    Bon d'accord, ce n'est pas du code de débutant mais c'est juste pour vous montrer que l'ambition de faire des choses compliquées (et écrire 400 lignes de code commence à l'être) pourrait être aidée par la maîtrise de "bases" qui vous permettront d'organiser tout çà.

    Bon courage,
    - W
    Architectures Post-Modernes

  3. #3
    Invité régulier
    Homme Profil pro Maxime Charron
    Étudiant
    Inscrit en
    novembre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Nom : Homme Maxime Charron
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2011
    Messages : 20
    Points : 9
    Points
    9

    Par défaut

    Tout d'abords, merci pour cette réponse. Seulement, les classes, pour l'instant j'ai pas trop le temps d'apprendre concrètement a les gérer en Python. Je compte déjà finir l'apprentissage du Java pour comprendre un minimum le concept objet.

    Sinon, j'ai trouvé une parade pour mon problème, mais qui m'en a générer un autre :

    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
    # -*- coding: utf-8 -*-
    #Caractéristiques mobs
     
    import random
     
    def mob():
    	lettre = random.choice('hgst')
    	if lettre == "t":
    		#nomMob = "Troll"
    		#vieMob = 70
    		#nbDegatsMob = random.randint(1,15)
    		defMob = ("Troll", 70, random.randint(1,15))
    	elif lettre == "g":
    		#nomMob = "Gnoll"
    		#vieMob = 50
    		#nbDegatsMob = random.randint(1,25)
    		defMob = ("Gnoll", 50, random.randint(1,25))
    	elif lettre =="s":
    		#nomMob = "Satyre"
    		#vieMob = 120
    		#nbDegatsMob = random.randint(5,30)
    		defMob = ("Satyre", 120, random.randint(5,30))
    	elif lettre=="h":
    		 #nomMob = "Hydralysk"
    		 #vieMob = 250
    		 #nbDegatsMob = random.randint(20,70)
    		 defMob = ("Hydralysk", 250, random.randint(20,70))
    	return defMob
     
    print("Le "+str(mob()[0])+" a "+str(mob()[1])+" PV.")
    Le problème est que la valeur 1 est différente de celle rentrée dans le Tuple du mob.

    En fait, quand ca génère aléatoirement le choix du mob, j'ai un nomMob qui est donné, et ensuite, il régénère aléatoirement une lettre pour assigner une vieMob différente. Et je voudrais retourner directement la vieMob associé au nomMob de la variable defMob.

    Y'a un moyen de faire ça ? Merci d'avance !

  4. #4
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    5 325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 5 325
    Points : 7 429
    Points
    7 429

    Par défaut

    Salut,

    Lorsque vous écrivez:

    Code :
    print("Le "+str(mob()[0])+" a "+str(mob()[1])+" PV.")
    En appelant 2 fois mob(), ce sont les contenus de 2 mob différents sui sont affichés... normal!
    Ce que vous voudriez passerait plutôt par:
    Code :
    1
    2
    m = mob()
    print("Le "+str(m[0])+" a "+str(m[1])+" PV.")
    Seulement, les classes, pour l'instant j'ai pas trop le temps d'apprendre concrètement a les gérer en Python. Je compte déjà finir l'apprentissage du Java pour comprendre un minimum le concept objet.
    Si en plus vous vous dispersez vous aurez encore moins de temps.
    - W
    Architectures Post-Modernes

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •