Advertisement
Guest User

dav

a guest
Dec 14th, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.37 KB | None | 0 0
  1. import math
  2. import turtle
  3. import random
  4. import time
  5.  
  6. window = turtle.Screen()
  7. window.setup(1200 + 3, 800 + 3)
  8. window.bgpic("images/background.png")
  9. window.screensize(1200, 800)
  10. # window.tracer(n=2)
  11.  
  12. BASE_X, BASE_Y = 0, -300
  13.  
  14.  
  15. def calc_heading(x1, y1, x2, y2):
  16.     dx = x2 - x1
  17.     dy = y2 - y1
  18.     length = (dx ** 2 + dy ** 2) ** 0.5
  19.     cos_alpha = dx / length
  20.     alpha = math.acos(cos_alpha)
  21.     alpha = math.degrees(alpha)
  22.     if dy < 0:
  23.         alpha = -alpha
  24.     return alpha
  25.  
  26. def en_calc_heading(x1, y1, x2, y2):
  27.     dx = x2 - x1
  28.     dy = y2 - y1
  29.     length = (dx **2 + dy **2 ** 0.5)
  30.  
  31.  
  32. def fire_missile(x, y):
  33.     missile = turtle.Turtle(visible=False)
  34.     missile.speed(0)
  35.     missile.color('white')
  36.     missile.penup()
  37.     missile.setpos(x=BASE_X, y=BASE_Y)
  38.     missile.pendown()
  39.     heading = calc_heading(x1=BASE_X, y1=BASE_Y, x2=x, y2=y)
  40.     missile.setheading(heading)
  41.     missile.showturtle()
  42.     info = {'missile': missile, 'target': [x, y],
  43.             'state': 'launched', 'radius': 0}
  44.     our_missiles.append(info)
  45.  
  46. def enemy_missile(x, y):
  47.     en_missile = turtle.Turtle(visible=False)
  48.     en_missile.speed(0)
  49.     en_missile.color('red')
  50.     en_missile.penup()
  51.     en_missile.setpos(x=random.randint(-600, 600), y=random.randint(300, 400))
  52.     en_missile.pendown()
  53.     en_heading = calc_heading(x2=random.randint(-400, 400), y2=random.randint(400, 500), x1=x, y1=y)
  54.     en_missile.setheading(en_heading)
  55.     en_missile.showturtle()
  56.     en_info = {'en_missile': en_missile, 'en_target': [BASE_X, BASE_Y],
  57.             'en_state': 'launched', 'radius': 0}
  58.     enemy_missiles.append(en_info)
  59.  
  60.  
  61. window.onclick(enemy_missile)
  62.  
  63.  
  64.  
  65. our_missiles = []
  66. enemy_missiles = []
  67.  
  68.  
  69.  
  70. while True:
  71.     window.update()
  72.  
  73.     for info in enemy_missiles:
  74.         state = en_info['en_state']
  75.         missile = en_info['en_missile']
  76.         if state == 'launched':
  77.             missile.forward(4)
  78.             target = info['target']
  79.             if missile.distance(x=target[0], y=target[1]) < 20:
  80.                 info['state'] = 'explode'
  81.                 missile.shape('circle')
  82.         elif state == 'explode':
  83.             info['radius'] += 1
  84.             if info['radius'] > 5:
  85.                 missile.clear()
  86.                 missile.hideturtle()
  87.                 info['state'] = 'dead'
  88.             else:
  89.                 missile.shapesize(info['radius'])
  90.  
  91.     dead_missiles = [info for info in our_missiles if info['state'] == 'dead']
  92.     for dead in dead_missiles:
  93.         our_missiles.remove(dead)
  94.  
  95. # while True:
  96. #     window.update()
  97. #
  98. #     for info in our_missiles:
  99. #         state = info['state']
  100. #         missile = info['missile']
  101. #         if state == 'launched':
  102. #             missile.forward(4)
  103. #             target = info['target']
  104. #             if missile.distance(x=target[0], y=target[1]) < 20:
  105. #                 info['state'] = 'explode'
  106. #                 missile.shape('circle')
  107. #         elif state == 'explode':
  108. #             info['radius'] += 1
  109. #             if info['radius'] > 5:
  110. #                 missile.clear()
  111. #                 missile.hideturtle()
  112. #                 info['state'] = 'dead'
  113. #             else:
  114. #                 missile.shapesize(info['radius'])
  115. #
  116. #     dead_missiles = [info for info in our_missiles if info['state'] == 'dead']
  117. #     for dead in dead_missiles:
  118. #         our_missiles.remove(dead)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement