Advertisement
Guest User

Untitled

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