Comparer les résultats de 2 dés

Fermé
EdFull Messages postés 8 Date d'inscription jeudi 29 octobre 2020 Statut Membre Dernière intervention 31 octobre 2020 - 29 oct. 2020 à 17:28
 Utilisateur anonyme - 2 nov. 2020 à 00:08
Bonjour à tous ! Je me permet d’écrire sur ce forum pour vous faire part de mes difficultés en code. En effet, j’ai un projet à réalisé pour mes études et je débute dans la programmation donc j’aurai besoin d’un petit peu coup de pouce.

Donc voilà le but de mon projet est de réaliser un jeu en Programmation orientée objet dans le langage Python.

Ce jeu se base sur la chance. Je m’explique, un joueur et un monstre vont « s’affronter » à l’aide de tirages de dés. En effet, celui ayant le plus grand nombre remporte le combat.
Par exemple, si le joueur lance le dé et obtient le chiffre « 8 » tandis que le monstre lui obtient le chiffre « 6 » alors le monstre perd de la vie. Même chose pour le joueur.


Je tiens à préciser que je n’ai pas inventé ce jeu, je l’ai trouvé sur un autre site : https://openclassrooms.com/fr/courses/2818931-programmez-en-oriente-objet-avec-c/2818991-tp-creez-un-petit-jeu-oriente-objet

-> Sur ce dernier les explications sont plus complètes et largement plus poussées.

Mon post s’adresse ainsi à ceux qui seraient retranscrire ce programme codé en C en programme codé en Python.

Ou alors, à ceux qui seraient m'aider là ou je suis rendu. En effet, à partir de ce stade là je n'ai créé que les deux classes "joueur" et "MonstreFacile" et je rencontre un problème.
Au moment du lancé de dé j'aimerai que les deux tirages (celui du joueur et du monstre") se comparent, problème je ne vois pas comment faire. J'ai pourtant essayer (avec une fonction combat) mais sans succès.

Pour vous donner un exemple plus concret:
"Le Joueur a tiré le chiffre 8", "Le monstre a tiré le chiffre 4" le joueur enlève alors des points de vies au monstre.

Voici mon code :
from random import*

class joueur():

    def __init__(self, NbreDeVie, NomDuPerso):
        self.vie=NbreDeVie
        self.nom=NomDuPerso

    def afficheEtat (self):
        print ("Il reste "+str(self.vie)+ " points de vie à " +self.nom)
        if self.vie == 0:
            print("Mario n'a plus de vie")

    def attaque (self):
        print(self.nom+ " veut attaquer "+ "monstre")


    def SubitDegats (self):
        print(self.nom + " subit des dégats de la part de " + "monstre" + " !")
        self.vie=self.vie-1

    def LanceleDe (self):
        self.LanceleDe
        tirage = randint(1,6)
        print(tirage)


Mario= joueur(150, "Mario")

#print(Mario.SubitDegats())

print("Le nombre tiré par notre joueur est")
print(Mario.LanceleDe())

#----------------------------

class MonstreFacile():

    def __init__(self,NbredeVie,NomduPerso): # on définit la méthode qui va initialiser les attributs
        self.vie=NbredeVie
        self.nom=NomduPerso


    def afficheEtat(self): #voici la méthode qui affiche l'état du personnage
        print ('Il reste '+str(self.vie)+' points de vie')

#OBJECTIF : Créer une méthode qui enlèvera un point de vie au personnage blesse, une méthode qui affichera le nombre de vies restantes

    def SubitDegats (self):#voici la méthode qui fait perdre 1 point de vie au personnage qui a subit une attaque
        print(self.nom + " subit des dégats de la part de " + "monstre" + " !")
        self.vie=self.vie-1


    def LanceleDe(self):
        self.LanceleDe
        tirage = randint(1,6)
        print(tirage)


# on crée une instance de la classe personnage nommée Bowser (plus d'indentation, car la définition de la classe est terminée)

Bowser=MonstreFacile(20,'Bowser') ##on crée l'instance Bowser sans oublier de passer le nombre de points de vie et le nom du personnage


print("Le nombre tiré par le monstre est")
print(Bowser.LanceleDe())

def combat(self):

    if Mario.LanceleDe >= Bowser.LanceleDe:
        Bowser.SubitDegats


Si jamais je n'ai pas été assez claire, n'hésitez pas à me le dire, en espérant que quelqu'un puisse m'aider !

Je vous remercie d'avance pour avoir pris le temps de lire ce post, passez tous une bonne journée !
A voir également:

9 réponses

Utilisateur anonyme
29 oct. 2020 à 19:51
Bonsoir

tout d'abord, un "petit" correctif, le langage C ne connait l'objet.
Le cours dont tu parles est un cours de C#, un lointain "descendant" de C.

Et "copier" un tutoriel, c'est pas tout à fait un travail personnel.

Bon revenons à ta question

en gros ton code
#code de la classe joueur

Mario= joueur(150, "Mario")

print("Le nombre tiré par notre joueur est")
print(Mario.LanceleDe())

#code de la classe Monstre

Bowser=MonstreFacile(20,'Bowser') ##on crée l'instance Bowser sans oublier de passer le nombre de points de vie et le nom du personnage


print("Le nombre tiré par le monstre est")
print(Bowser.LanceleDe())

# début de la fonction Combat


Déjà, y'a une définition, puis un peu de "code à exécuter", puis une seconde définition et encore un peu "code à exécuter" et encore une définition.

Il serait judicieux de regrouper les définition, puis de dérouler le jeu.
C'est plus clair et donc plus simple à écrire, débbogger, maintenir.


Quand on exécute, ça affiche par exemple
Le nombre tiré par notre joueur est                                                                                                                                                  
3                                                                                                                                                                                    
None                                                                                                                                                                                 
Le nombre tiré par le monstre est                                                                                                                                                    
2                                                                                                                                                                                    
None
     


Sachant que le combat n'a pas commencé... puisque la fonction n'est pas appelée

Il me semble logique que les tirages de dé se fassent dans la fonction combat.

Un truc comme ça

def combat(Joueur, Monstre):
    print("Le nombre tiré par notre joueur est")
    print(Joueur.LanceleDe())
    
    print("Le nombre tiré par le monstre est")
    print(Monstre.LanceleDe())


Bowser=MonstreFacile(20,'Bowser')
Mario= joueur(150, "Mario")
combat(Mario, Bowser)


C'est mieux rangé, et on a toujours un affichage du même type
Le nombre tiré par notre joueur est                                                                                                                                                  
3                                                                                                                                                                                    
None     #C'est quoi ce none?                                                                                                                                                                            
Le nombre tiré par le monstre est                                                                                                                                                    
2                                                                                                                                                                                    
None    #C'est quoi ce none?        
     


A ton avis d'où viennent les "none"?
Dans la fonction Combat, comment pourras tu comparer les lancés de dé?
0
EdFull Messages postés 8 Date d'inscription jeudi 29 octobre 2020 Statut Membre Dernière intervention 31 octobre 2020
30 oct. 2020 à 03:01
Bonsoir, comme je vous l’ai dit je débute dans la programmation donc je m’excuse si mon programme est un peu « en vrac ». En suite, j’ai fait une petite erreur, effectivement c’est bien du C# et non du C merci de me le faire remarqué !

De plus, mon but n’est pas de copier le travail de quelqu’un d’autre mais d’essayer de le refaire dans un autre langage. Le projet de la personne propose quelque chose d’assez complet qui reprend plusieurs notions de mon cours. J’ai donc trouvé intéressant de m’en servir pour en apprendre plus sur la programmation et ainsi progresser.

Pour en revenir au programme, il est vrai qu’il est judicieux de tout regrouper de la sorte merci pour votre conseil. En suite, j’ai moi aussi trouvé dérangeant ces « none » et je pense savoir pourquoi ces derniers apparaissent. En effet, c’est parce qu’il manque un « return » à ma fonction. Problème je ne vois pas comment l’intégrer, je pense qu’il me manque également une variable dans ma fonction. Ensuite, pour ce qui de la comparaison des lancés de dé je ne vois que la possibilité d’employer un « if ».

J’ai effectué ceci pour l’instant :

def combat(Joueur, Monstre):
print("Le nombre tiré par notre joueur est")
print(Joueur.LanceleDe())
return Joueur

DeMonstre = "LanceleDe"
print("Le nombre tiré par le monstre est")
print(Monstre.LanceleDe())
return DeMonstre

if DeJoueur >= DeMonstre:
Bowser.SubitDegats



Bowser=MonstreFacile(20,'Bowser')
Mario= joueur(150, "Mario")
combat(Mario, Bowser)


Malheureusement, ça ne marche pas et je ne vois pas vraiment comment faire :/.

En tout cas à ce stade, si j’ai bien compris et que j’ai raison, pour l’affiche des « none » je suis content ! Ces derniers me dérangeaient !

Au passage, merci de prendre du temps pour m’aider, c’est vraiment gentil !
0
Utilisateur anonyme
Modifié le 30 oct. 2020 à 09:25
En effet, il te manque des return quelque part.

Mais pas dans la fonction Combat.

Le mot clé return a 2 effets:
  • il stoppe l'exécution du bloc de code dans lequel il se trouve (une fonction en général)
  • il transmet un résultat à la ligne de code ayant appelé sa fonction


Problème n°1 => on ne veut pas de none
Problème n°2 => on veut récupérer les lancés de dé pour pouvoir les comparer avec un if

Ces 2 problèmes ont une solution commune

0
EdFull Messages postés 8 Date d'inscription jeudi 29 octobre 2020 Statut Membre Dernière intervention 31 octobre 2020
30 oct. 2020 à 22:34
Bon ça fait déjà des heures que je cherche, que j'essaie des choses et je n'y arrive toujours pas...
Je ne perd pas espoir bien sûr ! Mais pour le coup je me retrouve encore une fois bloqué.

En effet, je n'arrive pas à placer les "return" correctement, du moins au bon endroit. Quand je pense avoir réussi les "print" n'ont plus aucuns effets et rien ne s'affiche dans la console.

Même chose pour la comparaison et je pense que pour cette dernière il faut déjà que le début de mon programme soit correct, or ce n'est pas le cas, puisque je n'ai pas réussi à placer correctement les return.

Je n'ai pas la solution à ces 2 problèmes. J'ai beau essayé plusieurs choses à chaque fois, ça ne fonctionne pas.

Voici mon code actuel :

from random import*

class joueur():

def __init__(self, NbreDeVie, NomDuPerso):
self.vie=NbreDeVie
self.nom=NomDuPerso

def afficheEtat (self):
print ("Il reste "+str(self.vie)+ " points de vie à " +self.nom)
if self.vie == 0:
print("Mario n'a plus de vie")

def attaque (self):
print(self.nom+ " attaque "+ "monstre")


def SubitDegats (self):
print(self.nom + " subit des dégats de la part de " + "monstre" + " !")
self.vie=self.vie-1

def LanceleDe (self):
self.LanceleDe
tirage = randint(1,6)
print(tirage)



class MonstreFacile():

def __init__(self,NbredeVie,NomduPerso): # on définit la méthode qui va initialiser les attributs
self.vie=NbredeVie
self.nom=NomduPerso


def afficheEtat(self): #voici la méthode qui affiche l'état du personnage
print ('Il reste '+str(self.vie)+' points de vie')

#OBJECTIF : Créer une méthode qui enlèvera un point de vie au personnage blesse, une méthode qui affichera le nombre de vies restantes

def SubitDegats (self):#voici la méthode qui fait perdre 1 point de vie au personnage qui a subit une attaque
print(self.nom + " subit des dégats de la part de " + "monstre" + " !")
self.vie=self.vie-1


def LanceleDe(self):
self.LanceleDe
tirage = randint(1,6)
print(tirage)


# on crée une instance de la classe personnage nommée Bowser (plus d'indentation, car la définition de la classe est terminée)


def combat(joueur, MonstreFacile):
tirage1 = joueur.LanceleDe
Dejoueur = tirage1
print("Le nombre tiré par notre joueur est")
print(joueur.LanceleDe())
tirage2 = MonstreFacile.LanceleDe
DeMonstreFacile = tirage2
print("Le nombre tiré par le monstre est")
print(MonstreFacile.LanceleDe())
return combat

if "tirage1" >= "tirage2":
Bowser.SubitDegats
print("Le monstre a perdu le duel, il perd des points de vie !")
else:
"tirage1" < "tirage2"
Mario.SubitDegats
print("Le joueur a perdu le duel, il perd des points de vie !")


Bowser=MonstreFacile(20,'Bowser')
Mario= joueur(150, "Mario")
combat(Mario, Bowser)


La fonction combat n'est pas du tout bien organisé, ça se voit rien qu'en regardant et j'en ai conscience.
Ce code ne marche pas pour une info, c'est juste pour te donner un aperçu de là ou je suis rendu.

-> Il ne fera qu'afficher ce qu'on avait au départ...

Le nombre tiré par notre joueur est
5
None
Le nombre tiré par le monstre est
5
None
0
Utilisateur anonyme
30 oct. 2020 à 23:57
Tu vas réduire Combat à

def combat(joueur, MonstreFacile):
    joueur.LanceleDe


Tu lances et tu notes ce que ça fait.

Ensuite
def combat(joueur, MonstreFacile):
    tirage1 = joueur.LanceleDe
    print(tirage1)


tu lances et tu compares le résultat avec le précédent
0
EdFull Messages postés 8 Date d'inscription jeudi 29 octobre 2020 Statut Membre Dernière intervention 31 octobre 2020
31 oct. 2020 à 02:06
Ok donc j'ai fait ce que tu m'as demandé et j'ai observé que le premier essai n'affichait rien dans la console.

Ensuite pour ce qui est du deuxième essai :
def combat(joueur, MonstreFacile): #2e essai
    tirage1 = joueur.LanceleDe
    print(tirage1())


Ce dernier affiche bien le chiffre puis "none"
5
None


Était-ce la réponse attendue ?

De mon côté, j'ai tenté d'aller plus loin et j'ai aboutit à ceci :
def combat(joueur, MonstreFacile):
    tirage1 = joueur.LanceleDe
    print("Le nombre tiré par notre joueur est")
    return(tirage1())


    tirage2= MonstreFacile.LanceleDe
    print("Le nombre tiré par le monstre est")
    return(tirage2())

Étant donné que les "none" apparaissaient toujours j'ai essayé de les faire disparaître avec des "return", problème dès que j'en mets pour le tirage numéro 1, plus rien ne s'affiche pour le tirage numéro 2...
Comme-ci :
Le nombre tiré par notre joueur est
3

Je ne vois donc pas comment afficher les résultats des 2 tirages.
0
dachiasse Messages postés 1709 Date d'inscription samedi 12 septembre 2020 Statut Membre Dernière intervention 13 mai 2021 149
31 oct. 2020 à 05:10
Salut,

"Pour en revenir au programme, il est vrai qu’il est judicieux de tout regrouper de la sorte merci pour votre conseil. En suite, j’ai moi aussi trouvé dérangeant ces « none » et je pense savoir pourquoi ces derniers apparaissent. En effet, c’est parce qu’il manque un « return » à ma fonction."

Je pense que Whis connait la réponse. Mais, il te suffit de tester dans l'interpréteur python 3 :
print(print(1))


Je me trompe peut-être, mais, Whis t'aide à déboguer ton programme.

Déjà, tu dois remarquer que les classes Joueur et Monstre se ressemblent énormément, à vrai dire, elles sont similaires. Pas d'intérêt de créer 2 classes similaires. Fais-en une seule et tu ajoutes un attribut qui va différencier le joueur du monstre. Je te laisse deviner le type de l'attribut.

Dans une fonction, dès qu'un
return
est atteint, le reste qui suit de la fonction est ignoré. Donc, ton jeu c'est de comparer 2 tirages, et comment on compare en langage de programmation ?
0
EdFull Messages postés 8 Date d'inscription jeudi 29 octobre 2020 Statut Membre Dernière intervention 31 octobre 2020
31 oct. 2020 à 12:05
Bonjour !

Oui l’hérédité est une notion que je connais, mais que je ne maîtrise pas vraiment. On utilise cette notion lors de la création d’une classe, (il me semble)

Ex :
class joueur():

[…]


class MonstreFacile(joueur) :

[…]

Étant donné que je la maîtrise pas assez je vais attendre un peu avant de pouvoir l’utiliser. J’aimerai dans un premier temps résoudre mon problème de « return » et de « print » pour ensuite pouvoir me pencher sur comment comparer deux lancés.

Mais merci de l’info et des explications sur les effets d’un return ! Pour répondre également à ta question « Donc, ton jeu c'est de comparer 2 tirages, et comment on compare en langage de programmation ? » oui, c’est exactement ça pour l’instant.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dachiasse Messages postés 1709 Date d'inscription samedi 12 septembre 2020 Statut Membre Dernière intervention 13 mai 2021 149
31 oct. 2020 à 06:13
J'ai tenté de faire ton programme. J'ai réussi en POO et en... 24 lignes (hors sauts de lignes). J'ai simplifié, par exemple, la méthode
afficheEtat()
ne sert à rien, on peut obtenir le même résultat avec
self.vie
.
0
Utilisateur anonyme
31 oct. 2020 à 08:33
Bonjour Dachiasse.

Que tu es réussi à le faire en 24 lignes n'aide pas EdFull.

Pas plus que sous entendre qu'il devrait faire hériter ses 2 classes d'une seule et même classe, il n'en est pas encore là.


Ce qui l'aiderait c'est de trouver comment lui faire comprendre où est l'erreur de son code.
0
Utilisateur anonyme
Modifié le 31 oct. 2020 à 09:16
DeFull, j'ai fait une erreur, je voulais que tu testes
def combat(joueur, MonstreFacile):
    joueur.LanceleDe()


et
def combat(joueur, MonstreFacile):
    tirage1 = joueur.LanceleDe()
    print(tirage1)


J'avais oublié les parenthèses.

Ensuite, je ne veux pas que de ton coté tu fasses 50 autres tests, je veux que tu réfléchisses au effets d'un return (détaillés plus haut) et à la différence de résultats des ces 2 "combat".

Et tu ne reviens parler que de ça, que tu aies trouvé ou pas.

0
EdFull Messages postés 8 Date d'inscription jeudi 29 octobre 2020 Statut Membre Dernière intervention 31 octobre 2020
31 oct. 2020 à 12:04
Pas de soucis, ça arrive à tout le monde de faire des erreurs.

Pour ce qui est des test,

Essai n°1 → La console affiche seulement le chiffre, et ceci, car on fait directement appel à la fonction ( je ne suis pas sûr).

Ensuite pour l’essai n°2 → La console affiche le chiffre et « 
none
 ».


Pour ce qui est des effets d’un « return » il retourne ce que lui envoie la fonction et comme l’a dit dachiasse on sort de la fonction lorsque l’on rencontre un « return », ainsi le reste du code, suivant ce dernier n’est pas exécuté.

Ainsi, pour différencier un « print » d’un « return », je dirai que :

Print = affiche le résultat à l’écran.

Return = renvoie une valeur.

→ Il serait donc plus judicieux d’utiliser un return puisqu’un « print », (si j’ai bien compris) ne fait QUE afficher le résultat ?
0
Utilisateur anonyme > EdFull Messages postés 8 Date d'inscription jeudi 29 octobre 2020 Statut Membre Dernière intervention 31 octobre 2020
31 oct. 2020 à 12:22
Oui il serait plus judicieux d’utiliser des returns à condition qu’il soient bien placés.
Où doivent être placés ces return pour te permettre par la suite de comparer les tirages de dé
0
EdFull Messages postés 8 Date d'inscription jeudi 29 octobre 2020 Statut Membre Dernière intervention 31 octobre 2020 > Utilisateur anonyme
Modifié le 31 oct. 2020 à 14:42
Bon du coup, j'ai pas réussi à trouver ou est-ce qu'il fallait mettre ces "return"...
Mon code ressemble à ça :
(Malheureusement ça ne marche pas correctement puisque la console affiche tout le temps que c'est le monstre qui gagne)
from random import*

class joueur():

    def __init__(self, NbreDeVie, NomDuPerso):
        self.vie=NbreDeVie
        self.nom=NomDuPerso

    def afficheEtat (self):
        print ("Il reste "+str(self.vie)+ " points de vie à " +self.nom)
        if self.vie == 0:
            print("Mario n'a plus de vie")

    def attaque (self):
        print(self.nom+ " attaque "+ "monstre")


    def SubitDegats (self):
        print(self.nom + " subit des dégats de la part de " + "monstre" + " !")
        self.vie=self.vie-1

    def LanceleDe (self):
        self.LanceleDe
        tirage = randint(1,6)
        print(tirage)



class MonstreFacile():

    def __init__(self,NbredeVie,NomduPerso): # on définit la méthode qui va initialiser les attributs
        self.vie=NbredeVie
        self.nom=NomduPerso


    def afficheEtat(self): #voici la méthode qui affiche l'état du personnage
        print ('Il reste '+str(self.vie)+' points de vie')

#OBJECTIF : Créer une méthode qui enlèvera un point de vie au personnage blesse, une méthode qui affichera le nombre de vies restantes

    def SubitDegats (self):#voici la méthode qui fait perdre 1 point de vie au personnage qui a subit une attaque
        print(self.nom + " subit des dégats de la part de " + "monstre" + " !")
        self.vie=self.vie-1


    def LanceleDe(self):
        self.LanceleDe
        tirage = randint(1,6)
        print(tirage)


# on crée une instance de la classe personnage nommée Bowser (plus d'indentation, car la définition de la classe est terminée)

def combat(joueur, MonstreFacile):

    print("Le lancé du joueur est")
    tirage1 = joueur.LanceleDe()
    print("Le lancé du monstre est")
    tirage2 = MonstreFacile.LanceleDe()

    if "tirage1" >= "tirage2":
        print("Le lancé du joueur est supérieur à celui du monstre")
        MonstreFacile.SubitDegats

    else:
        "tirage1" < "tirage2"
        print("Le lancé du monstre est supérieur à celui du joueur")
        Mario.SubitDegats
    return (tirage1,tirage2)


Bowser=MonstreFacile(20,'Bowser')
Mario= joueur(150, "Mario")
combat(Mario, Bowser)

Pourrais-tu me donner quelques pistes ? Je ne veux pas la réponse immédiatement, mais quelques petites aides s'il vous plait.
0
Utilisateur anonyme
31 oct. 2020 à 16:34
En fait je te fait tourner autour de la solution depuis 3 jours.....

Reprenons ce bout de code
def combat(joueur, MonstreFacile):
    tirage1 = joueur.LanceleDe()
    print(tirage1)


Tu as constaté que ça affiche none.
Plusieurs fois, je t'ai poussé à te demandé pourquoi none.

Puisque tu ne trouves pas tout seul, je finis par être obligé de te dire, parce qu'il n'y a rien dans tirage1. None ça veut dire rien
print(rien)
ça affiche none

Maintenant, où faut il un return pour qu'il y ait quelque chose dans tirage1 ?
Et c'est pas la peine d'aller plus loin, tant que ce point ne sera pas résolu
0
EdFull Messages postés 8 Date d'inscription jeudi 29 octobre 2020 Statut Membre Dernière intervention 31 octobre 2020
31 oct. 2020 à 17:15
Ok, merci maintenant cette histoire de "none" c'est plus clair ;)

Par contre, pour ce qui est de placer les return...

J'ai effectué ceci :
def combat(joueur, MonstreFacile):
    print("Le lancé du joueur est")
    tirage1 = joueur.LanceleDe()
    print("Le lancé du monstre est")
    tirage2 = MonstreFacile.LanceleDe()
    return (tirage1,tirage2)


Cependant, je ne suis pas sûr que cela soit bon. Je ne vois pas ou les placer autre part que à la fin puisque si je les place en plein la milieu la suite de mon code serait ignoré.
Y a t'il un moyen de vérifier si il y a quelque chose dans le tirage1, avec une commande ou autre ?
0
Utilisateur anonyme > EdFull Messages postés 8 Date d'inscription jeudi 29 octobre 2020 Statut Membre Dernière intervention 31 octobre 2020
Modifié le 31 oct. 2020 à 18:23
Tu m'agaces à faire le contraire de ce que je te demande.
J'essaye te pointer là où ça coinces et systématiquement tu vas voir ailleurs.

Je t'ai demandé de ne pas aller plus loin tant que tirage vaut none

Pour en faire quelque chose, il FAUT faire en sorte qu'il y ait une valeur dedans

Actuellement cette ligne
tirage1 = joueur.LanceleDe()
revient à mettre rien dans tirage1, or ce serait bien que la valeur du dé soit dans tirage.

Tu voies, c'est ce que voulait dire yg_be, tu as visé beaucoup trop haut pour ce devoirs
Tu n'as toujours pas compris à quoi sert un return donc tu t'obstines à en mettre dans combat alors que ça ne sert à rien dans combat.
Hier à 9h24, je t'ai dit

Le mot clé return a 2 effets:
  • il stoppe l'exécution du bloc de code dans lequel il se trouve (une fonction en général)
  • il transmet un résultat à la ligne de code ayant appelé sa fonction


Tu t'es inspiré d'un exemple dans autre langage qui utilise des classe alors que manifestement tu n'as pas compris à quoi ça sert.

Ce code, sans en changer un caractère est correct.
Le problème vient d'ailleurs
def combat(joueur, MonstreFacile):
    tirage1 = joueur.LanceleDe()
    print(tirage1)


Il faut que cette ligne, sans y toucher
    tirage1 = joueur.LanceleDe()
mette la valeur du dé dans tirage1

Si tu me montres quoique ce soit d'autre, que des tentatives de résoudre ce point spécifique, qui est ton seul problème depuis le début, je laisse tomber
0
yg_be Messages postés 23348 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 novembre 2024 1 554 > Utilisateur anonyme
31 oct. 2020 à 19:06
"Visé trop haut"? Peut-être plutôt négligé de travailler pour acquérir d'abord les compétences de bases.
0
Utilisateur anonyme > yg_be Messages postés 23348 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 novembre 2024
31 oct. 2020 à 20:54
Oui peut-être
0
dachiasse Messages postés 1709 Date d'inscription samedi 12 septembre 2020 Statut Membre Dernière intervention 13 mai 2021 149
31 oct. 2020 à 19:22
Salut,

Je ne comprends pas ce que tu veux faire avec :
def LanceleDe(self):
        self.LanceleDe # pourquoi ??!
        tirage = randint(1,6)
        print(tirage)


Whis a rectifié car je ne comprenais pas pourquoi dans son message 10, il n'avait pas mis les parenthèses qui permettent d'appeler une fonction :
def combat(joueur, MonstreFacile):
    joueur.LanceleDe # il a rectifié : joueur.LanceleDe()


Quand tu as sous-entendu que je lui suggérais l'héritage, j'avais omis le niveau des monstres, et je n'ai fait qu'une seule classe, j'y ai défini une méthode attaquer qui prend
self
et
other
en paramètres.

Après, on peut faire dérouler le jeu comme on le souhaite, j'ai créé une boucle tant que... je te laisse deviner la condition. Une fois la boucle finie, j'affiche le nom du vainqueur et le score.

Je pense que Edfull s'éparpille et qu'il devrait reprendre les objectifs de son jeu qui sont :
- 2 joueurs s'affrontent
- chacun tire un nombre au hasard
- le vainqueur de la bataille fait perdre des points au vaincu
- répéter les 2 lignes ci-dessus tant que... Je te laisse deviner la condition
- annoncer le vainqueur et le résultat

Dans cette optique, on doit créer une classe joueur, une méthode pour tirer un nombre au hasard, une méthode de perte de points, une boucle
while
, un
print()
. Dans ce cas, la méthode tirer précède la méthode perdre_points, il faudra un
return
à utiliser. À toi de savoir où et que faire de la valeur retournée.
0
Utilisateur anonyme
31 oct. 2020 à 21:03
C'est déjà assez compliqué comme ça pour qu'il cherche du bon coté.
Alors merci de ne l'embrouiller plus qu'il ne l'est déjà.
0
dachiasse Messages postés 1709 Date d'inscription samedi 12 septembre 2020 Statut Membre Dernière intervention 13 mai 2021 149 > Utilisateur anonyme
31 oct. 2020 à 21:21
en fait, j'essaye de lui faire comprendre qu'il se complique la vie. Il ne sait déjà pas bien coder son jeu que j'y vois une gestion de niveau. Gestion purement inutile avec la méthode
random.randint(a,b)
puisque les probabilités sont équivalentes.

Je suis d'accord sur le fait de corriger cette erreur sémantique avec
None
0
Utilisateur anonyme
2 nov. 2020 à 00:08
Plus de 24H de silence, soit t'es toujours bloqué là, soit on t'a donné la solution ailleurs.

A supposé que tu sois toujours bloqué, on va essayer une autre approche.

Poste une ligne de code qui stocke la valeur du cosinus de 2 radian dans la variable toto

0