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 :
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.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
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
-----