Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from tkinter import *
- from tkinter.font import Font
- import random
- def move():
- #"deplacement de la balle"
- global x1, y1, dx, dy
- global xraq, yraq, temps,score, score_hold,t
- x1, y1 = x1 +dx, y1 + dy
- if x1 >460:
- x1, dx, dy = 460, -dx, dy
- if y1 >460:
- y1, dx, dy = 460, dx, -dy
- score-=1
- if x1 <10:
- x1, dx, dy = 10, -dx, dy
- if y1 <10:
- y1, dx, dy = 10, dx, -dy
- if (y1+30>=yraq):
- if x1>=xraq and x1<xraq+100:
- y1, dx, dy = yraq-30, dx, -dy
- score+=1
- can1.coords(oval1,x1,y1,x1+30,y1+30)
- global x2, y2, dx2, dy2
- x2, y2 = x2 +dx2, y2 + dy2
- if x2 >460:
- x2, dx2, dy2 = 460, -dx2, dy2
- if y2 >460:
- y2, dx2, dy2 = 460, dx2, -dy2
- score-=1
- if x2 <10:
- x2, dx2, dy2 = 10, -dx2, dy2
- if y2 <10:
- y2, dx2, dy2 = 10, dx2, -dy2
- if (y2+30>=yraq):
- if x2>=xraq and x2<xraq+100:
- y2, dx2, dy2 = yraq-30, dx2, -dy2
- score+=1
- can1.coords(oval2,x2,y2,x2+30,y2+30)
- global x3, y3, dx3, dy3
- x3, y3 = x3 +dx3, y3 + dy3
- if x3 >460:
- x3, dx3, dy3 = 460, -dx3, dy3
- if y3 >460:
- y3, dx3, dy3 = 460, dx3, -dy3
- score-=1
- if x3 <10:
- x3, dx3, dy3 = 10, -dx3, dy3
- if y3 <10:
- y3, dx3, dy3 = 10, dx3, -dy3
- if (y3+30>=yraq):
- if x3>=xraq and x3<xraq+100:
- y3, dx3, dy3 = yraq-30, dx3, -dy3
- score+=1
- can1.coords(oval3,x3,y3,x3+30,y3+30)
- global x4, y4, dx4, dy4
- x4, y4 = x4 +dx4, y4 + dy4
- if x4 >460:
- x4, dx4, dy4 = 460, -dx4, dy4
- if y4 >460:
- y4, dx4, dy4 = 460, dx4, -dy4
- score-=1
- if x4 <10:
- x4, dx4, dy4 = 10, -dx4, dy4
- if y4 <10:
- y4, dx4, dy4 = 10, dx4, -dy4
- if (y4+30>=yraq):
- if x4>=xraq and x4<xraq+100:
- y4, dx4, dy4 = yraq-30, dx4, -dy4
- score+=1
- can1.coords(oval4,x4,y4,x4+30,y4+30)
- # deplacement raquette
- global draq,raquette
- yraq+=draq
- if yraq<5:
- yraq=5
- draq=0
- if yraq>395:
- yraq=395
- draq=0
- can1.move(raquette, draq,-0)
- # collision
- # balle 1 avec balle2
- if(abs(x1-x2)<30 and abs(y1-y2)<30):
- dx, dy = random.randint(-15,15),random.randint(-15,15)
- dx2, dy2 = random.randint(-15,15),random.randint(-15,15)
- # balle 1 avec balle 3
- if(abs(x1-x3)<30 and abs(y1-y3)<30):
- dx, dy = random.randint(-15,15),random.randint(-15,15)
- dx3, dy3 = random.randint(-15,15),random.randint(-15,15)
- # balle 1 avec balle 4
- if(abs(x1-x4)<30 and abs(y1-y4)<30):
- dx, dy = random.randint(-15,15),random.randint(-15,15)
- dx4, dy4 = random.randint(-15,15),random.randint(-15,15)
- # balle 2 avec balle 3
- if(abs(x2-x3)<30 and abs(y2-y3)<30):
- dx2, dy2 = random.randint(-15,15),random.randint(-15,15)
- dx3, dy3 = random.randint(-15,15),random.randint(-15,15)
- # balle 2 avec balle 4
- if(abs(x2-x4)<30 and abs(y2-y4)<30):
- dx2, dy2 = random.randint(-15,15),random.randint(-15,15)
- dx4, dy4 = random.randint(-15,15),random.randint(-15,15)
- # balle 3 avec balle 4
- if(abs(x4-x3)<30 and abs(y4-y3)<30):
- dx4, dy4 = random.randint(-15,15),random.randint(-15,15)
- dx3, dy3 = random.randint(-15,15),random.randint(-15,15)
- if flag >0:
- fen1.after(20,move) # => boucler, apres 20 millisecondes
- # gestion temps, on passe ici toutes les 20ms...
- t+=1
- if t>=50: # soit 50x20ms=1s
- t=0
- temps-=1
- can1.create_text(80,50, text=str(temps+1), font=font, fill= 'grey')
- can1.create_text(80,50, text=str(temps), font=font, fill= 'red')
- if temps==0: # game over
- stop_it()
- if score_hold != score:
- can1.create_text(250,50, text=str(score_hold), font=font, fill= 'grey')
- can1.create_text(250,50, text=str(score), font=font, fill= 'cyan')
- score_hold=score
- def stop_it():
- # arret de l'animation"
- global flag
- flag =0
- def start_it():
- # demarrage de l'animation"
- global flag,temps,score
- if flag ==0: # pour ne lancer qu une seule boucle
- flag =1
- temps=60
- score=0
- can1.create_text(80,50, text=str(0), font=font, fill= 'grey')
- can1.create_text(80,50, text=str(60), font=font, fill= 'red')
- move()
- def change():
- global dx,dy,dx2,dy2
- dx, dy = random.randint(-15,15),random.randint(-15,15)
- dx2, dy2 = random.randint(-15,15),random.randint(-15,15)
- dx3, dy3 = random.randint(-15,15),random.randint(-15,15)
- dx4, dy4 = random.randint(-15,15),random.randint(-15,15)
- def key(event):
- global xraq
- xraq=0
- if event.keysym == 'Up':
- xraq=15
- if event.keysym == "Down":
- xraq=-15
- #========== Programme principal =============
- # les variables suivantes seront utilisables de maniere globale :
- x1, y1 = random.randint(50,450),random.randint(50,450)
- dx, dy = random.randint(-15,15),random.randint(-15,15) # 'pas' du deplacement
- x2, y2 = random.randint(50,450),random.randint(50,450)
- dx2, dy2 = random.randint(-15,15),random.randint(-15,15) # 'pas' du deplacement
- x3, y3 = random.randint(50,450),random.randint(50,450)
- dx3, dy3 = random.randint(-15,15),random.randint(-15,15)
- x4, y4 = random.randint(50,450),random.randint(50,450)
- dx4, dy4 = random.randint(-15,15),random.randint(-15,15)
- xraq,yraq=460,220
- draq=0
- score=0
- score_hold=1
- temps=60
- t=0
- flag =0 # commutateur
- # Creation du widget principal ("parent") :
- fen1 = Tk()
- fen1.title("Animations avec tkinter")
- # creation des widgets "enfants" :
- can1 = Canvas(fen1,bg='grey',height=500, width=500)
- can1.pack(side=LEFT, padx =5, pady =5)
- oval1 = can1.create_oval(x1, y1, x1+30, y1+30, width=2, fill="blue")
- oval2 = can1.create_oval(x2, y2, x2+30, y2+30, width=2, fill="red")
- oval3 = can1.create_oval(x3, y3, x3+30, y3+30, width=2, fill="yellow")
- oval4 = can1.create_oval(x4, y4, x4+30, y4+30, width=2, fill="black")
- raquette = can1.create_rectangle(xraq,yraq, xraq+20,yraq+100, fill='green')
- bou1 = Button(fen1,text='Quitter', width =8, command=fen1.destroy)
- bou1.pack(side=BOTTOM)
- bou2 = Button(fen1, text='Demarrer', width =8, command=start_it)
- bou2.pack()
- bou3 = Button(fen1, text='Arreter', width =8, command=stop_it)
- bou3.pack()
- bou4 = Button(fen1, text='Change', width =8, command=change)
- bou4.pack()
- text1 = Label(fen1, text="fleches gauche/droite , space=stop")
- text1.pack()
- font=Font(family='Liberation Serif', size=50, weight='bold' )
- can1.create_text(250,50, text=str(score), font=font, fill= 'cyan')
- can1.create_text(80,50, text=str(temps), font=font, fill= 'red')
- fen1.bind("<Key>", key)
- fen1.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement