je suis actuellement en terminale S et j'ai créé un jeu pour mon projet de fin d'année. Alors que le programme est presque terminé, j'ai un petit problème de score : il est sensé augmenter ou pas uniquement quand la balle arrive au niveau du panier, seulement la variable qui fait changer la position de la balle semble avoir du mal à passer dans la fonction qui définis le score. Enfin il me semble que c'est le problème mais je n'arrive pas à la résoudre.
Cela se passe au niveau de la fonction scorer() et animation_balle1() , les variables étant toutes en global, elles sont définies dans le programme principal (tout en bas).
Voici le code :
from tkinter import*
from math import*
from threading import*
def niveau1():
global balle,jauge,score,rjauge,z,s,g,scoret,my_font,verificateur_niveau
#z= variable vérifiant si le niveau à été activée pour activer la jauge
z=1
s=0
g=0
verificateur_niveau=1
can.delete(ALL)
balle=can.create_oval(450,450,550,550,width=4,fill='orange')
jauge=can.create_rectangle(10,10,90,590,width=2,fill='lightgrey')
rjauge=can.create_rectangle(10,589,89,589,fill='red')
score=can.create_rectangle(900,10,990,60,width=5,fill='lightgrey')
cadre_panier=can.create_rectangle(370,20,630,170,width=5,fill='white')
carre_panier=can.create_rectangle(460,50,540,130,width=5)
panier=can.create_oval(400,130,600,160,width=5)
can.create_text(945,25,text="SCORE",font=my_font)
scoret=can.create_text(945,45,text=s,font=my_font)
can.create_text(900,570,text="Niveau 1",font=my_font3)
def niveau2():
global balle,jauge,score,rjauge,panier,cadre_panier,carre_panier,z,s,g,scoret,my_font,verificateur_niveau,image1,verificateur_animation_panier
z=1
s=0
g=0
verificateur_niveau=2
can.delete(ALL)
image1=PhotoImage(file='balle.png')
balle=can.create_image(500,500,image=image1)
jauge=can.create_rectangle(10,10,90,590,width=2,fill='lightgrey')
rjauge=can.create_rectangle(10,589,89,589,fill='red')
score=can.create_rectangle(900,10,990,60,width=5,fill='lightgrey')
cadre_panier=can.create_rectangle(370,20,630,170,width=5,fill='white')
carre_panier=can.create_rectangle(460,50,540,130,width=5)
panier=can.create_oval(400,130,600,160,width=5)
can.create_text(945,25,text="SCORE",font=my_font)
scoret=can.create_text(945,45,text=s,font=my_font)
can.create_text(900,570,text="Niveau 2",font=my_font3)
if verificateur_animation_panier==0:
animation_panier()
verificateur_animation_panier=1
def niveau3():
global balle,jauge,score,rjauge,panier,cadre_panier,carre_panier,z,s,g,scoret,my_font,verificateur_niveau,image1,verificateur_animation_panier,image2
z=1
s=0
#eh oui, "pi" existe dans python !
g=pi
verificateur_niveau=3
can.delete(ALL)
image1=PhotoImage(file='balle.png')
image2=PhotoImage(file='rainbow.png')
balle=can.create_image(500,500,image=image1)
rainbowjauge=can.create_image(49.5,300,image=image2)
jauge=can.create_rectangle(10,10,90,590,width=2)
rjauge=can.create_rectangle(10,10,89,589,fill='lightgrey')
score=can.create_rectangle(900,10,990,60,width=5,fill='lightgrey')
cadre_panier=can.create_rectangle(410,62,590,168,width=4,fill='white')
carre_panier=can.create_rectangle(475,90,525,140,width=4)
panier=can.create_oval(450,140,550,155,width=4)
can.create_text(945,25,text="SCORE",font=my_font)
scoret=can.create_text(945,45,text=s,font=my_font)
can.create_text(900,570,text="Niveau 3",font=my_font3)
if verificateur_animation_panier==0:
animation_panier()
verificateur_animation_panier=1
def interrupteur(event):
global i,z,frame_jauge,j,a,g,h,variable_coordonnee,frame_balle,k,balle,c,d
if verificateur_niveau==1:
if i==2 and z==1:
i,j,frame_jauge,g,a=1,1,0,0,589
can.coords(rjauge,10,a,89,589)
can.delete(balle)
balle=can.create_oval(450,450,550,550,width=4,fill='orange')
animation_jauge()
elif i==1:
i,j,h,variable_coordonnee,frame_balle,k,c,d=2,0,1,0,0,2,450,550
score_jauge()
elif verificateur_niveau==2:
if i==2 and z==1:
i,j,frame_jauge,g,a=1,1,0,0,589
can.coords(rjauge,10,a,89,589)
can.delete(balle)
balle=can.create_image(500,500,image=image1)
animation_jauge()
elif i==1:
i,j,h,variable_coordonnee,frame_balle,k,c,d=2,0,1,0,0,2,450,550
score_jauge()
else:
if i==2 and z==1:
i,j,frame_jauge,g,a=1,1,0,pi,589
can.coords(rjauge,10,a,89,589)
can.delete(balle)
balle=can.create_image(500,500,image=image1)
animation_jauge()
elif i==1:
i,j,h,variable_coordonnee,frame_balle,k,c,d=2,0,1,0,0,2,450,550
score_jauge()
def score_jauge():
if 200<a<400:
animation_balle1()
scorer()
elif a<=200:
animation_balle2()
elif a>=300:
animation_balle3()
def scorer():
global s,h
if verificateur_niveau==1:
s=s+1
can.itemconfigure(scoret,text=s)
elif verificateur_niveau==2:
while h!=3.5:
pass
else:
if 300<e<500:
s=s+1
can.itemconfigure(scoret,text=s)
else:
while h!=3.5:
pass
else:
if 350<e<450:
s=s+1
can.itemconfigure(scoret,text=s)
# s = score qui s'affiche
def animation_jauge():
global a,g,frame_jauge,j
#fonction abs => valeur absolue
a=(abs(cos(g)*579))+10
g=g+(1/25)
if verificateur_niveau<3:
can.coords(rjauge,10,a,89,589)
else :
can.coords(rjauge,10,10,89,a)
if j==0:
frame_jauge=1
j=2
elif frame_jauge<1:
fen.after(12,animation_jauge)
def animation_balle1():
global balle,h,variable_coordonnee,frame_balle,c,d,balle
frame_balle=frame_balle+1
h=h+(1/15)
variable_coordonnee=(cos(h)*350)+305
if verificateur_niveau==1:
can.coords(balle,450,variable_coordonnee,550,variable_coordonnee+100)
elif verificateur_niveau>1:
can.coords(balle,500,variable_coordonnee)
if frame_balle<80:
fen.after(12,animation_balle1)
def animation_balle2():
global balle,h,variable_coordonnee,frame_balle,c,d,balle
frame_balle=frame_balle+1
h=h+(1/15)
variable_coordonnee=(cos(h)*500)+200
if verificateur_niveau==1:
can.coords(balle,450,variable_coordonnee,550,variable_coordonnee+100)
elif verificateur_niveau>1:
can.coords(balle,500,variable_coordonnee)
if frame_balle<20:
fen.after(12,animation_balle2)
def animation_balle3():
global balle,variable_coordonnee,frame_balle,k,c,d,balle
frame_balle=frame_balle+1
k=k+(1/20)
variable_coordonnee=(cos(k)*400)+600
if verificateur_niveau==1:
can.coords(balle,450,variable_coordonnee,550,variable_coordonnee+100)
elif verificateur_niveau>1:
can.coords(balle,500,variable_coordonnee)
if frame_balle<100:
fen.after(12,animation_balle3)
def animation_panier():
global o,e
o=o+(1/40)
e=(cos(o)*250)+400
if verificateur_niveau==2:
can.coords(panier,e,130,e+200,160)
can.coords(carre_panier,e+60,50,e+140,130)
can.coords(cadre_panier,e-30,20,e+230,170)
fen.after(10,animation_panier)
else:
can.coords(panier,e+30,140,e+170,160)
can.coords(carre_panier,e+70,80,e+130,140)
can.coords(cadre_panier,e,50,e+200,170)
fen.after(10,animation_panier)
#------ Programme principal ------
fen = Tk()
can = Canvas(fen,bg='grey',width=1000,height=600)
can.pack(side=LEFT, padx=5, pady=5)
g,z,i,j,s,h,b=0,0,2,2,0,1,0
frame_jauge=0
frame_balle=0
k,o,e=2,0,0
verificateur_animation_panier=0
my_font="{Courier new} 16 bold"
my_font2="{Ravie} 40 bold"
my_font3="{Maiandra GD} 20 bold"
#Niveau 1 :
bou1 = Button(fen, width=15, height=3, borderwidth=3, bg='lightblue',text='Niveau 1', font=my_font, command=niveau1)
bou1.pack()
fen.bind("<space>", interrupteur)
#Niveau 2 :
bou2 = Button(fen, width=15, height=3, borderwidth=3, bg='orange', text='Niveau 2', font=my_font, command=niveau2)
bou2.pack(pady=10)
#Niveau 3 :
bou3 = Button(fen, width=15, height=3, borderwidth=3, bg='red', text='Niveau 3', font=my_font, command=niveau3)
bou3.pack()
#Page d'accueil
can.create_text(500,275,text='Jeu de Basket', font=my_font2)
bou4 = Button(fen,text='Quitter', width=8, command=fen.destroy)
bou4.pack(side=BOTTOM,pady=10)
fen.mainloop()
Voilà, à tous les courageux qui oseront s'y aventurer : merci
- Edité par thibaultbeteille 22 mars 2015 à 12:03:14
22 mars 2015 à 21:19:54
- Message modéré pour le motif suivant : Il y a plusieurs façon de dire les choses, tu n'as pas choisi la meilleure
Jeu de Basket problème de score
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Objectif Zéro Bug - le test logiciel professionnel | L'électronique de zéro | Tableaux & pointeurs | Pointeurs sur fonctions | Lecture/écriture binaire