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

Résolu
Précédent
  • 1
  • 2
  • 3
  1. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    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
    0
  2. Antoine451833
     
    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.
    0
  3. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    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
    0
  4. Antoine451833
     
    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)
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    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
    0
  7. Antoine451833
     
    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()
    0
  8. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    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 ...
    0
  9. Antoine451833
     
    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.
    0
  10. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    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

    0
  11. Antoine451833
     
    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.
    0
  12. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    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()
    
    0
  13. Antoine451833
     
    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()
    0
  14. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    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() .....
    0
  15. Antoine451833
     
    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 :)
    0
  16. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    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()
    
    0
  17. Antoine451833
     
    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é.
    0
  18. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    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 !
    0
  19. Antoine451833
     
    Oui j'ai essayé et ça fonctionne bien.

    Je vais faire au mieux mdr
    0
  20. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    Bonjour Antoine,

    Ok !

    Tout as tous les éléments en main maintenant ...
    0
  21. Antoine451833
     
    Yep !

    Merci a toi et bonne journée.
    0
Précédent
  • 1
  • 2
  • 3