Advertisement
AndreyColt

Untitled

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