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

Programmation multimédia/Jeux Python Discussion :

[Aide] Fonction dans un jeu


Sujet :

Programmation multimédia/Jeux Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur étude et Développement
    Inscrit en
    Novembre 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur étude et Développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 21
    Points : 20
    Points
    20
    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 : 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
    # -*- 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
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 277
    Points : 36 762
    Points
    36 762
    Par défaut
    Salut,
    Je remplacerais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	return nomMob
    	return vieMob
     
    print ("Le "+mob()+" a "???????" PV.")
    par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : 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
    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.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur étude et Développement
    Inscrit en
    Novembre 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur étude et Développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 21
    Points : 20
    Points
    20
    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 : 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
    # -*- 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
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 277
    Points : 36 762
    Points
    36 762
    Par défaut
    Salut,

    Lorsque vous écrivez:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Aide fonctions dans octave
    Par cyberkamikaz dans le forum Octave
    Réponses: 0
    Dernier message: 24/03/2010, 21h51
  2. Aide pour utiliser une fonction dans un "case"
    Par lcoulon dans le forum Débuter
    Réponses: 2
    Dernier message: 15/10/2009, 22h17
  3. [AIDE] Appeler fonction dans une requête
    Par Diablo_22 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 18/03/2009, 11h11
  4. Aide pour disséquer deux fonctions dans mon code
    Par joomoo79 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/11/2008, 16h53
  5. Aide fonction recherche dans VBA
    Par Koopa55 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 22/05/2008, 12h02

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