Python : Tkinter : tag et dictionnaire
Répondre à la discussion
Affichage des résultats 1 à 2 sur 2

Python : Tkinter : tag et dictionnaire



  1. #1
    invitec03183ff

    Python : Tkinter : tag et dictionnaire


    ------

    Bonjour !

    Je suis en train d'écrire un petit code en Python avec la bibliothèque Tkinter pour un "jeu", mais j'ai un problème et je en sais pas d'où il peut venir. D'habitude je tripatouille le code et la solution me saute aux yeux, mais là je bloque bien fort depuis une semaine... Je précise que je débute avec Tkinter et que je code ce qui me passe par la tête, milles excuses donc pour les probables erreurs de mises en forme ou autre, et d'avance merci d'avoir la patience de me lire !

    Le jeu consiste en un écran (Canvas()) où sont affichés des personnages,humains ou zombies (10 de chaque), ainsi qu'un Entry() ou le joueur est supposé écrire un mot. Si celui-ci est correct, un zombie se transforme en humain. Et si le mot est faux, c'est un humain qui se transforme en zombie. Je gère les personnages avec des tags, qui sont les clés de deux dictionnaires, un de zombies et un d'humains. Les valeurs associées au clés des dictionnaires sont le sexe du personnage (homme ou femme, oui c'est assez binaire, mais c'est assez compliqué comme ça pour moi !)

    Mon problème est le suivant : le dernier humain ne se "zombifie" pas si on ne rentre que des réponses fausses. Or le dictionnaire associé indique que tous les humains sont transformés...

    Voici la partie du code concernée :

    Code:
    def ecran_jeu():
        global w,h,entree,mot_fr,mot_es,entr_mot,cle,dico,affiche_mot_fr,label_mot,dict_perso,dict_zombie,can1,\
               fichier_homme,fichier_femme,fichier_zombie
    
    #ici je crée le canvas et le boutton quitter
    
    #------------------------------------------création des personnages
    
        fichier_homme=PhotoImage(file="images/jeu_espagnol/homme_r.gif")
        can1.image_homme=fichier_homme
        fichier_femme=PhotoImage(file="images/jeu_espagnol/femme_r.gif")
        can1.image_femme=fichier_femme
        fichier_zombie=PhotoImage(file="images/jeu_espagnol/zombie_r.gif")
        can1.image_zombie=fichier_zombie
    
        nb_perso=20
        random_hf=0
        x=0
        y=0
        dict_perso=dict()
        dict_zombie=dict()
        list_position=[(j,i) for j in range(50,w-50,50) for i in range(90,h-300,50)]
    
        for i in range(0,nb_perso):
            random_hf=randint(1,2)
            random_position=list_position[randrange(0,len(list_position))]
            x,y=random_position
            if i<(nb_perso//2):
                if random_hf==1:
                    can1.create_image(x,y,image=fichier_homme,tag=str(i))
                else:
                    can1.create_image(x,y,image=fichier_femme, tag=str(i))
                dict_perso[str(i)]=random_hf
            else:
                can1.create_image(x,y,image=fichier_zombie,tag=str(i))
                dict_zombie[str(i)]=random_hf
            list_position.remove((x,y))
    
    #ici il y a une fonction validate(event) qui regarde si le mot tapé est correct. Si oui, elle exécute guerison() et sinon zombification(). 
    
    #-----------------------------------transformation des personnages
    
    def guerison():
        global dict_perso,dict_zombie,can1,fichier_homme,fichier_femme
    
        if dict_zombie!=dict():
            g=choice(list(dict_zombie.keys()))
            hf=dict_zombie[g]
            if hf==1:
                can1.itemconfigure(g,image=fichier_homme)
            else:
                can1.itemconfigure(g,image=fichier_femme)
            del dict_zombie[g]
            dict_perso[g]=hf
    
    def zombification():
        global dict_perso,dict_zombie,can1,fichier_zombie
    
        if dict_perso!=dict():
            t=choice(list(dict_perso.keys()))
            hf=dict_perso.get(t)
            can1.itemconfigure(t,image=fichier_zombie)
            del dict_perso[t]
            dict_zombie[t]=hf
    Le code n'est pas complet pour ne pas encombrer le post, mais je peux l'envoyer en entier en pj avec les images si vous le souhaitez.

    Je me demande si l'utilisation des tags est approprié, mais je n'ai pas d'autres idées. J'ai l'impression que c'est la zombification du tag '0' qui pose problème, et que rien ne se passe à la validation de l'Entry. Mon erreur est peut-être une bête histoire de tour de boucle, ou de gestion du hasard...

    Je suis à votre disposition pour plus de renseignements, merci beaucoup d'essayer de m'aider !

    Encore merci,
    Jilou

    -----

  2. #2
    invitec03183ff

    Re : Python : Tkinter : tag et dictionnaire

    Bonjour !

    Je continue de chercher... Et je crois que j'ai trouvé d'où vient mon problème ! Mais je ne l'ai pas encore résolu.

    Un petit programme pour illustrer :

    Code:
    from tkinter import *
    
    
    fen=Tk()
    can=Canvas(fen)
    can.pack()
    L=[]
    a=0
    
    
    for i in range(0,3):
        a+=10
        can.create_line(0,a,100,100+a,tag=str(i))
        L.append(str(i))
    
    
    print(L[2])
    can.delete(L[2])
    print (L)
    
    
    fen.mainloop()
    Donc ce code affiche 3 lignes diagonales dans un canevas. Je stocke les tags dans une liste (0,1,2). Quand je demande L[2], ça affiche bien 2, normal. Mais quand je veux effacer la ligne associée à ce tag, avec le can.delete(L[2]), ça efface la ligne associée au tag 1 ?! Je suis confus...

    Si vous aviez quelques indices à me donner, ce serait super sympa ! Merci !

Discussions similaires

  1. Fractales en python avec tkinter
    Par henryallen dans le forum Programmation et langages, Algorithmique
    Réponses: 7
    Dernier message: 28/01/2018, 09h10
  2. Problème - Fenêtre Tkinter python
    Par invite145565e3 dans le forum Programmation et langages, Algorithmique
    Réponses: 3
    Dernier message: 03/05/2017, 11h15
  3. Aide TKINTER Python
    Par invite678e76a2 dans le forum Programmation et langages, Algorithmique
    Réponses: 0
    Dernier message: 22/04/2016, 21h42
  4. python, tkinter, gestion d'événements
    Par Jack dans le forum Programmation et langages, Algorithmique
    Réponses: 11
    Dernier message: 29/10/2013, 12h34
  5. Python : pas moyen d'importer tkinter
    Par invitea7d2625c dans le forum Programmation et langages, Algorithmique
    Réponses: 1
    Dernier message: 10/09/2012, 14h26