Erreur python missing 1 required positional argument: 'event'

Résolu/Fermé
Antoine451833 Messages postés 47 Date d'inscription vendredi 1 mai 2020 Statut Membre Dernière intervention 13 mai 2020 - 6 mai 2020 à 16:25
Antoine451833 Messages postés 47 Date d'inscription vendredi 1 mai 2020 Statut Membre Dernière intervention 13 mai 2020 - 13 mai 2020 à 13:15
Bonjour a tous,

J'ai vu pas mal de question a ce sujet mais aucune ne répond a mon probleme. Donc si vous pouviez m'aider, comme indique dans le titre j'ai une erreur: missing 1 required positional argument: 'event'. C'est surement tout bête mais je ne vois pas d’où ça vient. Je vous envoi le code en question

def scene():
    global touches,joueur1,joueur2
    joueur1=[rut,Rpoint,Rpoint2]
    joueur2=[bob,Bpoint,Bpied]
    touches = ["A","M"]
    can1.focus_set()
    can1.bind("<KeyPress>",pressed)
    can1.bind("<KeyRelease>",released)
    scene2()

def scene2(event):
    global joueur1,joueur2,touches
    t = event.keysym.upper()

    if t=="A" and t in touches:
        can1.create_image(100,100,image=joueur1[0])
        toucheA="A"
    if t=="M" and t in touches:
        can1.create_image(200,100,image=joueur2[0])
        toucheB="M"

    if toucheA=="A" and toucheB=="M" :
        score1=score1+1
    if toucheA=="A" and toucheB=="P" :
        score2=score2+1
    #bouton
    bou7 =Button(windows, text="pause", width =10,borderwidth=0, command=pause)
    bou7.place(x=100,y=720)
    can1.after(100,scene2)

def pressed(event):
    #on rajoute la touche pressée dans la liste touches si elle n’y est pas déjà
    global touches
    t = event.keysym.upper()
    if not t in touches:
        touches.append(t)


def released(event):
    #on enlève la touche relachée de la liste touches
    global touches
    t = event.keysym.upper()
    if t in touches:
        touches.remove(t)
A voir également:

60 réponses

Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
Modifié le 10 mai 2020 à 17:12
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
Antoine451833 Messages postés 47 Date d'inscription vendredi 1 mai 2020 Statut Membre Dernière intervention 13 mai 2020
10 mai 2020 à 17:54
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
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
10 mai 2020 à 18:06
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
Antoine451833 Messages postés 47 Date d'inscription vendredi 1 mai 2020 Statut Membre Dernière intervention 13 mai 2020
Modifié le 10 mai 2020 à 20:13
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
11 mai 2020 à 11:37
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
Antoine451833 Messages postés 47 Date d'inscription vendredi 1 mai 2020 Statut Membre Dernière intervention 13 mai 2020
Modifié le 11 mai 2020 à 11:54
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
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
Modifié le 11 mai 2020 à 12:04
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
Antoine451833 Messages postés 47 Date d'inscription vendredi 1 mai 2020 Statut Membre Dernière intervention 13 mai 2020
11 mai 2020 à 15:13
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
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
Modifié le 11 mai 2020 à 16:17
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
Antoine451833 Messages postés 47 Date d'inscription vendredi 1 mai 2020 Statut Membre Dernière intervention 13 mai 2020
11 mai 2020 à 18:12
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
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
Modifié le 11 mai 2020 à 18:30
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
Antoine451833 Messages postés 47 Date d'inscription vendredi 1 mai 2020 Statut Membre Dernière intervention 13 mai 2020
Modifié le 11 mai 2020 à 19:25
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
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
12 mai 2020 à 10:40
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
Antoine451833 Messages postés 47 Date d'inscription vendredi 1 mai 2020 Statut Membre Dernière intervention 13 mai 2020
12 mai 2020 à 12:46
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
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
Modifié le 12 mai 2020 à 13:55
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
Antoine451833 Messages postés 47 Date d'inscription vendredi 1 mai 2020 Statut Membre Dernière intervention 13 mai 2020
12 mai 2020 à 16:38
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
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
Modifié le 12 mai 2020 à 17:14
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
Antoine451833 Messages postés 47 Date d'inscription vendredi 1 mai 2020 Statut Membre Dernière intervention 13 mai 2020
12 mai 2020 à 20:10
Oui j'ai essayé et ça fonctionne bien.

Je vais faire au mieux mdr
0
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
13 mai 2020 à 09:11
Bonjour Antoine,

Ok !

Tout as tous les éléments en main maintenant ...
0
Antoine451833 Messages postés 47 Date d'inscription vendredi 1 mai 2020 Statut Membre Dernière intervention 13 mai 2020
13 mai 2020 à 13:15
Yep !

Merci a toi et bonne journée.
0