Advertisement
Vladimir_Max

Lesson 1

Dec 14th, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.45 KB | None | 0 0
  1. import math
  2. import turtle
  3. import random
  4.  
  5. WINDOW_WIDTH, WINDOW_HEIGHT = 1200, 800
  6. BASE_X, BASE_Y = 0, -300
  7.  
  8. window = turtle.Screen()
  9. window.setup(WINDOW_WIDTH + 3, WINDOW_HEIGHT + 3)
  10. window.bgpic("images/background.png")
  11. window.screensize(WINDOW_WIDTH, WINDOW_HEIGHT)
  12. # window.tracer(n=2)
  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.  
  27. def fire_missile(x, y):
  28.     missile = turtle.Turtle(visible=False)
  29.     missile.speed(0)
  30.     missile.color('white')
  31.     missile.penup()
  32.     missile.setpos(x=BASE_X, y=BASE_Y)
  33.     missile.pendown()
  34.     heading = calc_heading(x1=BASE_X, y1=BASE_Y, x2=x, y2=y)
  35.     missile.setheading(heading)
  36.     missile.showturtle()
  37.     info = {'missile': missile, 'target': [x, y],
  38.             'state': 'launched', 'radius': 0}
  39.     our_missiles.append(info)
  40.  
  41.  
  42. def fire_enemy_missile(x, y):
  43.     missile = turtle.Turtle(visible=False)
  44.     missile.speed(0)
  45.     missile.color('red')
  46.     missile.penup()
  47.     missile.setpos(x=x, y=y)
  48.     missile.pendown()
  49.     heading = calc_heading(x1=x, y1=y, x2=BASE_X, y2=BASE_Y)
  50.     missile.setheading(heading)
  51.     missile.showturtle()
  52.     enemy_missile_info = {'missile': missile, 'target': [BASE_X, BASE_Y], 'state': 'launched', 'radius': 0}
  53.     enemy_missiles.append(enemy_missile_info)
  54.  
  55.  
  56. window.onclick(fire_missile)
  57.  
  58. our_missiles = []
  59. enemy_missiles = []
  60.  
  61. for num in range(5):
  62.     enemy_x = random.randint(0, WINDOW_WIDTH)
  63.     fire_enemy_missile(enemy_x - WINDOW_WIDTH/2, WINDOW_HEIGHT/2)
  64.  
  65. while True:
  66.     window.update()
  67.  
  68.     for info in our_missiles:
  69.         state = info['state']
  70.         missile = info['missile']
  71.         if state == 'launched':
  72.             missile.forward(4)
  73.             target = info['target']
  74.             if missile.distance(x=target[0], y=target[1]) < 20:
  75.                 info['state'] = 'explode'
  76.                 missile.shape('circle')
  77.         elif state == 'explode':
  78.             info['radius'] += 1
  79.             if info['radius'] > 5:
  80.                 missile.clear()
  81.                 missile.hideturtle()
  82.                 info['state'] = 'dead'
  83.             else:
  84.                 missile.shapesize(info['radius'])
  85.  
  86.     for enemy_missiles_info in enemy_missiles:
  87.         state = enemy_missiles_info['state']
  88.         missile = enemy_missiles_info['missile']
  89.         if state == 'launched':
  90.             missile.forward(4)
  91.             target = enemy_missiles_info['target']
  92.             if missile.distance(x=target[0], y=target[1]) < 20:
  93.                 enemy_missiles_info['state'] = 'explode'
  94.                 missile.shape('circle')
  95.         elif state == 'explode':
  96.             enemy_missiles_info['radius'] += 1
  97.             if enemy_missiles_info['radius'] > 5:
  98.                 missile.clear()
  99.                 missile.hideturtle()
  100.                 enemy_missiles_info['state'] = 'dead'
  101.             else:
  102.                 missile.shapesize(enemy_missiles_info['radius'])
  103.  
  104.     dead_missiles = [info for info in our_missiles if info['state'] == 'dead']
  105.     for dead in dead_missiles:
  106.         our_missiles.remove(dead)
  107.  
  108.     dead_enemy_missiles = [enemy_missiles_info for enemy_missiles_info in enemy_missiles if enemy_missiles_info['state'] == 'dead']
  109.     for dead_enemy in dead_enemy_missiles:
  110.         enemy_missiles.remove(dead_enemy)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement