Advertisement
Guest User

leonidzheldak

a guest
Dec 14th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.75 KB | None | 0 0
  1. import math
  2. import turtle
  3. window = turtle.Screen()
  4. window.setup(900 + 3, 600 + 3)
  5. window.bgpic("image/background1.png")
  6. window.screensize(900, 600)
  7. #window.tracer(n=0)
  8. BASE_X, BASE_Y = 0, -300
  9. def calc_heading(x1, y1, x2, y2):
  10.     dx = x2 - x1
  11.     dy = y2 - y1
  12.     length = (dx ** 2 + (dy) ** 2) ** 0.5
  13.     cos_alpha = dx / length
  14.     alpha = math.acos(cos_alpha)
  15.     alpha = math.degrees(alpha)
  16.     if dy <0:
  17.         alpha=-alpha
  18.     return alpha
  19. def fire_missile(x, y):
  20.     missile = turtle.Turtle()
  21.     missile.hideturtle()
  22.     missile.speed(0)
  23.     missile.color('white')
  24.     missile.penup()
  25.     missile.setpos(x=BASE_X, y=BASE_Y)
  26.     missile.pendown()
  27.     heading = calc_heading(x1=BASE_X, y1=BASE_Y, x2=x, y2=y)
  28.     missile.setheading(heading)
  29.     missile.showturtle()
  30.     info={'missile':missile,'target':[x,y],'state':'launched','radius':0}
  31.     our_missiles.append(info)
  32. window.onclick(fire_missile)
  33. our_missiles = []
  34. while True:
  35.     window.update()
  36.     for info in our_missiles:
  37.         state=info['state']
  38.         missile = info['missile']
  39.         if state == 'launched':
  40.             missile.forward(4)
  41.             target = info['target']
  42.             if missile.distance(x=target[0], y=target[1]) < 20:
  43.                 info['state'] = 'explode'
  44.                 missile.shape('circle')
  45.         elif state == 'explode':
  46.                 info['radius']+=1
  47.                 if info['radius']>5:
  48.                     missile.clear()
  49.                     missile.hideturtle()
  50.                     info['state'] = 'dead'
  51.                 else:
  52.                     missile.shapesize(info['radius'])
  53.     dead_missiles = [info for info in our_missiles if info['state'] == 'dead']
  54.     for dead in dead_missiles:
  55.         our_missiles.remove(dead)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement