Erreur python missing 1 required positional argument: 'event' - Page 3

Résolu
  1. non !

    comme je te le disais plus haut, si tout défile d'un coup, c'est parce que entre 2 manches

    toucheA et toucheB ne sont pas vides, elles sont toujours égales à la valeur de la 1ere manche,

    autrement dit la liste touches n'est pas vide

    autrement dit, la fonction released(event) ne fait son pas boulot !


    Et donc moi, je te le répète, je vide la liste après chaque manche et ça, ca marche !

     if(touches != []):
      if(len(touches) == 2):
       touches_s = (''.join(touches))
     
       error = False
       if (touches_s == 'ap' or touches_s == 'pa' or touches_s == 'am' or touches_s == 'ma'):
        t = 'Joueur 1 gagne !'
        pv2 -=1
       elif(touches_s == 'qp' or touches_s == 'pq' or touches_s == 'qm' or touches_s == 'mq'):
        t = 'Joueur 2 gagne !'
        pv1 -=1
       else:
        error = True
     
       if(not error):
        can1.create_text(10,90,text=t,anchor = NW, fill = 'red', font = ('helvetica', 15, 'bold'))
        score_affiche = True
    
      touches = []    #on vide la liste après la manche
    


    Ca fait 3 fois que je te dis ça, quand même
    1. ok ok, je pensais que ma fonction released(event) était fonctionelle, mince.

      Et moi dans le code ça se mettrai ou ? Si je dis ça c'est parce que j'ai déjà essayé la ou pour moi ça devait être mais ça change rien.
      1. Ca parait évident : "je vide la liste après chaque manche "

        Donc chez toi, ca donne ça:

            if toucheB=="M" and toucheA=="A" :
                #j2 perd
                k2 += 1
                pv2-=1
                can1.itemconfig(image_pv2,image=score2[k2])
        
            #Vider la liste
            touches = []
        
            #bouton
            bou7 =Button(windows, text="",width=66,height=66,borderwidth=0,image=image_B4,command=pause)
        


        enlève k1=k1 et k2=k2
        1. Et bien je l'avais mis ici et toujours pareil, aucun changement. Code:

          def scene2():
              global pv1,pv2,score1,score2,joueur1,joueur2,touches,toucheA,toucheB,image_bob,image_rut,image_pv1,image_pv2,k1,k2
          #JOUEUR1
              if "A" in touches:
                  can1.itemconfig(image_rut,image=joueur1[1])
                  toucheA="A"
              if "Q" in touches:
                  can1.itemconfig(image_rut,image=joueur1[2])
                  toucheA="Q"
          #JOUEUR2
              if "P" in touches:
                  can1.itemconfig(image_bob,image=joueur2[1])
                  toucheB="P"
              if "M" in touches:
                  can1.itemconfig(image_bob,image=joueur2[2])
                  toucheB="M"
          #SCORE1
              if toucheA=="A" and toucheB=="M" :
                  #j1 gagne
                  k2 += 1
                  pv2-=1
                  can1.itemconfig(image_pv1,image=score1[k1])
              if toucheA=="A" and toucheB=="P" :
                  #j1 perd
                  k1 += 1
                  pv1-=1
                  can1.itemconfig(image_pv2,image=score2[k2])
              if toucheA=="Q" and toucheB=="P" :
                  #j1 gagne
                  k2 += 1
                  pv2-=1
                  can1.itemconfig(image_pv1,image=score1[k1])
              if toucheA=="Q" and toucheB=="M" :
                  #j1 perd
                  k1 += 1
                  pv1-=1
                  can1.itemconfig(image_pv2,image=score2[k2])
          #SCORE2
              if toucheB=="P" and toucheA=="A" :
                  #j2 gagne
                  k1 += 1
                  pv1-=1
                  can1.itemconfig(image_pv1,image=score1[k1])
              if toucheB=="P" and toucheA=="Q" :
                  #j2 perd
                  k2 += 1
                  pv2-=1
                  can1.itemconfig(image_pv2,image=score2[k2])
              if toucheB=="M" and toucheA=="Q" :
                  #j2 gagne
                  k1 += 1
                  pv1-=1
                  can1.itemconfig(image_pv1,image=score1[k1])
              if toucheB=="M" and toucheA=="A" :
                  #j2 perd
                  k2 += 1
                  pv2-=1
                  can1.itemconfig(image_pv2,image=score2[k2])
              touches=[]
              #bouton
              bou7 =Button(windows, text="",width=66,height=66,borderwidth=0,image=image_B4,command=pause)
              bou7.place(x=663,y=42)
              can1.after(100,scene2)
          1. Bonjour Antoine,

            C'est étrange quand même !

            Dans le code que je t'ai envoyé ca marche et pas dans le tiens …

            Pour debugger, il faudrait vraiment que tu me donnes tout le programme,

            pour les images on se débrouillera
            1. Salut Phil,

              pas de soucis je t'envoie tout, dis moi si t'as besoin de plus

              Logiquement il faut juste regarder au niveau de #JEUX et au niveau de l'importation des images.

              Si quelque chose n'est pas claire dit le moi

              #-----------------------------PARAMETRE NECESSAIRE------------------------------
              from tkinter import *
              from tkinter.messagebox import *
              import pygame
              
              #fenetre graphique
              windows=Tk()
              windows.geometry('1400x800')
              windows.attributes("-fullscreen",0)
              windows.title("STREET KO")
              
              #importation des images MENU ET SOUS MENU
              fond1=PhotoImage(file="start.png")
              fond2=PhotoImage(file="menu.png")
              fond_D=PhotoImage(file="decort.png")
              fond_P=PhotoImage(file="pause.png")
              fond_H=PhotoImage(file="histoire.png")
              fond_R=PhotoImage(file="regles.png")
              image_B=PhotoImage(file="bouton.png")
              image_B2=PhotoImage(file="bouton2.png")
              image_B3=PhotoImage(file="bouton3.png")
              
              #importation des images DECOMPTE
              top3=PhotoImage(file="3.png")
              top2=PhotoImage(file="2.png")
              top1=PhotoImage(file="1.png")
              topF=PhotoImage(file="FIGHT.png")
              
              #importation des images PLAYERS
              image_B4=PhotoImage(file="bouton4.png")
              rut=PhotoImage(file="rut.png")
              Rpoint=PhotoImage(file="rut_point.png")
              Rpoint2=PhotoImage(file="rut_point2.png")
              bob=PhotoImage(file="bob.png")
              Bpoint=PhotoImage(file="bob_point.png")
              Bpied=PhotoImage(file="bob_pied.png")
              
              #importation des images SCORE RUT
              PVr10=PhotoImage(file="PV rut 10.png")
              PVr9=PhotoImage(file="PV rut 9.png")
              PVr8=PhotoImage(file="PV rut 8.png")
              PVr7=PhotoImage(file="PV rut 7.png")
              PVr6=PhotoImage(file="PV rut 6.png")
              PVr5=PhotoImage(file="PV rut 5.png")
              PVr4=PhotoImage(file="PV rut 4.png")
              PVr3=PhotoImage(file="PV rut 3.png")
              PVr2=PhotoImage(file="PV rut 2.png")
              PVr1=PhotoImage(file="PV rut 1.png")
              PVr0=PhotoImage(file="PV rut 0.png")
              
              #importation des images SCORE BOO
              PVb10=PhotoImage(file="PV bob 10.png")
              PVb9=PhotoImage(file="PV bob 9.png")
              PVb8=PhotoImage(file="PV bob 8.png")
              PVb7=PhotoImage(file="PV bob 7.png")
              PVb6=PhotoImage(file="PV bob 6.png")
              PVb5=PhotoImage(file="PV bob 5.png")
              PVb4=PhotoImage(file="PV bob 4.png")
              PVb3=PhotoImage(file="PV bob 3.png")
              PVb2=PhotoImage(file="PV bob 2.png")
              PVb1=PhotoImage(file="PV bob 1.png")
              PVb0=PhotoImage(file="PV bob 0.png")
              #-------------------------------PAGE D'OUVERTURE--------------------------------
              def start():
                can0=Canvas(windows,width=1400,height=800,bg="#17202a")
                can0.place(x=0,y=0)
                background0=can0.create_image(0,0,image=fond1,anchor="nw")
                can0.focus_set()
                can0.bind("<Key>",test_entree)
              
              def test_entree(event):
                touche=event.keysym
                if touche=="Return" :
                  menu()
              #-------------------------------MENU ET SOUS MENU-------------------------------
              def menu():
                  global can1,bou1,bou2,bou3,bou5,background
                  can1=Canvas(windows,width=1400,height=800,bg="#17202a")
                  can1.place(x=0,y=0)
                  background=can1.create_image(0,0,image=fond2,anchor="nw")
                  can1.focus_set()
                  #bouton
                  bou1=Button(windows,text="Quitter",fg="#ffffff",width=250,height=50,image=image_B,compound=CENTER,borderwidth=0, font=('Fixedsys', '20'), command=quitter)
                  bou1.place(x=65,y=500)
                  bou2=Button(windows,text="Règles",fg="#ffffff",width=250,height=50,image=image_B,compound=CENTER,borderwidth=0, font=('Fixedsys', '20'), command=regles)
                  bou2.place(x=65,y=240)
                  bou3=Button(windows,text="Commencer",fg="#ffffff",width=250,height=50,image=image_B,compound=CENTER,borderwidth=0,font=('Fixedsys', '20'), command=switch)
                  bou3.place(x=65,y=110)
                  bou5=Button(windows,text="Histoire",fg="#ffffff",width=250,height=50,image=image_B,compound=CENTER,borderwidth=0, font=('Fixedsys', '20'), command=histoire)
                  bou5.place(x=65,y=370)
                  #bool_hitoire==False
              
                  #if bool_hitoire==False :
                      #bou2=Button(windows,text="Règles",fg="#ffffff",width=220,height=40,image=bouton_gris,compound=CENTER,borderwidth=0,command=menu)
                      #bou2.place(x=215,y=240)
                  #else :
                      #bou2=Button(windows,text="Règles",fg="#ffffff",width=220,height=40,image=image_B,compound=CENTER,borderwidth=0,command=regles)
                      #bou2.place(x=215,y=240)
              
              def histoire():
                  global can1,background,bou4,bou6,ennonce1,bou8
                  reset()
                  can1.itemconfig(background,image=fond_H)
                  can1.focus_set()
                  #texte
                  text1="Il fut un temps où les guerres faisaient rage. Impac-"
                  text2="tant la galaxie entière des millions de victimes ont"
                  text3="été déplorés. L'objectif était toujours le même le dé-"
                  text4="sir ardent d'être le plus puissant. Les dirigeants des"
                  text5="quatre-coints de la galaxie en perdaient la raison."
                  text6="C'est alors qu'un scientifique neutre créa deux comba-"
                  text7="ttants hors-pairs, Rut et Bob. Tout juste sortis du"
                  text8="four ils etaient déjà impliqués dans le combat. Alors"
                  text9="dotés de capacités sans pareil, ils mirent fin à ces"
                  text10="guerres et acquierent de nouveaux pouvoirs. Des années"
                  text11="plus tard ils sont de nouveau reunis mais cette fois"
                  text12="pour s'affronter. Le combat aura lieu à la plage 4586,"
                  text13="sous un soleil tropical où les deux compagnons ont par"
                  text14="le passé mis un terme à ces guerres. L'issue du com"
                  text15="-bat sera décisive pour le futur. Afin d'en connaître"
                  text16="d'avantage veuillez prendre connaissance des règles."
                  textefinal=text1+'\n'+text2+'\n'+text3+'\n'+text4+'\n'+text5+'\n'+text6+'\n'+text7+'\n'+text8+'\n'+text9+'\n'+text10+'\n'+text11+'\n'+text12+'\n'+text13+'\n'+text14+'\n'+text15+'\n'+text16
                  ennonce1=can1.create_text(895,340,text=textefinal,fill="white", font=('Fixedsys', '18'))
                  #bouton
                  bou4=Button(windows,text="Menu principal",fg="#ffffff",width=250,height=50,image=image_B, compound=CENTER,borderwidth=0, font=('Fixedsys', '20'), command=menu)
                  bou4.place(x=450,y=690)
                  bou6=Button(windows,text="Règles",fg="#ffffff",width=250,height=50,image=image_B3, foreground="black", compound=CENTER,borderwidth=0, font=('Fixedsys', '20'), command=reset_regles)
                  bou6.place(x=790,y=690)
                  bou8=Button(windows,text="règles.",fg="#ffffff",width=115,height=25,image=image_B2, compound=CENTER,borderwidth=0, font=('Fixedsys', '18'), command=reset_regles)
                  bou8.place(x=1180,y=550)
              
              def regles():
                  global can1,background,bou7, bou9,ennonce2
                  reset()
                  can1.itemconfig(background,image=fond_R)
                  can1.focus_set()
                  #texte
                  text1="Suivant le personnage que vous in-"
                  text2="carnez, Rut ou Bob, votre objectif"
                  text3="est de terrasser votre adversaire."
                  text4="Pour ce faire vous devez enchaîner"
                  text5="les combinaisons de touche afin de"
                  text6="gagner le combat. Ainsi il est con-"
                  text7="seillé de prendre connaissance des"
                  text8="commandes afin d'etablir une stra-"
                  text9="tégie solide. L'enjeu de ce combat"
                  text10="est de déterminer le futur époux"
                  text11="de la princesse Sofya tant convoi-"
                  text12="tée. Donner tout ce que vous avez"
                  text13="pour chopper cette BOMBE !!!!!!!!!"
                  textefinal2=text1+'\n'+text2+'\n'+text3+'\n'+text4+'\n'+text5+'\n'+text6+'\n'+text7+'\n'+text8+'\n'+text9+'\n'+text10+'\n'+text11+'\n'+text12+'\n'+text13
                  ennonce2=can1.create_text(370,365,text=textefinal2,fill="white", font=('Fixedsys', '18'))
                  #bouton
                  bou7=Button(windows,text="Menu principal",fg="#ffffff",width=250,height=50,image=image_B, compound=CENTER,borderwidth=0, font=('Fixedsys', '20'), command=menu)
                  bou7.place(x=450,y=690)
                  bou9=Button(windows,text="Histoire",fg="#ffffff",width=250,height=50,image=image_B3, foreground="black", compound=CENTER,borderwidth=0, font=('Fixedsys', '20'), command=reset_histoire)
                  bou9.place(x=790,y=690)
              
              def quitter():
                  if askyesno("Fenêtre décisive", "Êtes-vous sûr de vouloir faire ça?"):
                      windows.destroy()
                  else:
                      showinfo("Fenêtre du meilleur choix", "Vous avez bien raison!")
              #------------------------------------RESET--------------------------------------
              def reset():
                  global bou1,bou2,bou3,bou5
                  bou1.place_forget()
                  bou2.place_forget()
                  bou3.place_forget()
                  bou5.place_forget()
              
              def reset_histoire():
                  global bou7,bou9,can1,enonce2
                  bou7.place_forget()
                  bou9.place_forget()
                  can1.itemconfig(ennonce2,text="")
                  histoire()
              
              def reset_regles():
                  global bou4,bou6, can1,enonce1, bou8
                  bou4.place_forget()
                  bou6.place_forget()
                  bou8.place_forget()
                  can1.itemconfig(ennonce1,text="")
                  regles()
              #------------------------------------JEUX---------------------------------------
              #-----------------------------fonction avant jeux-------------------------------
              def song():
                  launched = True
                  pygame.init()
                  song = pygame.mixer.Sound("fight_song.wav")
                  song.play()
                  while launched:
                      for even in pygame.event.get():
                          if even.type == pygame.QUIT:
                              launched = False
              
              def switch():
                  global Pchoisi
                  reset()
                  #song()
                  can1.itemconfig(background, image=mes_photos[Pchoisi])
                  Pchoisi += 1
                  if Pchoisi==5:
                      can1.itemconfig(background,image=fond_D)
                      scene()
                  else :
                      windows.after(10, switch)
              
              mes_photos = [top3,top2,top1,topF,fond_D]
              Pchoisi = 0
              #-------------------------------scene de combat---------------------------------
              def scene():
                  global pv1,pv2,score1,score2,touches,joueur1,joueur2,toucheB,toucheA,image_bob,image_rut,image_pv1,image_pv2,k1,k2
                  #attribution des joueurs/score a leurs photos
                  joueur1=[rut,Rpoint,Rpoint2]
                  joueur2=[bob,Bpoint,Bpied]
                  score1=[PVr10,PVr9,PVr8,PVr7,PVr6,PVr5,PVr4,PVr3,PVr2,PVr1,PVr0]
                  score2=[PVb10,PVb9,PVb8,PVb7,PVb6,PVb5,PVb4,PVb3,PVb2,PVb1,PVb0]
                  #creation des images dans la fenetre graphique joueurs/score
                  image_rut=can1.create_image(300,300,image=joueur1[0])
                  image_bob=can1.create_image(800,300,image=joueur2[0])
                  image_pv1=can1.create_image(329,65,image=score1[0])
                  image_pv2=can1.create_image(1062,63,image=score2[0])
                  #on associe à can1 un appui/relachement de touche
                  can1.bind("<KeyPress>",pressed)
                  can1.bind("<KeyRelease>",released)
                  #definition des touches
                  toucheA=""
                  toucheB=""
                  touches=[]
                  can1.focus_set()
                  #score
                  pv1,pv2 = 10,10
                  k1,k2 = 0,0
                  scene2()
              
              def scene2():
                  global pv1,pv2,score1,score2,joueur1,joueur2,touches,toucheA,toucheB,image_bob,image_rut,image_pv1,image_pv2,k1,k2,pause
              #JOUEUR1
                  if "A" in touches:
                      can1.itemconfig(image_rut,image=joueur1[1])
                      toucheA="A"
                  if "Q" in touches:
                      can1.itemconfig(image_rut,image=joueur1[2])
                      toucheA="Q"
              #JOUEUR2
                  if "P" in touches:
                      can1.itemconfig(image_bob,image=joueur2[1])
                      toucheB="P"
                  if "M" in touches:
                      can1.itemconfig(image_bob,image=joueur2[2])
                      toucheB="M"
              #SCORE1
                  if toucheA=="A" and toucheB=="M" :
                      #j1 gagne
                      k2 += 1
                      pv2-=1
                      can1.itemconfig(image_pv1,image=score1[k1])
                  if toucheA=="A" and toucheB=="P" :
                      #j1 perd
                      k1 += 1
                      pv1-=1
                      can1.itemconfig(image_pv2,image=score2[k2])
                  if toucheA=="Q" and toucheB=="P" :
                      #j1 gagne
                      k2 += 1
                      pv2-=1
                      can1.itemconfig(image_pv1,image=score1[k1])
                  if toucheA=="Q" and toucheB=="M" :
                      #j1 perd
                      k1 += 1
                      pv1-=1
                      can1.itemconfig(image_pv2,image=score2[k2])
              #SCORE2
                  if toucheB=="P" and toucheA=="A" :
                      #j2 gagne
                      k1 += 1
                      pv1-=1
                      can1.itemconfig(image_pv1,image=score1[k1])
                  if toucheB=="P" and toucheA=="Q" :
                      #j2 perd
                      k2 += 1
                      pv2-=1
                      can1.itemconfig(image_pv2,image=score2[k2])
                  if toucheB=="M" and toucheA=="Q" :
                      #j2 gagne
                      k1 += 1
                      pv1-=1
                      can1.itemconfig(image_pv1,image=score1[k1])
                  if toucheB=="M" and toucheA=="A" :
                      #j2 perd
                      k2 += 1
                      pv2-=1
                      can1.itemconfig(image_pv2,image=score2[k2])
                  touches=[]
                  #bouton
                  bou7 =Button(windows, text="",width=66,height=66,borderwidth=0,image=image_B4,command=pause)
                  bou7.place(x=663,y=42)
                  can1.after(100,scene2)
              
              def pressed(event):
                  #on récupère la touche appuyée via t, on la met en majuscules et on l'ajoute a la liste touches
                  global touches
                  t = event.keysym.upper()
                  if not t in touches:
                      touches.append(t)
              
              def released(event):
                  #on récupère la touche relaché via t, on la met en majuscules et on l'enlève de la liste touches
                  global touches
                  t = event.keysym.upper()
                  if t in touches:
                      touches.remove(t)
              
              def pause():
                  global pause,can1,background
                  pass
              #--------------------------------LANCEMENT--------------------------------------
              start()
              windows.mainloop()
              1. parfait,

                je vois que tu as 42 images, je sais déjà que PV rut 10.png sont les barres de pv que tu m'as fait voir plus haut, donc il en reste 20 que je ne connais pas, mais si ca se trouve je n'ai pas vraiment besoin de toutes pour faire marcher la mécanique du jeu, c'est juste de l'affichage

                Je fais d'abord le point sur ces 20 images, et je te redis ...
                1. Je te précise quand même au cas ou a quoi correspond les images.

                  Celles dans #importation des images SCORE BOO sont les mêmes que PV rut 10.png mais dans l'autre sens, pour le joueur 2

                  Celles dans #importation des images PLAYERS sont les différents postions des joueurs.

                  Celles dans #importation des images DECOMPTE permettent de faire le décompte dans def switch().

                  Enfin celles dans #importation des images MENU ET SOUS MENU sont les arrière plans de chaque interfaces et de certains bouton.

                  Dit moi si t'as besoin de certaines photo pour bien comprendre.
                  1. En fait, pour simplifier, j'ai commenté dans ton code toutes les images sauf celles des scores

                    (je me fiche pas mal d'afficher le fond d'écran et tout ça)

                    J'ai donc créé 22 images .png avec les noms que tu donnes (PV bob 10 ….)

                    Ca marche chez toi la page avec les boutons ?

                    Chez moi, ca donne ça:



                    Mais je vois que les boutons sont très gros: 250 x 50, j'ai donc enlevé ce paramètres et ca donne ça, mais quand j'appuie sur "commencer", l'écran se vide et j'ai beau appuyer sur a et p par exemple, il ne se passe rien, alors qu'on devrait afficher score2[1] : PV bob 9.png

                    1. Oui moi tout marche niquel.

                      Mais transmets moi ton e-mail ou de quoi communiquer en privé et je te passe tout le dossier, ça sera plus simple pour toi et il n'y aura pas de probleme.
                      1. Nickel ! (pas niquel :-) )

                        J'ai trouvé !

                        1_ Je suis sur un PC portable, donc les dimensions des fenêtres sont un peu grandes, j'ai donc fait une copie de ton code pour changer tout ça, et j'ai aussi changé la position des images montrant les scores pour que ça rentre
                        Je n'ai donc pas changé ton code original à ce niveau

                        2_ Les scores défilent dès le 1er appui, car dans la fonction scene2() tu as mélangé plein de trucs entre toucheA et toucheB, et entre image_pv1 avec score2, et vice-versa

                        Je t'ai donc modifié la fonction scene2() pour tester les cas correctement

                        J'ai aussi ajouté le test pour game over et maintenant, ca marche, tu peux récuperer le code complet:

                        from tkinter import *
                        from tkinter.messagebox import *
                        #import pygame
                        
                        #fenetre graphique
                        windows=Tk()
                        windows.geometry('1400x800')
                        windows.attributes("-fullscreen",0)
                        windows.title("STREET KO")
                        
                        #importation des images MENU ET SOUS MENU
                        fond1=PhotoImage(file="start.png")
                        fond2=PhotoImage(file="menu.png")
                        fond_D=PhotoImage(file="decort.png")
                        fond_P=PhotoImage(file="pause.png")
                        fond_H=PhotoImage(file="histoire.png")
                        fond_R=PhotoImage(file="regles.png")
                        image_B=PhotoImage(file="bouton.png")
                        image_B2=PhotoImage(file="bouton2.png")
                        image_B3=PhotoImage(file="bouton3.png")
                        
                        #importation des images DECOMPTE
                        top3=PhotoImage(file="3.png")
                        top2=PhotoImage(file="2.png")
                        top1=PhotoImage(file="1.png")
                        topF=PhotoImage(file="FIGHT.png")
                        
                        #importation des images PLAYERS
                        image_B4=PhotoImage(file="bouton4.png")
                        rut=PhotoImage(file="rut.png")
                        Rpoint=PhotoImage(file="rut_point.png")
                        Rpoint2=PhotoImage(file="rut_point2.png")
                        bob=PhotoImage(file="bob.png")
                        Bpoint=PhotoImage(file="bob_point.png")
                        Bpied=PhotoImage(file="bob_pied.png")
                        
                        #importation des images SCORE RUT
                        PVr10=PhotoImage(file="PV rut 10.png")
                        PVr9=PhotoImage(file="PV rut 9.png")
                        PVr8=PhotoImage(file="PV rut 8.png")
                        PVr7=PhotoImage(file="PV rut 7.png")
                        PVr6=PhotoImage(file="PV rut 6.png")
                        PVr5=PhotoImage(file="PV rut 5.png")
                        PVr4=PhotoImage(file="PV rut 4.png")
                        PVr3=PhotoImage(file="PV rut 3.png")
                        PVr2=PhotoImage(file="PV rut 2.png")
                        PVr1=PhotoImage(file="PV rut 1.png")
                        PVr0=PhotoImage(file="PV rut 0.png")
                        
                        #importation des images SCORE BOO
                        PVb10=PhotoImage(file="PV bob 10.png")
                        PVb9=PhotoImage(file="PV bob 9.png")
                        PVb8=PhotoImage(file="PV bob 8.png")
                        PVb7=PhotoImage(file="PV bob 7.png")
                        PVb6=PhotoImage(file="PV bob 6.png")
                        PVb5=PhotoImage(file="PV bob 5.png")
                        PVb4=PhotoImage(file="PV bob 4.png")
                        PVb3=PhotoImage(file="PV bob 3.png")
                        PVb2=PhotoImage(file="PV bob 2.png")
                        PVb1=PhotoImage(file="PV bob 1.png")
                        PVb0=PhotoImage(file="PV bob 0.png")
                        
                        #-------------------------------PAGE D'OUVERTURE--------------------------------
                        def start():
                          can0=Canvas(windows,width=1400,height=800,bg="#17202a")
                          can0.place(x=0,y=0)
                          background0=can0.create_image(0,0,image=fond1,anchor="nw")
                          can0.focus_set()
                          can0.bind("<Key>",test_entree)
                        
                        def test_entree(event):
                          touche=event.keysym
                          if touche=="Return" :
                            menu()
                        #-------------------------------MENU ET SOUS MENU-------------------------------
                        def menu():
                            global can1,bou1,bou2,bou3,bou5,background
                            can1=Canvas(windows,width=1400,height=800,bg="#17202a")
                            can1.place(x=0,y=0)
                            background=can1.create_image(0,0,image=fond2,anchor="nw")
                            can1.focus_set()
                            #bouton
                            bou1=Button(windows,text="Quitter",fg="#ffffff",width=250,height=50,image=image_B,compound=CENTER,borderwidth=0, font=('Fixedsys', '20'), command=quitter)
                            bou1.place(x=65,y=500)
                            bou2=Button(windows,text="Règles",fg="#ffffff",width=250,height=50,image=image_B,compound=CENTER,borderwidth=0, font=('Fixedsys', '20'), command=regles)
                            bou2.place(x=65,y=240)
                            bou3=Button(windows,text="Commencer",fg="#ffffff",width=250,height=50,image=image_B,compound=CENTER,borderwidth=0,font=('Fixedsys', '20'), command=switch)
                            bou3.place(x=65,y=110)
                            bou5=Button(windows,text="Histoire",fg="#ffffff",width=250,height=50,image=image_B,compound=CENTER,borderwidth=0, font=('Fixedsys', '20'), command=histoire)
                            bou5.place(x=65,y=370)
                            #bool_hitoire==False
                        
                            #if bool_hitoire==False :
                                #bou2=Button(windows,text="Règles",fg="#ffffff",width=220,height=40,image=bouton_gris,compound=CENTER,borderwidth=0,command=menu)
                                #bou2.place(x=215,y=240)
                            #else :
                                #bou2=Button(windows,text="Règles",fg="#ffffff",width=220,height=40,image=image_B,compound=CENTER,borderwidth=0,command=regles)
                                #bou2.place(x=215,y=240)
                        
                        def histoire():
                            global can1,background,bou4,bou6,ennonce1,bou8
                        
                            reset()
                            can1.itemconfig(background,image=fond_H)
                            can1.focus_set()
                        
                            #texte
                            textefinal='''
                            Il fut un temps où les guerres faisaient rage. Impactant la galaxie entière
                            des millions de victimes furent déplorés.
                            L'objectif était toujours le même le désir ardent d'être le plus puissant.
                            Les dirigeants des quatre-coints de la galaxie en perdaient la raison.
                            C'est alors qu'un scientifique neutre créa deux combattants hors-pair,
                            Rut et Bob. Tout juste sortis du four ils etaient déjà impliqués dans le combat.
                            Alors dotés de capacités sans pareil, ils mirent fin à ces
                            guerres et acquerirent de nouveaux pouvoirs.
                            Des années plus tard ils sont de nouveau reunis mais cette fois
                            pour s'affronter. Le combat aura lieu à la plage 4586,
                            sous un soleil tropical où les deux compagnons ont par
                            le passé mis un terme à ces guerres. L'issue du combat sera décisive
                            pour le futur.
                            Afin d'en connaître davantage veuillez prendre connaissance des règles.
                            '''
                        
                            ennonce1=can1.create_text(895,340,text=textefinal,fill="white", font=('Fixedsys', '18'))
                        
                            #bouton
                            bou4=Button(windows,text="Menu principal",fg="#ffffff",width=250,height=50,image=image_B, compound=CENTER,borderwidth=0, font=('Fixedsys', '20'), command=menu)
                            bou4.place(x=450,y=690)
                            bou6=Button(windows,text="Règles",fg="#ffffff",width=250,height=50,image=image_B3, foreground="black", compound=CENTER,borderwidth=0, font=('Fixedsys', '20'), command=reset_regles)
                            bou6.place(x=790,y=690)
                            bou8=Button(windows,text="règles.",fg="#ffffff",width=115,height=25,image=image_B2, compound=CENTER,borderwidth=0, font=('Fixedsys', '18'), command=reset_regles)
                            bou8.place(x=1180,y=550)
                        
                        def regles():
                            global can1,background,bou7, bou9,ennonce2
                        
                            reset()
                            can1.itemconfig(background,image=fond_R)
                            can1.focus_set()
                        
                            #texte
                            textefinal = '''
                        Suivant le personnage que vous incarnez, Rut ou Bob, votre objectif
                        est de terrasser votre adversaire.
                        Pour ce faire vous devez enchaîner les combinaisons de touches afin de
                        gagner le combat.
                        Ainsi il est conseillé de prendre connaissance des commandes
                        afin d'etablir une stratégie solide.
                        L'enjeu de ce combat est de déterminer le futur époux de la princesse Sofya
                        tant convoitée. Donnez tout ce que vous avez pour la séduire !!!!!!!!!
                            '''
                        
                            ennonce2=can1.create_text(370,365,text=textefinal,fill="white", font=('Fixedsys', '18'))
                            #bouton
                            bou7=Button(windows,text="Menu principal",fg="#ffffff",width=250,height=50,image=image_B, compound=CENTER,borderwidth=0, font=('Fixedsys', '20'), command=menu)
                            bou7.place(x=450,y=690)
                            bou9=Button(windows,text="Histoire",fg="#ffffff",width=250,height=50,image=image_B3, foreground="black", compound=CENTER,borderwidth=0, font=('Fixedsys', '20'), command=reset_histoire)
                            bou9.place(x=790,y=690)
                        
                        def quitter():
                            if askyesno("Fenêtre décisive", "Êtes-vous sûr de vouloir faire ça?"):
                                windows.destroy()
                            else:
                                showinfo("Fenêtre du meilleur choix", "Vous avez bien raison!")
                        #------------------------------------RESET--------------------------------------
                        def reset():
                            global bou1,bou2,bou3,bou5
                            bou1.place_forget()
                            bou2.place_forget()
                            bou3.place_forget()
                            bou5.place_forget()
                        
                        def reset_histoire():
                            global bou7,bou9,can1,enonce2
                            bou7.place_forget()
                            bou9.place_forget()
                            can1.itemconfig(ennonce2,text="")
                            histoire()
                        
                        def reset_regles():
                            global bou4,bou6, can1,enonce1, bou8
                            bou4.place_forget()
                            bou6.place_forget()
                            bou8.place_forget()
                            can1.itemconfig(ennonce1,text="")
                            regles()
                        #------------------------------------JEUX---------------------------------------
                        #-----------------------------fonction avant jeux-------------------------------
                        #def song():
                        #    launched = True
                        #    pygame.init()
                        #    song = pygame.mixer.Sound("fight_song.wav")
                        #    song.play()
                        #    while launched:
                        #        for even in pygame.event.get():
                        #            if even.type == pygame.QUIT:
                        #                launched = False
                        
                        def switch():
                            global Pchoisi
                            reset()
                            #song()
                            can1.itemconfig(background, image=mes_photos[Pchoisi])
                            Pchoisi += 1
                            if Pchoisi==5:
                                can1.itemconfig(background,image=fond_D)
                                scene()
                            else :
                                windows.after(10, switch)
                        
                        mes_photos = [top3,top2,top1,topF,fond_D]
                        Pchoisi = 0
                        #-------------------------------scene de combat---------------------------------
                        def scene():
                            global pv1,pv2,score1,score2,touches,joueur1,joueur2,,image_bob,image_rut,image_pv1,image_pv2,k1,k2
                        
                            #attribution des joueurs/score a leurs photos
                            joueur1=[rut,Rpoint,Rpoint2]
                            joueur2=[bob,Bpoint,Bpied]
                            score1=[PVr10,PVr9,PVr8,PVr7,PVr6,PVr5,PVr4,PVr3,PVr2,PVr1,PVr0]
                            score2=[PVb10,PVb9,PVb8,PVb7,PVb6,PVb5,PVb4,PVb3,PVb2,PVb1,PVb0]
                            
                            #creation des images dans la fenetre graphique joueurs/score
                            image_rut=can1.create_image(300,300,image=joueur1[0])
                            image_bob=can1.create_image(800,300,image=joueur2[0])
                            image_pv1=can1.create_image(329,65,image=score1[0])
                            image_pv2=can1.create_image(1062,63,image=score2[0])
                            
                            #on associe à can1 un appui/relachement de touche
                            can1.bind("<KeyPress>",pressed)
                            can1.bind("<KeyRelease>",released)
                            
                            #definition des touches
                            touches=[]
                            can1.focus_set()
                            
                            #score
                            pv1,pv2 = 10,10
                            k1,k2 = 0,0
                            scene2()
                        
                        def scene2():
                            ''' Boucle de jeu '''
                        
                            global pv1,pv2,score1,score2,joueur1,joueur2,touches,image_bob,image_rut
                            global image_pv1,image_pv2,k1,k2,pause,can1
                        
                        #JOUEUR1
                            if "A" in touches:
                                can1.itemconfig(image_rut,image=joueur1[1])
                            if "Q" in touches:
                                can1.itemconfig(image_rut,image=joueur1[2])
                        
                        #JOUEUR2
                            if "P" in touches:
                                can1.itemconfig(image_bob,image=joueur2[1])
                            if "M" in touches:
                                can1.itemconfig(image_bob,image=joueur2[2])
                        
                            if(touches != []):
                                if(len(touches) == 2):
                                    touches_s = (''.join(touches))
                        
                                    if (touches_s == 'AP' or touches_s == 'PA' or touches_s == 'QM' or touches_s == 'MQ'):
                                        #j1 perd
                                        k1 += 1
                                        pv1-=1
                                        can1.itemconfig(image_pv1,image=score1[k1])
                                    elif(touches_s == 'QP' or touches_s == 'PQ' or touches_s == 'AM' or touches_s == 'MA'):
                                        #j1 gagne
                                        k2 += 1
                                        pv2-=1
                                        can1.itemconfig(image_pv2,image=score2[k2])
                        
                                touches = []
                        
                            #bouton
                            bou7 =Button(windows, text="",width=66,height=66,borderwidth=0,command=pause)
                            bou7.place(x=663,y=42)
                        
                            #Game over ?
                            if(pv1 == 0 or pv2 == 0):
                                can1.create_text(150,150,text= 'Game over !!!',anchor = NW, fill = 'red', font = ('helvetica', 20, 'bold'))
                                return
                        
                            can1.after(100,scene2)
                        
                        def pressed(event):
                            #on récupère la touche appuyée via t, on la met en majuscules et on l'ajoute a la liste touches
                            global touches
                            t = event.keysym.upper()
                            if not t in touches:
                                touches.append(t)
                        
                        def released(event):
                            #on récupère la touche relaché via t, on la met en majuscules et on l'enlève de la liste touches
                            global touches
                            t = event.keysym.upper()
                            if t in touches:
                                touches.remove(t)
                        
                        def pause():
                            global pause,can1,background
                            pass
                        
                        start()
                        windows.mainloop()
                        
                        1. Merci pour ta réponse.

                          Ton code fonctionne parfaitement, c'est nickel :). Mais c'est dommage d’être obligé d’enfoncer la touche en même temps, si les joueurs jouent chacun leur tour il ne prend pas en compte la saisie. Mais sinon appart ça c'est top (j'ai bien vu t'as modification pour le texte et j’étudierais ça après).

                          Cependant j'aimerai que mon code soit fonctionnel, pour pouvoir comprendre même si après j'utiliserai surement le tient qui parait plus épuré. Donc j'ai corrigé l'erreur que tu as soulevé, maintenant entre toucheA et toucheB, et entre image_pv1 avec score2 il n'y plus de probleme d’après moi.

                          Malgré toujours le même probleme, la barre de vie défile donc je te renvoi la totalité du code même si il n'y a que scene2() qui a été modifié.

                          #-----------------------------PARAMETRE NECESSAIRE------------------------------
                          from tkinter import *
                          from tkinter.messagebox import *
                          import pygame
                          
                          #fenetre graphique
                          windows=Tk()
                          windows.geometry('1400x800')
                          windows.attributes("-fullscreen",0)
                          windows.title("STREET KO")
                          
                          #importation des images MENU ET SOUS MENU
                          fond1=PhotoImage(file="start.png")
                          fond2=PhotoImage(file="menu.png")
                          fond_D=PhotoImage(file="decort.png")
                          fond_P=PhotoImage(file="pause.png")
                          fond_H=PhotoImage(file="histoire.png")
                          fond_R=PhotoImage(file="regles.png")
                          image_B=PhotoImage(file="bouton.png")
                          image_B2=PhotoImage(file="bouton2.png")
                          image_B3=PhotoImage(file="bouton3.png")
                          
                          #importation des images DECOMPTE
                          top3=PhotoImage(file="3.png")
                          top2=PhotoImage(file="2.png")
                          top1=PhotoImage(file="1.png")
                          topF=PhotoImage(file="FIGHT.png")
                          
                          #importation des images PLAYERS
                          image_B4=PhotoImage(file="bouton4.png")
                          rut=PhotoImage(file="rut.png")
                          Rpoint=PhotoImage(file="rut_point.png")
                          Rpoint2=PhotoImage(file="rut_point2.png")
                          bob=PhotoImage(file="bob.png")
                          Bpoint=PhotoImage(file="bob_point.png")
                          Bpied=PhotoImage(file="bob_pied.png")
                          
                          #importation des images SCORE RUT
                          PVr10=PhotoImage(file="PV rut 10.png")
                          PVr9=PhotoImage(file="PV rut 9.png")
                          PVr8=PhotoImage(file="PV rut 8.png")
                          PVr7=PhotoImage(file="PV rut 7.png")
                          PVr6=PhotoImage(file="PV rut 6.png")
                          PVr5=PhotoImage(file="PV rut 5.png")
                          PVr4=PhotoImage(file="PV rut 4.png")
                          PVr3=PhotoImage(file="PV rut 3.png")
                          PVr2=PhotoImage(file="PV rut 2.png")
                          PVr1=PhotoImage(file="PV rut 1.png")
                          PVr0=PhotoImage(file="PV rut 0.png")
                          
                          #importation des images SCORE BOO
                          PVb10=PhotoImage(file="PV bob 10.png")
                          PVb9=PhotoImage(file="PV bob 9.png")
                          PVb8=PhotoImage(file="PV bob 8.png")
                          PVb7=PhotoImage(file="PV bob 7.png")
                          PVb6=PhotoImage(file="PV bob 6.png")
                          PVb5=PhotoImage(file="PV bob 5.png")
                          PVb4=PhotoImage(file="PV bob 4.png")
                          PVb3=PhotoImage(file="PV bob 3.png")
                          PVb2=PhotoImage(file="PV bob 2.png")
                          PVb1=PhotoImage(file="PV bob 1.png")
                          PVb0=PhotoImage(file="PV bob 0.png")
                          #-------------------------------PAGE D'OUVERTURE--------------------------------
                          def start():
                            can0=Canvas(windows,width=1400,height=800,bg="#17202a")
                            can0.place(x=0,y=0)
                            background0=can0.create_image(0,0,image=fond1,anchor="nw")
                            can0.focus_set()
                            can0.bind("<Key>",test_entree)
                          
                          def test_entree(event):
                            touche=event.keysym
                            if touche=="Return" :
                              menu()
                          #-------------------------------MENU ET SOUS MENU-------------------------------
                          def menu():
                              global can1,bou1,bou2,bou3,bou5,background
                              can1=Canvas(windows,width=1400,height=800,bg="#17202a")
                              can1.place(x=0,y=0)
                              background=can1.create_image(0,0,image=fond2,anchor="nw")
                              can1.focus_set()
                              #bouton
                              bou1=Button(windows,text="Quitter",fg="#ffffff",width=250,height=50,image=image_B,compound=CENTER,borderwidth=0, font=('Fixedsys', '20'), command=quitter)
                              bou1.place(x=65,y=500)
                              bou2=Button(windows,text="Règles",fg="#ffffff",width=250,height=50,image=image_B,compound=CENTER,borderwidth=0, font=('Fixedsys', '20'), command=regles)
                              bou2.place(x=65,y=240)
                              bou3=Button(windows,text="Commencer",fg="#ffffff",width=250,height=50,image=image_B,compound=CENTER,borderwidth=0,font=('Fixedsys', '20'), command=switch)
                              bou3.place(x=65,y=110)
                              bou5=Button(windows,text="Histoire",fg="#ffffff",width=250,height=50,image=image_B,compound=CENTER,borderwidth=0, font=('Fixedsys', '20'), command=histoire)
                              bou5.place(x=65,y=370)
                              #bool_hitoire==False
                          
                              #if bool_hitoire==False :
                                  #bou2=Button(windows,text="Règles",fg="#ffffff",width=220,height=40,image=bouton_gris,compound=CENTER,borderwidth=0,command=menu)
                                  #bou2.place(x=215,y=240)
                              #else :
                                  #bou2=Button(windows,text="Règles",fg="#ffffff",width=220,height=40,image=image_B,compound=CENTER,borderwidth=0,command=regles)
                                  #bou2.place(x=215,y=240)
                          
                          def histoire():
                              global can1,background,bou4,bou6,ennonce1,bou8
                              reset()
                              can1.itemconfig(background,image=fond_H)
                              can1.focus_set()
                              #texte
                              text1="Il fut un temps où les guerres faisaient rage. Impac-"
                              text2="tant la galaxie entière des millions de victimes ont"
                              text3="été déplorés. L'objectif était toujours le même le dé-"
                              text4="sir ardent d'être le plus puissant. Les dirigeants des"
                              text5="quatre-coints de la galaxie en perdaient la raison."
                              text6="C'est alors qu'un scientifique neutre créa deux comba-"
                              text7="ttants hors-pairs, Rut et Bob. Tout juste sortis du"
                              text8="four ils etaient déjà impliqués dans le combat. Alors"
                              text9="dotés de capacités sans pareil, ils mirent fin à ces"
                              text10="guerres et acquierent de nouveaux pouvoirs. Des années"
                              text11="plus tard ils sont de nouveau reunis mais cette fois"
                              text12="pour s'affronter. Le combat aura lieu à la plage 4586,"
                              text13="sous un soleil tropical où les deux compagnons ont par"
                              text14="le passé mis un terme à ces guerres. L'issue du com"
                              text15="-bat sera décisive pour le futur. Afin d'en connaître"
                              text16="d'avantage veuillez prendre connaissance des règles."
                              textefinal=text1+'\n'+text2+'\n'+text3+'\n'+text4+'\n'+text5+'\n'+text6+'\n'+text7+'\n'+text8+'\n'+text9+'\n'+text10+'\n'+text11+'\n'+text12+'\n'+text13+'\n'+text14+'\n'+text15+'\n'+text16
                              ennonce1=can1.create_text(895,340,text=textefinal,fill="white", font=('Fixedsys', '18'))
                              #bouton
                              bou4=Button(windows,text="Menu principal",fg="#ffffff",width=250,height=50,image=image_B, compound=CENTER,borderwidth=0, font=('Fixedsys', '20'), command=menu)
                              bou4.place(x=450,y=690)
                              bou6=Button(windows,text="Règles",fg="#ffffff",width=250,height=50,image=image_B3, foreground="black", compound=CENTER,borderwidth=0, font=('Fixedsys', '20'), command=reset_regles)
                              bou6.place(x=790,y=690)
                              bou8=Button(windows,text="règles.",fg="#ffffff",width=115,height=25,image=image_B2, compound=CENTER,borderwidth=0, font=('Fixedsys', '18'), command=reset_regles)
                              bou8.place(x=1180,y=550)
                          
                          def regles():
                              global can1,background,bou7, bou9,ennonce2
                              reset()
                              can1.itemconfig(background,image=fond_R)
                              can1.focus_set()
                              #texte
                              text1="Suivant le personnage que vous in-"
                              text2="carnez, Rut ou Bob, votre objectif"
                              text3="est de terrasser votre adversaire."
                              text4="Pour ce faire vous devez enchaîner"
                              text5="les combinaisons de touche afin de"
                              text6="gagner le combat. Ainsi il est con-"
                              text7="seillé de prendre connaissance des"
                              text8="commandes afin d'etablir une stra-"
                              text9="tégie solide. L'enjeu de ce combat"
                              text10="est de déterminer le futur époux"
                              text11="de la princesse Sofya tant convoi-"
                              text12="tée. Donner tout ce que vous avez"
                              text13="pour chopper cette BOMBE !!!!!!!!!"
                              textefinal2=text1+'\n'+text2+'\n'+text3+'\n'+text4+'\n'+text5+'\n'+text6+'\n'+text7+'\n'+text8+'\n'+text9+'\n'+text10+'\n'+text11+'\n'+text12+'\n'+text13
                              ennonce2=can1.create_text(370,365,text=textefinal2,fill="white", font=('Fixedsys', '18'))
                              #bouton
                              bou7=Button(windows,text="Menu principal",fg="#ffffff",width=250,height=50,image=image_B, compound=CENTER,borderwidth=0, font=('Fixedsys', '20'), command=menu)
                              bou7.place(x=450,y=690)
                              bou9=Button(windows,text="Histoire",fg="#ffffff",width=250,height=50,image=image_B3, foreground="black", compound=CENTER,borderwidth=0, font=('Fixedsys', '20'), command=reset_histoire)
                              bou9.place(x=790,y=690)
                          
                          def quitter():
                              if askyesno("Fenêtre décisive", "Êtes-vous sûr de vouloir faire ça?"):
                                  windows.destroy()
                              else:
                                  showinfo("Fenêtre du meilleur choix", "Vous avez bien raison!")
                          #------------------------------------RESET--------------------------------------
                          def reset():
                              global bou1,bou2,bou3,bou5
                              bou1.place_forget()
                              bou2.place_forget()
                              bou3.place_forget()
                              bou5.place_forget()
                          
                          def reset_histoire():
                              global bou7,bou9,can1,enonce2
                              bou7.place_forget()
                              bou9.place_forget()
                              can1.itemconfig(ennonce2,text="")
                              histoire()
                          
                          def reset_regles():
                              global bou4,bou6, can1,enonce1, bou8
                              bou4.place_forget()
                              bou6.place_forget()
                              bou8.place_forget()
                              can1.itemconfig(ennonce1,text="")
                              regles()
                          #------------------------------------JEUX---------------------------------------
                          #-----------------------------fonction avant jeux-------------------------------
                          def song():
                              launched = True
                              pygame.init()
                              song = pygame.mixer.Sound("fight_song.wav")
                              song.play()
                              while launched:
                                  for even in pygame.event.get():
                                      if even.type == pygame.QUIT:
                                          launched = False
                          
                          def switch():
                              global Pchoisi
                              reset()
                              #song()
                              can1.itemconfig(background, image=mes_photos[Pchoisi])
                              Pchoisi += 1
                              if Pchoisi==5:
                                  can1.itemconfig(background,image=fond_D)
                                  scene()
                              else :
                                  windows.after(10, switch)
                          
                          mes_photos = [top3,top2,top1,topF,fond_D]
                          Pchoisi = 0
                          #-------------------------------scene de combat---------------------------------
                          def scene():
                              global pv1,pv2,score1,score2,touches,joueur1,joueur2,toucheB,toucheA,image_bob,image_rut,image_pv1,image_pv2,k1,k2
                              #attribution des joueurs/score a leurs photos
                              joueur1=[rut,Rpoint,Rpoint2]
                              joueur2=[bob,Bpoint,Bpied]
                              score1=[PVr10,PVr9,PVr8,PVr7,PVr6,PVr5,PVr4,PVr3,PVr2,PVr1,PVr0]
                              score2=[PVb10,PVb9,PVb8,PVb7,PVb6,PVb5,PVb4,PVb3,PVb2,PVb1,PVb0]
                              #creation des images dans la fenetre graphique joueurs/score
                              image_rut=can1.create_image(300,300,image=joueur1[0])
                              image_bob=can1.create_image(800,300,image=joueur2[0])
                              image_pv1=can1.create_image(329,65,image=score1[0])
                              image_pv2=can1.create_image(1062,63,image=score2[0])
                              #on associe à can1 un appui/relachement de touche
                              can1.bind("<KeyPress>",pressed)
                              can1.bind("<KeyRelease>",released)
                              #definition des touches
                              toucheA=""
                              toucheB=""
                              touches=[]
                              can1.focus_set()
                              #score
                              pv1,pv2 = 10,10
                              k1,k2 = 0,0
                              scene2()
                          
                          def scene2():
                              global pv1,pv2,score1,score2,joueur1,joueur2,touches,toucheA,toucheB,image_bob,image_rut,image_pv1,image_pv2,k1,k2,pause
                          #JOUEUR1
                              if "A" in touches:
                                  can1.itemconfig(image_rut,image=joueur1[1])
                                  toucheA="A"
                              if "Q" in touches:
                                  can1.itemconfig(image_rut,image=joueur1[2])
                                  toucheA="Q"
                          #JOUEUR2
                              if "P" in touches:
                                  can1.itemconfig(image_bob,image=joueur2[1])
                                  toucheB="P"
                              if "M" in touches:
                                  can1.itemconfig(image_bob,image=joueur2[2])
                                  toucheB="M"
                          #SCORE1
                              if toucheA=="A" and toucheB=="M" :
                                  #j1 gagne
                                  k2 += 1
                                  pv2-=1
                                  can1.itemconfig(image_pv2,image=score2[k2])
                              if toucheA=="A" and toucheB=="P" :
                                  #j1 perd
                                  k1 += 1
                                  pv1-=1
                                  can1.itemconfig(image_pv1,image=score1[k1])
                              if toucheA=="Q" and toucheB=="P" :
                                  #j1 gagne
                                  k2 += 1
                                  pv2-=1
                                  can1.itemconfig(image_pv2,image=score2[k2])
                              if toucheA=="Q" and toucheB=="M" :
                                  #j1 perd
                                  k1 += 1
                                  pv1-=1
                                  can1.itemconfig(image_pv1,image=score1[k1])
                          #SCORE2
                              if toucheB=="P" and toucheA=="A" :
                                  #j2 gagne
                                  k1 += 1
                                  pv1-=1
                                  can1.itemconfig(image_pv1,image=score1[k1])
                              if toucheB=="P" and toucheA=="Q" :
                                  #j2 perd
                                  k2 += 1
                                  pv2-=1
                                  can1.itemconfig(image_pv2,image=score2[k2])
                              if toucheB=="M" and toucheA=="Q" :
                                  #j2 gagne
                                  k1 += 1
                                  pv1-=1
                                  can1.itemconfig(image_pv1,image=score1[k1])
                              if toucheB=="M" and toucheA=="A" :
                                  #j2 perd
                                  k2 += 1
                                  pv2-=1
                                  can1.itemconfig(image_pv2,image=score2[k2])
                              touches=[]
                              #bouton
                              bou7 =Button(windows, text="",width=66,height=66,borderwidth=0,image=image_B4,command=pause)
                              bou7.place(x=663,y=42)
                              can1.after(100,scene2)
                          
                          def pressed(event):
                              #on récupère la touche appuyée via t, on la met en majuscules et on l'ajoute a la liste touches
                              global touches
                              t = event.keysym.upper()
                              if not t in touches:
                                  touches.append(t)
                          
                          def released(event):
                              #on récupère la touche relaché via t, on la met en majuscules et on l'enlève de la liste touches
                              global touches
                              t = event.keysym.upper()
                              if t in touches:
                                  touches.remove(t)
                          
                          def pause():
                              global pause,can1,background
                              pass
                          #--------------------------------LANCEMENT--------------------------------------
                          start()
                          windows.mainloop()
                          1. Bonjour Antoine,

                            Non, en fait tu n'as pas corrigé tous les bugs dans ta batterie de tests
                            Regarde plus attentivement ...


                            Je vois que ça ne te saute pas aux yeux tout de suite: c'est normal, et on en revient toujours à ce que je dis depuis le début, plus un code est simple, clair, concis, et mieux on peut le comprendre et le debugger

                            Pourquoi 8 tests if pour trouver le gagnant ?
                            (tu aimes bien la complication, on dirait :-) )
                            On est d'accord qu'il n'y a que 2 cas possibles:
                            joueur 1 gagne (joueur 2 perd, c'est le même cas)
                            joueur 2 gagne (joueur 1 perd, c'est le même cas)

                            Regarde mon code: 2 tests if pour les 2 cas, seulement, et ça suffit
                            pour que ce soit plus simple à tester, je commence par convertir la liste touches en 1 chaine de caractères : touches_s, donc ['A', 'M'] devient 'AM' par exemple

                            Et grâce à la fonction or, je teste tout en une seule ligne:
                            if (touches_s == 'AP' or touches_s == 'PA' or ..............
                            Pas besoin de faire 8 tests if, donc moins de sources d'erreurs

                            Pendant que j'y suis, j'ai oublié d'enlever les lignes suivantes:

                            can1.bind("<KeyRelease>",released)

                            et

                            def released(event):
                            #on récupère la touche relaché via t, on la met en majuscules et on l'enlève de la liste touches
                            global touches
                            t = event.keysym.upper()
                            if t in touches:
                            touches.remove(t)

                            Nous savons maintenant tous les deux qu'elles ne servent à rien et de plus elles ne fonctionnent pas

                            Tu défini un Canvas dans start() et un autre dans menu(): le 2eme ne sert à rien, il suffit d'utiliser toujours le 1er

                            Je te laisse scruter attentivement ta fonction scene2() .....
                            1. Salut Phil,

                              J'ai corrigé le beug, mais maintenant les barres de vie partent 2 par 2. Mais je suis quand même arrive a ce que je voulais c'est a dire debeugé le défilement de la barre de vie.

                              Je me suis aussi intéressé au tient et je me rends bien compte qu'on cherche a faire la même chose mais que tu y est arrivé de manière bien plus explicite et épuré. J'ai compris le mécanisme de ton code et c'est vrai qu'on gagne de l'espace, il est bien plus performant, et facile a comprendre quand on s'y intéresse. C’était juste le temps que je comprenne les détails de ton code.

                              Je t’envoie donc les lignes que j'ai rajouté au mien mais juste pour t'informer ne t'en fait pas: (ligne 15)

                              #JOUEUR1
                                  if "A" in touches:
                                      can1.itemconfig(image_rut,image=joueur1[1])
                                      toucheA="A"
                                  if "Q" in touches:
                                      can1.itemconfig(image_rut,image=joueur1[2])
                                      toucheA="Q"
                              #JOUEUR2
                                  if "P" in touches:
                                      can1.itemconfig(image_bob,image=joueur2[1])
                                      toucheB="P"
                                  if "M" in touches:
                                      can1.itemconfig(image_bob,image=joueur2[2])
                                      toucheB="M"
                                  if "A" not in touches and "Q" not in touches:
                                      toucheA=""
                                  if "P" not in touches and "M" not in touches:
                                      toucheB=""


                              Il me reste plus qu'a gérer le son et essayer de trouver une fonction pause qui remplit toutes mes attentes et mon jeux sera fini.

                              Si tu souhaites encore m'aider sur ce point c'est avec plaisir mais sinon pas de soucis, tu m'as beaucoup aider et on a enfin résolu le probleme principale donc je mettrai le sujet en "résolu".

                              Encore merci pour ton aide :)
                              1. Les barres partent 2 par 2 ?
                                Ce n'est pas encore ça, le bug n'est pas corrigé

                                Si tu regardes bien encore, tu verras que tu as fait des trucs en double:
                                if toucheA=="A" and toucheB=="M" :

                                c'est la même chose que:
                                if toucheB=="M" and toucheA=="A" :

                                Tu as juste inversé les termes au lieu d'inverser les lettres dans les variables !

                                Au fait tu disais : "dommage d’être obligé d’enfoncer la touche en même temps"
                                En fait si on augment un peu le temps dans la boucle scene(), ca permet un léger décalage
                                entre les appuis : can1.after(1000,scene2)

                                N'oublie pas le game over !

                                Pour moi, le code idéal, si ca t'intéresse, serait comme ça:
                                les fonctions en 1er
                                la définition de l'interface et des images ensuite, hors fonctions

                                note les 2 variables HAUTEUR et LARGEUR permettant de changer d'un coup la taille de la
                                fenêtre principale et du canvas, et il n'y a plus qu'un seul canvas, c'est suffisant

                                Si tu veux encore peaufiner le truc:
                                En général, il faut éviter les variables globales, c'est source d'erreurs, il vaut mieux faire de la
                                programmation objet, sans aller jusque là, en général, je fais comme ça:

                                Je définis une classe G qui est la classe des variables globales:

                                class G():
                                    ''' 'Variables globales'''
                                    val = '10'
                                    msg = 'fin'
                                
                                def test()
                                    print(G.val)
                                    print(G.msg)
                                


                                Du coup, plus besoin d'écrire global val, msg, ... dans toutes les fonctions, au risque d'en oublier

                                Voila, je te laisse méditer tout ça …

                                # -*- coding:UTF-8 -*-
                                #Street fighter   12/05/2020 10:58:48
                                
                                from tkinter import *
                                from tkinter.messagebox import *
                                import pygame
                                
                                def start():
                                  ''' Ecran de départ '''
                                
                                   global decompte, flag_r, flag_h
                                
                                   decompte = 0
                                   flag_r = False
                                   flag_h = False
                                
                                   background0=can1.create_image(0,0,image=fond1,anchor="nw")
                                
                                def test_entree(event):
                                   ''' Pour lancer le jeu appuyer sur "return" '''
                                
                                   touche=event.keysym
                                   if touche=="Return" : menu()
                                
                                def menu():
                                    ''' Menu de démarrage '''
                                
                                    global bou1,bou2,bou3,bou5,background
                                
                                    reset_h_r_boutons()
                                
                                    background=can1.create_image(0,0,image=fond2,anchor="nw")
                                    can1.focus_set()
                                
                                    #boutons
                                    bou1=Button(windows,text="Quitter",fg = 'blue',compound=CENTER,borderwidth=0, font=('Fixedsys', '20'), command=quitter)
                                    bou1.place(x=65,y=500)
                                
                                    bou2=Button(windows,text="Règles",fg="blue",compound=CENTER,borderwidth=0, font=('Fixedsys', '20'), command=regles)
                                    bou2.place(x=65,y=240)
                                
                                    bou3=Button(windows,text="Commencer",fg="blue",compound=CENTER,borderwidth=0,font=('Fixedsys', '20'), command=go)
                                    bou3.place(x=65,y=110)
                                
                                    bou5=Button(windows,text="Histoire",fg="blue",compound=CENTER,borderwidth=0, font=('Fixedsys', '20'), command=histoire)
                                    bou5.place(x=65,y=370)
                                
                                def histoire():
                                    ''' Affichage de l'histoire '''
                                
                                    global background,bou4,bou6,ennonce_h,bou8,flag_h
                                
                                    #Efface les boutons
                                    reset_boutons()
                                
                                    can1.itemconfig(background,image=fond_H)
                                    can1.focus_set()
                                
                                    textefinal='''
                                Il fut un temps où les guerres faisaient rage. Impactant la galaxie entière
                                des millions de victimes furent déplorés.
                                L'objectif était toujours le même le désir ardent d'être le plus puissant.
                                Les dirigeants des quatre-coints de la galaxie en perdaient la raison.
                                
                                C'est alors qu'un scientifique neutre créa deux combattants hors-pair,
                                Rut et Bob. Tout juste sortis du four ils etaient déjà impliqués dans
                                le combat. Alors dotés de capacités sans pareil, ils mirent fin à ces
                                guerres et acquerirent de nouveaux pouvoirs.
                                
                                Des années plus tard ils sont de nouveau reunis mais cette fois
                                pour s'affronter. Le combat aura lieu à la plage 4586,
                                sous un soleil tropical où les deux compagnons ont par
                                
                                le passé mis un terme à ces guerres. L'issue du combat sera décisive
                                pour le futur.
                                Afin d'en connaître davantage veuillez prendre connaissance des règles.
                                    '''
                                    ennonce_h=can1.create_text(650,330,text=textefinal,fill="black", font=('Fixedsys', '18'))
                                
                                    #boutons
                                    bou4=Button(windows,text="Menu principal",fg="red", compound=CENTER,borderwidth=0, font=('Fixedsys', '20'), command=menu)
                                    bou4.place(x=450,y=590)
                                
                                    bou6=Button(windows,text="Règles",fg="red", compound=CENTER,borderwidth=0, font=('Fixedsys', '20'), command=reset_regles)
                                    bou6.place(x=790,y=590)
                                    flag_h = True
                                
                                def regles():
                                    ''' Affichage des règles du jeu '''
                                
                                    global background,bou7, bou9,ennonce_r,flag_r
                                
                                    #Efface les boutons
                                    reset_boutons()
                                
                                    can1.itemconfig(background,image=fond_R)
                                    can1.focus_set()
                                
                                    textefinal = '''
                                Suivant le personnage que vous incarnez, Rut ou Bob, votre objectif
                                est de terrasser votre adversaire.
                                Pour ce faire vous devez enchaîner les combinaisons de touches afin de
                                gagner le combat.
                                Ainsi il est conseillé de prendre connaissance des commandes
                                afin d'etablir une stratégie solide.
                                L'enjeu de ce combat est de déterminer le futur époux de la princesse
                                Sofya tant convoitée. Donnez tout ce que vous avez pour la séduire !!!!
                                    '''
                                    ennonce_r=can1.create_text(700,365,text=textefinal,fill="black", font=('Fixedsys', '18'))
                                
                                    #boutons
                                    bou7=Button(windows,text="Menu principal",fg="red", compound=CENTER,borderwidth=0, font=('Fixedsys', '20'), command=menu)
                                    bou7.place(x=450,y=590)
                                
                                    bou9=Button(windows,text="Histoire",fg="red", compound=CENTER,borderwidth=0, font=('Fixedsys', '20'), command=reset_histoire)
                                    bou9.place(x=790,y=590)
                                    flag_r = True
                                
                                def quitter():
                                    ''' Quitter le jeu '''
                                
                                    if askyesno("Fenêtre décisive", "Êtes-vous sûr de vouloir faire ça?"):
                                        windows.destroy()
                                    else:
                                        showinfo("Fenêtre du meilleur choix", "Vous avez bien raison!")
                                
                                def reset_boutons():
                                    ''' Efface les boutons '''
                                
                                    global bou1,bou2,bou3,bou5
                                
                                    bou1.place_forget()
                                    bou2.place_forget()
                                    bou3.place_forget()
                                    bou5.place_forget()
                                
                                def reset_h_r_boutons():
                                    ''' Efface les boutons histoires et règles'''
                                
                                    global bou4,bou6,bou7,bou9, flag_h, flag_r
                                
                                    can1.delete('all')
                                
                                    if(flag_h):
                                        bou4.place_forget()
                                        bou6.place_forget()
                                        flag_h = False
                                
                                    if(flag_r):
                                        bou7.place_forget()
                                        bou9.place_forget()
                                        flag_r = False
                                
                                def reset_histoire():
                                    ''' Efface les boutons et lancer l'histoire '''
                                
                                    global bou7,bou9,can1,enonce_r
                                
                                    bou7.place_forget()
                                    bou9.place_forget()
                                    can1.delete(ennonce_r)
                                    histoire()
                                
                                def reset_regles():
                                    ''' Efface les boutons et lancer les règles '''
                                
                                    global bou4,bou6,enonce_h
                                
                                    bou4.place_forget()
                                    bou6.place_forget()
                                    can1.delete(ennonce_h)
                                    regles()
                                
                                def go():
                                    ''' Démarre le jeu au bout de 5/10e de secondes'''
                                
                                    global decompte
                                
                                    reset_boutons()
                                    can1.itemconfig(background, image=mes_photos[decompte])
                                    decompte += 1
                                
                                    if decompte==5:
                                        can1.itemconfig(background,image=fond_D)
                                        scene_init()
                                    else :
                                        windows.after(10, go)
                                
                                def scene_init():
                                    ''' Initialise la scene de jeu '''
                                
                                    global pv1,pv2,score1,score2,touches,joueur1,joueur2,image_bob
                                    global image_rut,image_pv1,image_pv2,k1,k2
                                
                                    #attribution des joueurs/score a leurs photos
                                    joueur1=[rut,Rpoint,Rpoint2]
                                    joueur2=[bob,Bpoint,Bpied]
                                    score1=[PVr10,PVr9,PVr8,PVr7,PVr6,PVr5,PVr4,PVr3,PVr2,PVr1,PVr0]
                                    score2=[PVb10,PVb9,PVb8,PVb7,PVb6,PVb5,PVb4,PVb3,PVb2,PVb1,PVb0]
                                
                                    #creation des images dans la fenetre graphique joueurs/score
                                    image_rut=can1.create_image(300,300,image=joueur1[0])
                                    image_bob=can1.create_image(800,300,image=joueur2[0])
                                    image_pv1=can1.create_image(329,65,image=score1[0])
                                    image_pv2=can1.create_image(500,63,image=score2[0])
                                
                                    #definition des touches
                                    touches=[]
                                    can1.focus_set()
                                
                                    #score
                                    pv1,pv2 = 10,10
                                    k1,k2 = 0,0
                                 
                                    scene()
                                
                                def scene():
                                    ''' Scene de jeu '''
                                
                                    global pv1,pv2,score1,score2,joueur1,joueur2,touches,image_bob,image_rut
                                    global image_pv1,image_pv2,k1,k2,pause
                                
                                #JOUEUR 1
                                    if "A" in touches:
                                        can1.itemconfig(image_rut,image=joueur1[1])
                                    if "Q" in touches:
                                        can1.itemconfig(image_rut,image=joueur1[2])
                                
                                #JOUEUR 2
                                    if "P" in touches:
                                        can1.itemconfig(image_bob,image=joueur2[1])
                                    if "M" in touches:
                                        can1.itemconfig(image_bob,image=joueur2[2])
                                
                                    if(touches != []):
                                        if(len(touches) == 2):
                                            touches_s = (''.join(touches))
                                
                                            if (touches_s == 'AP' or touches_s == 'PA' or touches_s == 'QM' or touches_s == 'MQ'):
                                                #j1 perd
                                                k1 += 1
                                                pv1-=1
                                                can1.itemconfig(image_pv1,image=score1[k1])
                                            elif(touches_s == 'QP' or touches_s == 'PQ' or touches_s == 'AM' or touches_s == 'MA'):
                                                #j1 gagne
                                                k2 += 1
                                                pv2-=1
                                                can1.itemconfig(image_pv2,image=score2[k2])
                                
                                        touches = []
                                
                                    #Game over ?
                                    if(pv1 == 0 or pv2 == 0):
                                        can1.create_text(150,150,text= 'Game over !!!',anchor = NW, fill = 'red', font = ('helvetica', 20, 'bold'))
                                        return
                                
                                    can1.after(1000,scene)
                                
                                def pressed(event):
                                    ''' on récupère la touche appuyée via t, on la met en majuscules
                                    et on l'ajoute a la liste touches '''
                                
                                    global touches
                                
                                    t = event.keysym.upper()
                                    if not t in touches:
                                        touches.append(t)
                                
                                
                                #Interface graphique
                                LARGEUR = 1300
                                HAUTEUR = 690
                                
                                windows=Tk()
                                windows.geometry(str(LARGEUR)+'x'+str(HAUTEUR)+'+10+10')
                                windows.title("STREET KO")
                                windows.bind("<Key>",test_entree)
                                
                                can1=Canvas(windows,width=LARGEUR,height=HAUTEUR,bg="green")
                                can1.place(x=0,y=0)
                                can1.bind("<KeyPress>",pressed)
                                
                                #importation des images MENU ET SOUS MENU
                                fond1=PhotoImage(file="start.png")
                                fond2=PhotoImage(file="menu.png")
                                fond_D=PhotoImage(file="decort.png")
                                fond_P=PhotoImage(file="pause.png")
                                fond_H=PhotoImage(file="histoire.png")
                                fond_R=PhotoImage(file="regles.png")
                                image_B=PhotoImage(file="bouton.png")
                                image_B2=PhotoImage(file="bouton2.png")
                                image_B3=PhotoImage(file="bouton3.png")
                                
                                #importation des images DECOMPTE
                                top3=PhotoImage(file="3.png")
                                top2=PhotoImage(file="2.png")
                                top1=PhotoImage(file="1.png")
                                topF=PhotoImage(file="FIGHT.png")
                                
                                #importation des images PLAYERS
                                image_B4=PhotoImage(file="bouton4.png")
                                rut=PhotoImage(file="rut.png")
                                Rpoint=PhotoImage(file="rut_point.png")
                                Rpoint2=PhotoImage(file="rut_point2.png")
                                bob=PhotoImage(file="bob.png")
                                Bpoint=PhotoImage(file="bob_point.png")
                                Bpied=PhotoImage(file="bob_pied.png")
                                
                                mes_photos = [top3,top2,top1,topF,fond_D]
                                
                                #importation des images SCORE RUT
                                PVr10=PhotoImage(file="PV rut 10.png")
                                PVr9=PhotoImage(file="PV rut 9.png")
                                PVr8=PhotoImage(file="PV rut 8.png")
                                PVr7=PhotoImage(file="PV rut 7.png")
                                PVr6=PhotoImage(file="PV rut 6.png")
                                PVr5=PhotoImage(file="PV rut 5.png")
                                PVr4=PhotoImage(file="PV rut 4.png")
                                PVr3=PhotoImage(file="PV rut 3.png")
                                PVr2=PhotoImage(file="PV rut 2.png")
                                PVr1=PhotoImage(file="PV rut 1.png")
                                PVr0=PhotoImage(file="PV rut 0.png")
                                
                                #importation des images SCORE BOO
                                PVb10=PhotoImage(file="PV bob 10.png")
                                PVb9=PhotoImage(file="PV bob 9.png")
                                PVb8=PhotoImage(file="PV bob 8.png")
                                PVb7=PhotoImage(file="PV bob 7.png")
                                PVb6=PhotoImage(file="PV bob 6.png")
                                PVb5=PhotoImage(file="PV bob 5.png")
                                PVb4=PhotoImage(file="PV bob 4.png")
                                PVb3=PhotoImage(file="PV bob 3.png")
                                PVb2=PhotoImage(file="PV bob 2.png")
                                PVb1=PhotoImage(file="PV bob 1.png")
                                PVb0=PhotoImage(file="PV bob 0.png")
                                
                                start()
                                windows.mainloop()
                                
                                1. Bien vu pour l'astuce de mettre 1000 au lieu de 100, mais l’inconvenant c'est que le jeux perd de son dynamise.

                                  Je prends note de tes conseils et les garde pour moi car notre prof ne veut pas qu'on utilise les Classes et autre fonctions plus pratique, c'est pas au programme donc chaque chose en son temps.

                                  Mais ça n’empêche, je note tout ça pour plus tard.

                                  L'importation des images a la fin indique une erreur il me semble, les listes sont créer avant donc les images ne sont pas encore importé.
                                  1. Tu veux dire son "dynamisme" .... met 500 alors, ca fait un bon compromis

                                    tu parles des images a la fin : mais tu as vraiment testé ou pas ???
                                    chez moi ca marche parfaitement


                                    L'interpréteur Python lit la définition des images en 1er, puis, lorsqu'on appelle une fonction qui contient une liste, hé bien les images sont donc connues

                                    Ca n'est pas l'ordre d'écriture dans le programme qui compte, on est dans une programmation gérée par les évènements, pas une programmation séquentielle

                                    Si tu regardes bien, il n'y a pas de définitions de listes ou de quoi que ce soit en dehors des fonctions, il y a d'abord toutes les fonctions l'une après l'autre et ensuite la création de l'interface, la définition des images, l'appel de start() pour démarrer et enfin la boucle mainloop() pour attendre les évènements

                                    Même si tu n'utilise pas les classes essaye quand même de faire au maximum comme dans mon exemple, la structure, un seul canvas, les bind a la fin, les 2 variables pour retailler les fenêtres en même temps, et ma structure pour le calcul du gagnant, les textes en une seule variable et … le game over !
                                    1. Oui j'ai essayé et ça fonctionne bien.

                                      Je vais faire au mieux mdr
                                      1. Bonjour Antoine,

                                        Ok !

                                        Tout as tous les éléments en main maintenant ...
                                        Précédent
                                        • 1
                                        • 2
                                        • 3