from random import randrange as rnd, choice from tkinter import * import time root = Tk() fr = Frame(root) root.geometry('800x600') canv = Canvas(root, bg = 'white') canv.pack(fill=BOTH,expand=1) def bum(ball): if flag_coords[0] <= (ball.x + ball.r) and (ball.x - ball.r) <= flag_coords[2] and flag_coords[1] <= (ball.y + ball.r) and (ball.y - ball.r) <= flag_coords[3]: return True else: return False class ball(): def __init__(self,x=40,y=450): self.x = x self.y = y self.r = 10 self.color = choice(['blue','green','red','brown']) self.id = canv.create_oval(self.x-self.r,self.y-self.r,self.x+self.r,self.y+self.r,fill=self.color) self.live = 30 def set_coords(self): canv.coords(self.id,self.x-self.r,self.y-self.r,self.x+self.r,self.y+self.r) def move(self): if self.y <= 500: self.vy -= 1.2 self.y -= self.vy self.x += self.vx self.vx *= 0.99 self.set_coords() else: if self.vx**2+self.vy**2 > 10: self.vy = -self.vy/2 self.vx = self.vx/2 self.y = 499 if self.live < 0: balls.pop(balls.index(self)) canv.delete(self.id) else: self.live -= 1 if self.x > 780: self.vx = - self.vx/2 self.x = 779 def fire(event): global balls global bullet bullet += 1 balls += [ball(canv.coords(gun)[2],canv.coords(gun)[3])] balls[-1].vx = (event.x-balls[-1].x)/10 balls[-1].vy = -(event.y-balls[-1].y)/10 def fire2(event): global balls global bullet bullet += 1 balls += [ball()] balls[-1].r += 20 balls[-1].vx = (event.x-balls[-1].x)/20 balls[-1].vy = -(event.y-balls[-1].y)/20 def fire3(event): global balls global bullet for x in range(10): bullet += 1 balls += [ball()] balls[-1].r = 5 balls[-1].vx = (event.x-balls[-1].x)/15 + rnd(5) balls[-1].vy = -(event.y-balls[-1].y)/15+(x-10) + rnd(5) def pointing (event): canv.coords(gun,20,450,20+(event.x-20)/10,450-(450-event.y)/10) def new_game(event=''): canv.delete(ALL) global gun, flag_coords, bullet, balls canv.create_oval(750,450,766,466,fill='orange') canv.create_line(758,466,758,480,width=3) flag_coords = (745,445,770,485) gun = canv.create_line(20,450,50,420,width=7) bullet = 0 balls = [] canv.bind('<Button-1>',fire) canv.bind('<Button-3>',fire2) canv.bind('<Button-2>',fire3) canv.bind('<Motion>',pointing) z = 0.03 work = 1 while work or balls: for b in balls: b.move() if bum(b) and work: work = 0 canv.bind('<Button-1>','') canv.bind('<Button-3>','') canv.bind('<Button-2>','') canv.create_text(400,300, text = 'Вы уничтожили цель за ' + str(bullet) + 'выстрелов',font = '28') canv.update() time.sleep(0.03) canv.delete(ALL) canv.create_text(400,300, text = 'Вы уничтожили цель за ' + str(bullet) + 'выстрелов',font = '28') canv.bind('<Button-1>',new_game) new_game() mainloop() </pre> <pre>