Répondre à la discussion
Affichage des résultats 1 à 30 sur 30

Python programmation



  1. #1
    573728

    Python programmation


    ------

    Bonjour, j'ai besoin d'aide avec un programme python s'il vous plait :
    Le combat des héros ( 2ème partie) :
    Reprendre le fichier combat_des_heros.py (1ère partie) :
    Code:
    from random import randint
    
    caracteristique=[["Ahri",5,3,7],["Corki",9,3,3],["Azir",4,4,4],["Braum",5,2,7],["Ashe",4,2,13]]
    
    def creer_avatar ():
        liste_avatar=[]
        nom = input ( "entrer le nom de votre avatar")
        liste_avatar.append(nom)
        point_attaque=randint(0,10)
        liste_avatar.append(point_attaque)
        point_armure=randint(0,4)
        liste_avatar.append(point_armure)
        point_de_vie=randint(0,15)
        liste_avatar.append(point_de_vie)
        return liste_avatar
    
    def lancer_un_combat_aleatoire():
        """
        procédure qui tire aléatoirement un hero (attaquant) qui attaque un autre héro (défenseur)
        lui aussi tir au hasard
        si les points d'attaque de l'adversaire sont supérieurs au point d'armure du défenseur
        alors le défenseur perd autant de point de vie que la différence point d'attaque/point de défense
        """
        attaquant=randint(0,len(caracteristique)-1)
        defenseur =randint(0,len(caracteristique)-1)
        while(attaquant==defenseur):
            defenseur =randint(0,len(caracteristique)-1)
        print(caracteristique[attaquant][0] +" attaque " + caracteristique[defenseur][0])
    
    
        if caracteristique[attaquant][1]>caracteristique[defenseur][2]:
            degat=caracteristique[attaquant][1]-caracteristique[defenseur][2]
            caracteristique[defenseur][3]=caracteristique[defenseur][3]-degat
            print(caracteristique[attaquant][0] +" a vaincu " + caracteristique[defenseur][0]+ " à qui* qui il ne reste plus que "+str(caracteristique[defenseur][3])+" point de vie")
    
            if caracteristique[defenseur][3] <= 0:
                print(caracteristique[defenseur][0]+" vient de mourrir")
                del caracteristique[defenseur]
        else :
            print(caracteristique[attaquant][0] +" n'a pas vaincu " + caracteristique[defenseur][0])
    
    def guerre ():
        creer_avatar ()
        while len(caracteristique)!=1:
            lancer_un_combat_aleatoire()
        print(caracteristique[0][0]+" a remporté la bataille !!!")
    
    nom=0
    point_attaque=1
    point_armure=2
    point_vie=3
    
    
    def lancer_un_combat_aleatoire_bis():
        """
        procédure qui tire aléatoirement un hero (attaquant) qui attaque un autre héro (défenseur)
        lui aussi tir au hasard
        si les points d'attaque de l'adversaire sont supérieurs au point d'armure du défenseur
        alors le défenseur perd autant de point de vie que la différence point d'attaque/point de défense
        """
        attaquant=randint(0,len(caracteristique)-1)
        defenseur =randint(0,len(caracteristique)-1)
        while(attaquant==defenseur):
            defenseur =randint(0,len(caracteristique)-1)
        print(caracteristique[attaquant][nom] +" attaque " + caracteristique[defenseur][nom])
    
        if caracteristique[attaquant][point_attaque]>caracteristique[defenseur][point_armure]:
            caracteristique[defenseur][point_vie]=caracteristique[defenseur][point_vie]-(caracteristique[attaquant][point_attaque]-caracteristique[defenseur][point_armure])
            print(caracteristique[attaquant][0] +" a vaincu " + caracteristique[defenseur][0]+ " à qui* qui il ne reste plus que "+str(caracteristique[defenseur][point_vie])+" point de vie")
            if caracteristique[defenseur][point_vie] <= 0:
                print(caracteristique[defenseur][0]+" vient de mourir")
                del caracteristique[defenseur]
        else :
            print(caracteristique[attaquant][0] +" n'a pas vaincu " + caracteristique[defenseur][0])
    
    
    
    
    def lancer_les_combats_bis():
    
        while len(caracteristique)!=1:
            lancer_un_combat_aleatoire_bis(caracteristique)
            print(len(caracteristique))
        print(caracteristique[0][nom]+" a remporté la bataille !!!")
    Remplacer la liste de listes caracteristique par la liste suivante :

    caracteristique=[["batman",5,3,7,"batman","batma n.png"],["Cyborg",9,3,3,"Cyborg","Cybor g.png"],["green_lantern",4,4,4,"green_l antern","green_lantern.png"],["iron_man",5,2,7,"iron_man","i ron_man.png"],["oeil_de_faucon",4,2,13,"oeil_ de_faucon","oeil_de_faucon.png "],["superman",4,2,13,"superman"," superman.png"]]`
    La liste caracteristique contient des listes ( appelées aussi sous_listes) précisant pour chaque héros :
    nom,points d'attaque,points de défense, points de vie, avatar,son fichier image

    De nouveaux combattants : La fonction creer_avatars ()

    On décide maintenant de faire participer plusieurs joueurs ( maximum 6 joueurs ) par le biais de leurs avatars. Ceux-ci viennent remplacer les héros dans la liste caracteristique de manière à ce que le nombre de héros soit toujours égal à 6.


    Créer la fonction creer_avatars (), prenant en paramètre le nombre de joueurs nbre_joueurs, qui permet de créer autant de sous-listes list_avatar que de joueurs désirant participer au jeu et de les ajouter dans la liste caracteristique. Cette fonctioncreer_avatars () retourne la liste caracteristique.


    Tester votre fonction creer_avatars ()


    Rappel : Le joueur inscrit seulement son nom. ses points d'attaque , ses points d'armure
    , ses points de vie sont déterminés aléatoirement et son avatar est attibué dans l'ordre de la liste.

    Affichage des caractéristiques des héros:
    Afin de suivre l'évolution du jeu de manière plus convivial, on se propose de créer une interface graphique affichant les caractéristiques des héros du début à la fin de la partie.


    Créer et afficher un cadre cadre_heros dans une fenêtre combat_des_heros.


    Dans ce cadre cadre_heros, créer dans ce cadre des labels permettant d'afficher les caractéristiques de chaque héros comme ci-dessous.
    Conseil : Pour créer les labels ,il est préférable d'utiliser une boucle ou chaque ligne i correspond à un héros. Dans un premier temps, chaque label contient le texte 'truc'
    cadre_heros.png

    Remplacer le texte 'truc' dans chaque label par le texte correspondant à la caractéristique du héros désigné.

    cadre_heros2.png

    Affichage des photos
    Pour rendre plus vivante l'interface graphique, on décide d'ajouter l'image des deux héros à chaque combat.


    Télécharger les images des héros dans le dossier 'combat_des_heros' contenant votre fichier.


    Créer dans la fenêtre combat_des_heros un second cadre nommé cadre_photo, sous le premier cadre cadre_heros permettant de recevoir les photos des héros.


    Placer dans ce cadre comme ci-dessus les photos des héros Iron Man iron_man.png et Batman batman.png


    Il s'agit maintenant d'afficher la photo des héros qui combattent. La photo de gauche représente la photo de l'attaquant et celle de droite la photo du défenseur.
    cadre_photo.png

    Dans la fonction lancer_un_combat_aleatoire(), afficher les images des deux combattants pour chaque combat

    Conseils :
    _ Ne pas oublier de créer un dictionnaire vide en dehors de la fonction lancer_un_combat_aleatoire().
    _ Stocker les images dans ce dictionnaires.

    Modification des caractéristiques des héros suite au combat

    Dans la fonction lancer_un_combat_aleatoire(), configurer les labels correspondant aux nouvelles caractéristiques des combattants en cas de victoire de l'attaquant.

    Conseil :
    _ Détruire le cadre cadre_heros à l'aide de la commande cadre_heros.destroy() et recréer ce même cadre avec les caractéristiques des héros suite au combat.

    Lancer le combat


    Demander à l'utilisateur d'entrer le nombre de joueurs à l'aide de la fonction input()


    Appeler la fonction creer_avatars () , au début de la fonction lancer_un_combat_aleatoire() afin de permettre aux joueurs de participer au jeu.


    Créer dans la fenêtre, sous les photos des combattants, un bouton permettant de lancer la fonction lancer_un_combat_aleatoire().



    Affichage du vainqueur


    Lorsqu'il ne reste plus qu'un seul vainqueur, créer un label qui affiche la phrase le vainqueur du combat des héros est .......


    Afficher au dessus de ce label, uniquement l'image correspond au héros vainqueur.



    Fonction guerre()


    Créer la fonction guerre() qui permet l'enchainement des combats avec l'affichage des combattants, des caractéristiques après chaque combat, l'image du héros vainqueur avec son nom.

    Remarque: Une temporisation de quelques secondes entre chaque combat est nécessaire pour cela on utilise la commande à l'aide de la commande time.sleep()

    Bouton lancer une guerre.

    Créer dans la fenêtre sous les photos des combattants, un bouton permettant de lancer la fonction guerre().

    -----
    Images attachées Images attachées

  2. Publicité
  3. #2
    573728

    Re : Python programmation

    Je suis arrivé à "Placer dans ce cadre comme ci-dessus les photos des héros Iron Man iron_man.png et Batman batman.png" et je n'arrive pas la suite, pouvez-vous me dire si tout est correcte jusque là ?:

    Code:
    from random import randint
    
    
    caracteristique=[["batman",5,3,7,"batman","batman.png"],["Cyborg",9,3,3,"Cyborg","Cyborg.png"],["green_lantern",4,4,4,"green_lantern","green_lantern.png"],["iron_man",5,2,7,"iron_man","iron_man.png"],["oeil_de_faucon",4,2,13,"oeil_de_faucon","oeil_de_faucon.png"],["superman",4,2,13,"superman","superman.png"]]
    
    
    def creer_avatar ():
        nbre_joueurs=int(input("Quelle est le nombre de joueur ?"))
        compteur=0
        while compteur<nbre_joueurs:
         liste_avatar=[]
         nom = input ( "entrer le nom de votre avatar")
         liste_avatar.append(nom)
         point_attaque=randint(0,10)
         liste_avatar.append(point_attaque)
         point_armure=randint(0,4)
         liste_avatar.append(point_armure)
         point_de_vie=randint(0,15)
         liste_avatar.append(point_de_vie)
         liste_avatar.append(caracteristique[compteur][4])
         liste_avatar.append(caracteristique[compteur][5])
         caracteristique[0]=liste_avatar
         compteur=compteur+1
        return caracteristique
    
    def lancer_un_combat_aleatoire():
        """
        procédure qui tire aléatoirement un hero (attaquant) qui attaque un autre héro (défenseur)
        lui aussi tir au hasard
        si les points d'attaque de l'adversaire sont supérieurs au point d'armure du défenseur
        alors le défenseur perd autant de point de vie que la différence point d'attaque/point de défense
        """
        attaquant=randint(0,len(caracteristique)-1)
        defenseur =randint(0,len(caracteristique)-1)
        while(attaquant==defenseur):
            defenseur =randint(0,len(caracteristique)-1)
        print(caracteristique[attaquant][0] +" attaque " + caracteristique[defenseur][0])
    
    
        if caracteristique[attaquant][1]>caracteristique[defenseur][2]:
            degat=caracteristique[attaquant][1]-caracteristique[defenseur][2]
            caracteristique[defenseur][3]=caracteristique[defenseur][3]-degat
            print(caracteristique[attaquant][0] +" a vaincu " + caracteristique[defenseur][0]+ " à qui* qui il ne reste plus que "+str(caracteristique[defenseur][3])+" point de vie")
    
            if caracteristique[defenseur][3] <= 0:
                print(caracteristique[defenseur][0]+" vient de mourrir")
                del caracteristique[defenseur]
        else :
            print(caracteristique[attaquant][0] +" n'a pas vaincu " + caracteristique[defenseur][0])
    
    def guerre ():
        creer_avatar ()
        while len(caracteristique)!=1:
           lancer_un_combat_aleatoire()
        print(caracteristique[0][0]+" a remporté la bataille !!!")
    
    nom=0
    point_attaque=1
    point_armure=2
    point_vie=3
    
    
    def lancer_un_combat_aleatoire_bis():
        """
        procédure qui tire aléatoirement un hero (attaquant) qui attaque un autre héro (défenseur)
        lui aussi tir au hasard
        si les points d'attaque de l'adversaire sont supérieurs au point d'armure du défenseur
        alors le défenseur perd autant de point de vie que la différence point d'attaque/point de défense
        """
        attaquant=randint(0,len(caracteristique)-1)
        defenseur =randint(0,len(caracteristique)-1)
        while(attaquant==defenseur):
            defenseur =randint(0,len(caracteristique)-1)
        print(caracteristique[attaquant][nom] +" attaque " + caracteristique[defenseur][nom])
    
        if caracteristique[attaquant][point_attaque]>caracteristique[defenseur][point_armure]:
            caracteristique[defenseur][point_vie]=caracteristique[defenseur][point_vie]-(caracteristique[attaquant][point_attaque]-caracteristique[defenseur][point_armure])
            print(caracteristique[attaquant][0] +" a vaincu " + caracteristique[defenseur][0]+ " à qui* qui il ne reste plus que "+str(caracteristique[defenseur][point_vie])+" point de vie")
            if caracteristique[defenseur][point_vie] <= 0:
                print(caracteristique[defenseur][0]+" vient de mourir")
                del caracteristique[defenseur]
        else :
            print(caracteristique[attaquant][0] +" n'a pas vaincu " + caracteristique[defenseur][0])
    
    
    
    
    def lancer_les_combats_bis():
    
        while len(caracteristique)!=1:
            lancer_un_combat_aleatoire_bis(caracteristique)
            print(len(caracteristique))
        print(caracteristique[0][nom]+" a remporté la bataille !!!")
    
    
    
    from tkinter import *
    import tkinter.messagebox
    import tkinter.filedialog
    import tkinter as tk
    from PIL import Image, ImageTk
    
    
    
    combat_des_heros = Tk()
    combat_des_heros.title("combat_des_heros")
    
    cadre_heros=Frame(combat_des_heros)
    cadre_heros.pack()
    
    cadre_photo=Frame(combat_des_heros)
    cadre_photo.pack()
    Canevas = Canvas(cadre_photo)
    Canevas2 = Canvas(cadre_photo)
    image = Image.open('batman.png')
    photo = ImageTk.PhotoImage(image)
    
    label = tk.Label(cadre_photo, image=photo)
    label.grid(row=0,column=0)
    
    image2 = Image.open('iron_man.png')
    photo2 = ImageTk.PhotoImage(image2)
    
    label = tk.Label(cadre_photo, image=photo2)
    label.grid(row=0,column=1)
    
    
    
    def lancer_un_combat_aleatoire1():
        """
        procédure qui tire aléatoirement un hero (attaquant) qui attaque un autre héro (défenseur)
        lui aussi tir au hasard
        si les points d'attaque de l'adversaire sont supérieurs au point d'armure du défenseur
        alors le défenseur perd autant de point de vie que la différence point d'attaque/point de défense
        """
        attaquant=randint(0,len(caracteristique)-1)
        defenseur =randint(0,len(caracteristique)-1)
        while(attaquant==defenseur):
            defenseur =randint(0,len(caracteristique)-1)
        print(caracteristique[attaquant][0] +" attaque " + caracteristique[defenseur][0])
    
    
        if caracteristique[attaquant][1]>caracteristique[defenseur][2]:
            degat=caracteristique[attaquant][1]-caracteristique[defenseur][2]
            caracteristique[defenseur][3]=caracteristique[defenseur][3]-degat
            print(caracteristique[attaquant][0] +" a vaincu " + caracteristique[defenseur][0]+ " à qui* qui il ne reste plus que "+str(caracteristique[defenseur][3])+" point de vie")
    
            if caracteristique[defenseur][3] <= 0:
                print(caracteristique[defenseur][0]+" vient de mourrir")
                del caracteristique[defenseur]
        else :
            print(caracteristique[attaquant][0] +" n'a pas vaincu " + caracteristique[defenseur][0])
    
    
    
    
    
    
    
    
    
    
    text1=Label(cadre_heros,text="Nom")
    text2=Label(cadre_heros,text="Avatar")
    text3=Label(cadre_heros,text="Point d'attaque")
    text4=Label(cadre_heros,text="Point d'armure")
    text5=Label(cadre_heros,text="Point de vie")
    
    
    text1.grid(row=0,column=0)
    text2.grid(row=0,column=1)
    text3.grid(row=0,column=2)
    text4.grid(row=0,column=3)
    text5.grid(row=0,column=4)
    
    
    
    
    compteur=0
    for i in range(6):
        label_nom=Label(cadre_heros,text=caracteristique[compteur][4])
        label_avatar=Label(cadre_heros,text=caracteristique[compteur][0])
        label_patt=Label(cadre_heros,text=caracteristique[compteur][1])
        label_pdef=Label(cadre_heros,text=caracteristique[compteur][2])
        label_pdevie=Label(cadre_heros,text=caracteristique[compteur][3])
        label_nom.grid(row=i+1,column=0)
        label_avatar.grid(row=i+1,column=1)
        label_patt.grid(row=i+1,column=2)
        label_pdef.grid(row=i+1,column=3)
        label_pdevie.grid(row=i+1,column=4)
        compteur=compteur+1
    
    
    
    
    
    
    
    combat_des_heros.mainloop()
    Merci d'avance pour votre aide
    et voici les images à mettre dans le meme dossier que le programme python :
    superman.png
    grenn_lantern.png
    cyborg.png
    batman.png
    iron_man.png
    Dernière modification par Antoane ; 18/02/2020 à 12h40. Motif: remplacement des balises spoiler par code

  4. #3
    573728

    Re : Python programmation

    et la sixième :
    oeil_de_faucon.png

  5. #4
    umfred

    Re : Python programmation

    la suite c'est ça ?
    Il s'agit maintenant d'afficher la photo des héros qui combattent. La photo de gauche représente la photo de l'attaquant et celle de droite la photo du défenseur.
    Bah, ça me semble pas très compliqué: quand tu lances le combat, il faut afficher l'image de l'attaquant et l'image du défenseur; vu que l'image du combattant est dans sa liste des caractéristiques , caracteristique[attaquant/defenseur][5] contient le nom de l'image.

  6. #5
    573728

    Re : Python programmation

    Mais il est ecrit qu’il faut creer un dictionnaire et je ne sais pas quelles lignes je dois mettre dans la fonction (dans toutes les lignes pour afficher les images), il faut tout deplacer dans la fonction lancer_un_combat_aleatoire() mais je ne sais pas quoi...Car pour l’instant lorsque j’appuie sur le bouton vert pour lancer la fonction, ca lance directement la fenetre, alors qu’il faut que ca se lance apres avoir lancer la fonction
    Dernière modification par 573728 ; 18/02/2020 à 16h27.

  7. A voir en vidéo sur Futura
  8. #6
    573728

    Re : Python programmation

    Et tout ce que j’ai fais jusque là est correcte ?

  9. Publicité
  10. #7
    umfred

    Re : Python programmation

    il faut juste déplacer l'affichage des images dans la fonction.
    euh tu ne sais pas quelles instructions font afficher l'image ??

    Quant à savoir si ce que tu as fait est correct, si ça donne le résultat attendu, c'est que c'est bon

  11. #8
    573728

    Re : Python programmation

    Je ne pense pas qu’il faut juste les deplacer... pour respecter toutes les consignes il faut suivre les conseils :
    Conseils :
    _ Ne pas oublier de créer un dictionnaire vide en dehors de la fonction lancer_un_combat_aleatoire().
    _ Stocker les images dans ce dictionnaires.

  12. #9
    573728

    Re : Python programmation

    Je ne comprend vraiment pas a quoi va servir le dictionnaire mais il faut l’utiliser...

  13. #10
    umfred

    Re : Python programmation

    En relisant, je crois comprendre qu'il va servir pour indiquer les 2 images à afficher. Dans la fonction lancer_un_combat_aléatoire, tu va remplir le dictionnaire avec les images des 2 combattants, et ensuite utiliser ces valeurs dans la partie affichage
    Code:
    ...
    # dans la fonction de combat
    dictionnaire["img_attaquant"]=caracteristique[attaquant][5]
    dictionnaire["img_defenseur"]=caracteristique[defenseur][5]
    ...
    ...
    # dans la partie affichage
    image = Image.open(dictionnaire["img_attaquant"])
    image2 = Image.open(dictionnaire["img_defenseur"])

  14. #11
    573728

    Re : Python programmation

    A quel endroit de la fonction je dois les mettre ? Et pour la partie affichage je change par les 2 lignes deja existantes ? Mais il faut que je mette tout le code pour faire afficher la fenetre dans la fonction ? Juste en dessous mais dans la fonction ?

  15. #12
    573728

    Re : Python programmation

    Je viens de tout deplacer dans la fonction et quand je lance ca fonctionne la premiere fois apres ca mets des erreurs
    EDIT: ah non ca bug aussi au premier lancer (selon les 2 combattants, ca bug avec certains)
    Dernière modification par 573728 ; 20/02/2020 à 12h07.

  16. Publicité
  17. #13
    573728

    Re : Python programmation

    j'ai ca comme erreur (il y en a d'autres):
    Traceback (most recent call last):
    File "<interactive input>", line 1, in <module>
    File "C:\Users\Fatima\Desktop\PYTHO N\combat_de_heros_liste.py", line 146, in lancer_un_combat_aleatoire1
    image = Image.open(dictionnaire["img_attaquant"])
    File "C:\EduPython\App\lib\site-packages\PIL\Image.py", line 2312, in open
    fp = builtins.open(filename, "rb")
    FileNotFoundError: [Errno 2] No such file or directory: 'green_lantern.png'

    OU

    Traceback (most recent call last):
    File "<interactive input>", line 1, in <module>
    File "C:\Users\Fatima\Desktop\PYTHO N\combat_de_heros_liste.py", line 132, in lancer_un_combat_aleatoire1
    dictionnaire["img_attaquant"]=caracteristique[attaquant][5]
    IndexError: list index out of range

  18. #14
    umfred

    Re : Python programmation

    Citation Envoyé par 573728 Voir le message
    j'ai ca comme erreur (il y en a d'autres):
    Traceback (most recent call last):
    File "<interactive input>", line 1, in <module>
    File "C:\Users\Fatima\Desktop\PYTHO N\combat_de_heros_liste.py", line 146, in lancer_un_combat_aleatoire1
    image = Image.open(dictionnaire["img_attaquant"])
    File "C:\EduPython\App\lib\site-packages\PIL\Image.py", line 2312, in open
    fp = builtins.open(filename, "rb")
    FileNotFoundError: [Errno 2] No such file or directory: 'green_lantern.png'
    Vérifie que le nom du fichier image de green lantern à bien ce nom là sur le pc

    Sinon j'ai dû mal formuler ma précédente réponse et oublier de dire de laisser la partie affichage en dehors de la fonction.
    Pour les deux premières lignes, il faut bien évidemment les mettre après la sélection des personnages (après avoir initialiser attaquant et defenseur)
    Pour les deux dernières lignes , c'est à la place de celles qui existait déjà et qui chargeait les images de batman et d'ironman

  19. #15
    573728

    Re : Python programmation

    j'ai fais ca : dictionnaire={}
    Code:
    def lancer_un_combat_aleatoire():
        attaquant=randint(0,len(caracteristique)-1)
        defenseur =randint(0,len(caracteristique)-1)
        while(attaquant==defenseur):
            defenseur =randint(0,len(caracteristique)-1)
        print(caracteristique[attaquant][0] +" attaque " + caracteristique[defenseur][0])
    
    
        if caracteristique[attaquant][1]>caracteristique[defenseur][2]:
            degat=caracteristique[attaquant][1]-caracteristique[defenseur][2]
            caracteristique[defenseur][3]=caracteristique[defenseur][3]-degat
            print(caracteristique[attaquant][0] +" a vaincu " + caracteristique[defenseur][0]+ " à qui* qui il ne reste plus que "+str(caracteristique[defenseur][3])+" point de vie")
    
            if caracteristique[defenseur][3] <= 0:
                print(caracteristique[defenseur][0]+" vient de mourrir")
                del caracteristique[defenseur]
        else :
            print(caracteristique[attaquant][0] +" n'a pas vaincu " + caracteristique[defenseur][0])
        dictionnaire["img_attaquant"]=caracteristique[attaquant][5]
        dictionnaire["img_defenseur"]=caracteristique[defenseur][5]
    
    
        combat_des_heros = Tk()
        combat_des_heros.title("combat_des_heros")
    
        cadre_heros=Frame(combat_des_heros)
        cadre_heros.pack()
    
        cadre_photo=Frame(combat_des_heros)
        cadre_photo.pack()
        Canevas = Canvas(cadre_photo)
        Canevas2 = Canvas(cadre_photo)
        image = Image.open(dictionnaire["img_attaquant"])
        photo = ImageTk.PhotoImage(image)
    
        label = tk.Label(cadre_photo, image=photo)
        label.grid(row=0,column=0)
    
        image2 = Image.open(dictionnaire["img_defenseur"])
        photo2 = ImageTk.PhotoImage(image2)
    
        label = tk.Label(cadre_photo, image=photo2)
        label.grid(row=0,column=1)
    
    
    
    
        text1=Label(cadre_heros,text="Nom")
        text2=Label(cadre_heros,text="Avatar")
        text3=Label(cadre_heros,text="Point d'attaque")
        text4=Label(cadre_heros,text="Point d'armure")
        text5=Label(cadre_heros,text="Point de vie")
    
    
        text1.grid(row=0,column=0)
        text2.grid(row=0,column=1)
        text3.grid(row=0,column=2)
        text4.grid(row=0,column=3)
        text5.grid(row=0,column=4)
    
    
    
    
        compteur=0
        for i in range(6):
            label_nom=Label(cadre_heros,text=caracteristique[compteur][4])
            label_avatar=Label(cadre_heros,text=caracteristique[compteur][0])
            label_patt=Label(cadre_heros,text=caracteristique[compteur][1])
            label_pdef=Label(cadre_heros,text=caracteristique[compteur][2])
            label_pdevie=Label(cadre_heros,text=caracteristique[compteur][3])
            label_nom.grid(row=i+1,column=0)
            label_avatar.grid(row=i+1,column=1)
            label_patt.grid(row=i+1,column=2)
            label_pdef.grid(row=i+1,column=3)
            label_pdevie.grid(row=i+1,column=4)
            compteur=compteur+1
    
        combat_des_heros.mainloop()
    j'ai aussi essayé en mettant tout à l'extérieur à partir de combat_des_heros = Tk() mais il y a une erreur
    Dernière modification par JPL ; 20/02/2020 à 18h22. Motif: ajout de la balise Code (#) pour garder l’indentation

  20. #16
    umfred

    Re : Python programmation

    sans info sur l'erreur rencontrée, pas facile de dire ce qui ne va pas

  21. #17
    573728

    Re : Python programmation

    Je vous ai envoyé les messages d’erreur mais pouvez-vous essayer de votre coté ?

  22. #18
    umfred

    Re : Python programmation

    un code qui fonctionne: A chaque lancement du programme, 2 combattants choisi au hasard avec affichage de leur image
    Code:
    from random import randint
    from tkinter import *
    import tkinter.messagebox
    import tkinter.filedialog
    import tkinter as tk
    from PIL import Image, ImageTk
    
    caracteristique=[["batman",5,3,7,"batman","batman.png"],["Cyborg",9,3,3,"Cyborg","Cyborg.png"],["green_lantern",4,4,4,"green_lantern","green_lantern.png"],["iron_man",5,2,7,"iron_man","iron_man.png"],["oeil_de_faucon",4,2,13,"oeil_de_faucon","oeil_de_faucon.png"],["superman",4,2,13,"superman","superman.png"]]
    dictionnaire=dict()
    dictionnaire["img_attaquant"]=caracteristique[0][5]
    dictionnaire["img_defenseur"]=caracteristique[1][5]
    
    def lancer_un_combat_aleatoire():
        attaquant=randint(0,len(caracteristique)-1)
        defenseur =randint(0,len(caracteristique)-1)
        while(attaquant==defenseur):
            defenseur =randint(0,len(caracteristique)-1)
        print(caracteristique[attaquant][0] +" attaque " + caracteristique[defenseur][0])
    
    
        if caracteristique[attaquant][1]>caracteristique[defenseur][2]:
            degat=caracteristique[attaquant][1]-caracteristique[defenseur][2]
            caracteristique[defenseur][3]=caracteristique[defenseur][3]-degat
            print(caracteristique[attaquant][0] +" a vaincu " + caracteristique[defenseur][0]+ " à qui* qui il ne reste plus que "+str(caracteristique[defenseur][3])+" point de vie")
    
            if caracteristique[defenseur][3] <= 0:
                print(caracteristique[defenseur][0]+" vient de mourrir")
                del caracteristique[defenseur]
        else :
            print(caracteristique[attaquant][0] +" n'a pas vaincu " + caracteristique[defenseur][0])
        dictionnaire["img_attaquant"]=caracteristique[attaquant][5]
        dictionnaire["img_defenseur"]=caracteristique[defenseur][5]
    
    
    combat_des_heros = Tk()
    combat_des_heros.title("combat_des_heros")
    
    cadre_heros=Frame(combat_des_heros)
    cadre_heros.pack()
    
    lancer_un_combat_aleatoire()
    cadre_photo=Frame(combat_des_heros)
    cadre_photo.pack()
    Canevas = Canvas(cadre_photo)
    Canevas2 = Canvas(cadre_photo)
    image = Image.open(dictionnaire["img_attaquant"])
    photo = ImageTk.PhotoImage(image)
    
    label = tk.Label(cadre_photo, image=photo)
    label.grid(row=0,column=0)
    
    image2 = Image.open(dictionnaire["img_defenseur"])
    photo2 = ImageTk.PhotoImage(image2)
    
    label = tk.Label(cadre_photo, image=photo2)
    label.grid(row=0,column=1)
    
    
    
    
    text1=Label(cadre_heros,text="Nom")
    text2=Label(cadre_heros,text="Avatar")
    text3=Label(cadre_heros,text="Point d'attaque")
    text4=Label(cadre_heros,text="Point d'armure")
    text5=Label(cadre_heros,text="Point de vie")
    
    
    text1.grid(row=0,column=0)
    text2.grid(row=0,column=1)
    text3.grid(row=0,column=2)
    text4.grid(row=0,column=3)
    text5.grid(row=0,column=4)
    
    
    
    
    compteur=0
    for i in range(6):
        label_nom=Label(cadre_heros,text=caracteristique[compteur][4])
        label_avatar=Label(cadre_heros,text=caracteristique[compteur][0])
        label_patt=Label(cadre_heros,text=caracteristique[compteur][1])
        label_pdef=Label(cadre_heros,text=caracteristique[compteur][2])
        label_pdevie=Label(cadre_heros,text=caracteristique[compteur][3])
        label_nom.grid(row=i+1,column=0)
        label_avatar.grid(row=i+1,column=1)
        label_patt.grid(row=i+1,column=2)
        label_pdef.grid(row=i+1,column=3)
        label_pdevie.grid(row=i+1,column=4)
        compteur=compteur+1
    
    combat_des_heros.mainloop()

  23. Publicité
  24. #19
    573728

    Re : Python programmation

    Non, toujours la meme erreur avec green_lantern quand on relance plusieurs fois des combats (et je n'ai pas vu une seul fois l'image de green lantern apparaitre)

  25. #20
    polo974

    Re : Python programmation

    pour info, l'image que tu as posté s'appelle *grenn_lantern* et tu cherches à ouvrir *green_lantern* donc sans doute un pb de nommage de fichier...

    ensuite, nommer un dictionnaire dictionnaire, c'est pas très parlant, dicImageAvatar est plus parlant par exemple...
    Jusqu'ici tout va bien...

  26. #21
    573728

    Re : Python programmation

    Ah oui merci mal renommé...

    Traceback (most recent call last):
    File "<interactive input>", line 1, in <module>
    File "C:\Users\Fatima\Desktop\PYTHO N\combat_de_heros_liste.py", line 32, in lancer_un_combat_aleatoire
    dictionnaire["img_defenseur"]=caracteristique[defenseur][5]
    IndexError: list index out of range

    il y a toujours ce code d'erreur avec le code que vous avez envoyé mais c'est toujours après avoir lancé beaucoup de combats donc c'est normal non ?
    Dernière modification par 573728 ; 22/02/2020 à 11h58.

  27. #22
    573728

    Re : Python programmation

    Et pour la suite avec cadre_heros.destroy() ?

  28. #23
    573728

    Re : Python programmation

    mais votre ne fonctionne pas puisque lorsque je relance la fonction il ne ré-affiche pas la fenêtre, c'est seulement lorsque j'execute le programme

  29. #24
    umfred

    Re : Python programmation

    J'avais déjà signalé le problème de nom de fichier en #14 et prévenu en #18 que c'était à chaque lancement du programme
    (pour le nom du dictionnaire, j'ai fait au plus simple @polo974)

    la fonction ne peut être appelé que dans le programme et pouvoir lancer plusieurs combats à la suite est demandé après (avec un bouton ou avec la fonction guerre()

    Pour ton erreur
    Code:
    File "<interactive input>", line 1, in <module>
    File "C:\Users\Fatima\Desktop\PYTHO N\combat_de_heros_liste.py", line 32, in lancer_un_combat_aleatoire
    dictionnaire["img_defenseur"]=caracteristique[defenseur][5]
    IndexError: list index out of range
    (utilise les balises [ code ] [/ code ])
    C'est très certainement parce que caracteristique[defenseur] a été supprimé quelques lignes plus haut par l'instruction
    Code:
    del caracteristique[defenseur]
    C'est "normal" ou plutôt logique qu'elle se produise, mais dans c'est à toi de gérer pour que l'erreur ne se produise plus en étant sûr que la donnée soit présente à ce moment là.
    Donc il faut remonter les lignes d'affection au dictionnaire juste après la sélection
    Code:
    def lancer_un_combat_aleatoire():
        attaquant=randint(0,len(caracteristique)-1)
        defenseur =randint(0,len(caracteristique)-1)
        while(attaquant==defenseur):
            defenseur =randint(0,len(caracteristique)-1)
        dictionnaire["img_attaquant"]=caracteristique[attaquant][5]
        dictionnaire["img_defenseur"]=caracteristique[defenseur][5]
    
        print(caracteristique[attaquant][0] +" attaque " + caracteristique[defenseur][0])
    
    
        if caracteristique[attaquant][1]>caracteristique[defenseur][2]:
            degat=caracteristique[attaquant][1]-caracteristique[defenseur][2]
            caracteristique[defenseur][3]=caracteristique[defenseur][3]-degat
            print(caracteristique[attaquant][0] +" a vaincu " + caracteristique[defenseur][0]+ " à qui* qui il ne reste plus que "+str(caracteristique[defenseur][3])+" point de vie")
    
            if caracteristique[defenseur][3] <= 0:
                print(caracteristique[defenseur][0]+" vient de mourrir")
                del caracteristique[defenseur]
        else :
            print(caracteristique[attaquant][0] +" n'a pas vaincu " + caracteristique[defenseur][0])

  30. Publicité
  31. #25
    573728

    Re : Python programmation

    D'accord merci et pour la suite il faut mettre cadre_heros.destroy() à la suite de la fonction ou à l'exterieur ? Et pour recreer une fenetre ?

  32. #26
    umfred

    Re : Python programmation

    je pense que c'est dans la fonction de combat, mais pour plus de lisibilité, je pense qu'il faut faire une fonction d'affichage du cadre_heros qui fera cet appel à destroy() et reconstruira le cadre_heros (et je pense que pour l'affichage des images, ça sera le même principe)

  33. #27
    573728

    Re : Python programmation

    Je prefere le mettre dans la meme fonction, pour oa suite je copie colle tout ce qui permet d’afficher les images dans la fonction c’est tout ?

  34. #28
    umfred

    Re : Python programmation

    Mettre le code dans une fonction, ça évite justement de faire un copier/coller et si il y a des modifications à faire, il n'y a besoin de les faire que dans la fonction, et pas à plusieurs emplacements (c'est ça l'avantage).

  35. #29
    573728

    Re : Python programmation

    rien ne fonctionne :
    Code:
    dictionnaire={}
    def lancer_un_combat_aleatoire():
        attaquant=randint(0,len(caracteristique)-1)
        defenseur =randint(0,len(caracteristique)-1)
        while(attaquant==defenseur):
            defenseur =randint(0,len(caracteristique)-1)
        dictionnaire["img_attaquant"]=caracteristique[attaquant][5]
        dictionnaire["img_defenseur"]=caracteristique[defenseur][5]
        print(caracteristique[attaquant][0] +" attaque " + caracteristique[defenseur][0])
    
    
    
        if caracteristique[attaquant][1]>caracteristique[defenseur][2]:
            degat=caracteristique[attaquant][1]-caracteristique[defenseur][2]
            caracteristique[defenseur][3]=caracteristique[defenseur][3]-degat
            print(caracteristique[attaquant][0] +" a vaincu " + caracteristique[defenseur][0]+ " à qui* qui il ne reste plus que "+str(caracteristique[defenseur][3])+" point de vie")
    
            if caracteristique[defenseur][3] <= 0:
                print(caracteristique[defenseur][0]+" vient de mourrir")
                del caracteristique[defenseur]
        else :
            print(caracteristique[attaquant][0] +" n'a pas vaincu " + caracteristique[defenseur][0])
        cadre_heros.destroy()
        combat_des_heros = Tk()
        combat_des_heros.title("combat_des_heros")
    
        cadre_heros=Frame(combat_des_heros)
        cadre_heros.pack()
    
        lancer_un_combat_aleatoire()
        cadre_photo=Frame(combat_des_heros)
        cadre_photo.pack()
        Canevas = Canvas(cadre_photo)
        Canevas2 = Canvas(cadre_photo)
        image = Image.open(dictionnaire["img_attaquant"])
        photo = ImageTk.PhotoImage(image)
    
        label = tk.Label(cadre_photo, image=photo)
        label.grid(row=0,column=0)
    
    
        image2 = Image.open(dictionnaire["img_defenseur"])
        photo2 = ImageTk.PhotoImage(image2)
    
        label = tk.Label(cadre_photo, image=photo2)
        label.grid(row=0,column=1)
    
    
    
        text1=Label(cadre_heros,text="Nom")
        text2=Label(cadre_heros,text="Avatar")
        text3=Label(cadre_heros,text="Point d'attaque")
        text4=Label(cadre_heros,text="Point d'armure")
        text5=Label(cadre_heros,text="Point de vie")
    
    
        text1.grid(row=0,column=0)
        text2.grid(row=0,column=1)
        text3.grid(row=0,column=2)
        text4.grid(row=0,column=3)
        text5.grid(row=0,column=4)
    
    
    
    
        compteur=0
        for i in range(6):
            label_nom=Label(cadre_heros,text=caracteristique[compteur][4])
            label_avatar=Label(cadre_heros,text=caracteristique[compteur][0])
            label_patt=Label(cadre_heros,text=caracteristique[compteur][1])
            label_pdef=Label(cadre_heros,text=caracteristique[compteur][2])
            label_pdevie=Label(cadre_heros,text=caracteristique[compteur][3])
            label_nom.grid(row=i+1,column=0)
            label_avatar.grid(row=i+1,column=1)
            label_patt.grid(row=i+1,column=2)
            label_pdef.grid(row=i+1,column=3)
            label_pdevie.grid(row=i+1,column=4)
            compteur=compteur+1
    
    
    
    
    
    
    
        combat_des_heros.mainloop()
    
    
    
    
    combat_des_heros = Tk()
    combat_des_heros.title("combat_des_heros")
    
    cadre_heros=Frame(combat_des_heros)
    cadre_heros.pack()
    
    lancer_un_combat_aleatoire()
    cadre_photo=Frame(combat_des_heros)
    cadre_photo.pack()
    Canevas = Canvas(cadre_photo)
    Canevas2 = Canvas(cadre_photo)
    image = Image.open(dictionnaire["img_attaquant"])
    photo = ImageTk.PhotoImage(image)
    
    label = tk.Label(cadre_photo, image=photo)
    label.grid(row=0,column=0)
    
    
    image2 = Image.open(dictionnaire["img_defenseur"])
    photo2 = ImageTk.PhotoImage(image2)
    
    label = tk.Label(cadre_photo, image=photo2)
    label.grid(row=0,column=1)
    
    
    
    text1=Label(cadre_heros,text="Nom")
    text2=Label(cadre_heros,text="Avatar")
    text3=Label(cadre_heros,text="Point d'attaque")
    text4=Label(cadre_heros,text="Point d'armure")
    text5=Label(cadre_heros,text="Point de vie")
    
    
    text1.grid(row=0,column=0)
    text2.grid(row=0,column=1)
    text3.grid(row=0,column=2)
    text4.grid(row=0,column=3)
    text5.grid(row=0,column=4)
    
    
    
    
    compteur=0
    for i in range(6):
        label_nom=Label(cadre_heros,text=caracteristique[compteur][4])
        label_avatar=Label(cadre_heros,text=caracteristique[compteur][0])
        label_patt=Label(cadre_heros,text=caracteristique[compteur][1])
        label_pdef=Label(cadre_heros,text=caracteristique[compteur][2])
        label_pdevie=Label(cadre_heros,text=caracteristique[compteur][3])
        label_nom.grid(row=i+1,column=0)
        label_avatar.grid(row=i+1,column=1)
        label_patt.grid(row=i+1,column=2)
        label_pdef.grid(row=i+1,column=3)
        label_pdevie.grid(row=i+1,column=4)
        compteur=compteur+1
    
    
    
    
    
    
    
    combat_des_heros.mainloop()

  36. #30
    573728

    Re : Python programmation

    ah non c'est bon, cependant les images sont au dessus au lieu d'en dessous :
    Code:
    dictionnaire={}
    def lancer_un_combat_aleatoire():
        attaquant=randint(0,len(caracteristique)-1)
        defenseur =randint(0,len(caracteristique)-1)
        while(attaquant==defenseur):
            defenseur =randint(0,len(caracteristique)-1)
        dictionnaire["img_attaquant"]=caracteristique[attaquant][5]
        dictionnaire["img_defenseur"]=caracteristique[defenseur][5]
        print(caracteristique[attaquant][0] +" attaque " + caracteristique[defenseur][0])
    
    
    
        if caracteristique[attaquant][1]>caracteristique[defenseur][2]:
            degat=caracteristique[attaquant][1]-caracteristique[defenseur][2]
            caracteristique[defenseur][3]=caracteristique[defenseur][3]-degat
            print(caracteristique[attaquant][0] +" a vaincu " + caracteristique[defenseur][0]+ " à qui* qui il ne reste plus que "+str(caracteristique[defenseur][3])+" point de vie")
    
            if caracteristique[defenseur][3] <= 0:
                print(caracteristique[defenseur][0]+" vient de mourrir")
                del caracteristique[defenseur]
        else :
            print(caracteristique[attaquant][0] +" n'a pas vaincu " + caracteristique[defenseur][0])
        combat_des_heros = Tk()
        combat_des_heros.title("combat_des_heros")
    
        cadre_heros=Frame(combat_des_heros)
        cadre_heros.pack()
    
        cadre_photo=Frame(combat_des_heros)
        cadre_photo.pack()
        Canevas = Canvas(cadre_photo)
        Canevas2 = Canvas(cadre_photo)
        image = Image.open(dictionnaire["img_attaquant"])
        photo = ImageTk.PhotoImage(image)
    
        label = tk.Label(cadre_photo, image=photo)
        label.grid(row=0,column=0)
    
    
        image2 = Image.open(dictionnaire["img_defenseur"])
        photo2 = ImageTk.PhotoImage(image2)
    
        label = tk.Label(cadre_photo, image=photo2)
        label.grid(row=0,column=1)
    
    
    
        text1=Label(cadre_heros,text="Nom")
        text2=Label(cadre_heros,text="Avatar")
        text3=Label(cadre_heros,text="Point d'attaque")
        text4=Label(cadre_heros,text="Point d'armure")
        text5=Label(cadre_heros,text="Point de vie")
    
    
        text1.grid(row=0,column=0)
        text2.grid(row=0,column=1)
        text3.grid(row=0,column=2)
        text4.grid(row=0,column=3)
        text5.grid(row=0,column=4)
    
    
    
    
        compteur=0
        for i in range(6):
            label_nom=Label(cadre_heros,text=caracteristique[compteur][4])
            label_avatar=Label(cadre_heros,text=caracteristique[compteur][0])
            label_patt=Label(cadre_heros,text=caracteristique[compteur][1])
            label_pdef=Label(cadre_heros,text=caracteristique[compteur][2])
            label_pdevie=Label(cadre_heros,text=caracteristique[compteur][3])
            label_nom.grid(row=i+1,column=0)
            label_avatar.grid(row=i+1,column=1)
            label_patt.grid(row=i+1,column=2)
            label_pdef.grid(row=i+1,column=3)
            label_pdevie.grid(row=i+1,column=4)
            compteur=compteur+1
    
    
    
        cadre_heros.destroy()
        cadre_heros=Frame(combat_des_heros)
        cadre_heros.pack()
        text1=Label(cadre_heros,text="Nom")
        text2=Label(cadre_heros,text="Avatar")
        text3=Label(cadre_heros,text="Point d'attaque")
        text4=Label(cadre_heros,text="Point d'armure")
        text5=Label(cadre_heros,text="Point de vie")
    
    
        text1.grid(row=0,column=0)
        text2.grid(row=0,column=1)
        text3.grid(row=0,column=2)
        text4.grid(row=0,column=3)
        text5.grid(row=0,column=4)
    
    
    
    
        compteur=0
        for i in range(6):
            label_nom=Label(cadre_heros,text=caracteristique[compteur][4])
            label_avatar=Label(cadre_heros,text=caracteristique[compteur][0])
            label_patt=Label(cadre_heros,text=caracteristique[compteur][1])
            label_pdef=Label(cadre_heros,text=caracteristique[compteur][2])
            label_pdevie=Label(cadre_heros,text=caracteristique[compteur][3])
            label_nom.grid(row=i+1,column=0)
            label_avatar.grid(row=i+1,column=1)
            label_patt.grid(row=i+1,column=2)
            label_pdef.grid(row=i+1,column=3)
            label_pdevie.grid(row=i+1,column=4)
            compteur=compteur+1
        combat_des_heros.mainloop()

Discussions similaires

  1. Programmation du jeu Poker en python (2.7.5)
    Par leconcombresurpattes dans le forum Programmation et langages, Algorithmique
    Réponses: 16
    Dernier message: 30/10/2013, 20h03
  2. Programmation python
    Par selver057 dans le forum Programmation et langages, Algorithmique
    Réponses: 11
    Dernier message: 05/05/2011, 15h29
  3. Programmation d'un modem en python
    Par randamanel dans le forum Programmation et langages, Algorithmique
    Réponses: 3
    Dernier message: 26/04/2011, 16h22
  4. Programmation python : objets
    Par selver057 dans le forum Programmation et langages, Algorithmique
    Réponses: 5
    Dernier message: 13/02/2011, 14h22
  5. aide programmation python
    Par Elek dans le forum Logiciel - Software - Open Source
    Réponses: 30
    Dernier message: 10/06/2006, 12h58