Advertisement
Guest User

Game

a guest
Dec 14th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.35 KB | None | 0 0
  1. import math
  2. import turtle
  3. import random
  4.  
  5.  
  6. window = turtle.Screen()
  7. window.setup(1200, 800)
  8. window.bgpic("images/background.png")
  9. window.screensize(1200 - 45, 800 - 70)
  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.  
  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 enemy_missile():
  43.     turtle_turtle = turtle.Turtle(visible=False)
  44.     en_missile = turtle_turtle
  45.     en_missile.speed(0)
  46.     en_missile.color('red')
  47.     en_missile.penup()
  48.     x, y = random.randint(-750, 750), 400
  49.     en_missile.setpos(x, y)
  50.     en_missile.pendown()
  51.     en_heading = calc_heading(x1=x, y1=y, x2=BASE_X, y2=BASE_Y)
  52.     en_missile.setheading(en_heading)
  53.     en_missile.showturtle()
  54.     en_info = {'missile': en_missile, 'target': [BASE_X, BASE_Y],
  55.                'state': 'launched', 'radius': 0}
  56.     enemy_missiles.append(en_info)
  57.  
  58.  
  59. window.onclick(fire_missile)
  60.  
  61. our_missiles = []
  62. enemy_missiles = []
  63.  
  64. while True:
  65.     window.update()
  66.  
  67.     for info in our_missiles:
  68.         state = info['state']
  69.         missile = info['missile']
  70.         if state == 'launched':
  71.             missile.forward(4)
  72.             target = info['target']
  73.             if missile.distance(x=target[0], y=target[1]) < 20:
  74.                 info['state'] = 'explode'
  75.                 missile.shape('circle')
  76.         elif state == 'explode':
  77.             info['radius'] += 1
  78.             if info['radius'] > 5:
  79.                 missile.clear()
  80.                 missile.hideturtle()
  81.                 info['state'] = 'dead'
  82.             else:
  83.                 missile.shapesize(info['radius'])
  84.  
  85.     dead_missiles = [info for info in our_missiles if info['state'] == 'dead']
  86.     for dead in dead_missiles:
  87.         our_missiles.remove(dead)
  88.  
  89.     enemy_missiles_count = random.randint(1, 4)
  90.     while len(enemy_missiles) < enemy_missiles_count:
  91.         enemy_missile()
  92.  
  93.     for en_info in enemy_missiles:
  94.         en_state = en_info['state']
  95.         en_missile = en_info['missile']
  96.         if en_state == 'launched':
  97.             en_missile.forward(4)
  98.             en_target = en_info['target']
  99.             if en_missile.distance(x=en_target[0], y=en_target[1]) < 20:
  100.                 en_info['state'] = 'explode'
  101.                 en_missile.shape('circle')
  102.         elif en_state == 'explode':
  103.             en_info['radius'] += 1
  104.             if en_info['radius'] > 5:
  105.                 en_missile.clear()
  106.                 en_missile.hideturtle()
  107.                 en_info['state'] = 'dead'
  108.             else:
  109.                 en_missile.shapesize(en_info['radius'])
  110.  
  111.     dead_en_missiles = [en_info for en_info in enemy_missiles if en_info['state'] == 'dead']
  112.     for en_dead in dead_en_missiles:
  113.         enemy_missiles.remove(en_dead)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement