Advertisement
keygendnl

home_work

Dec 14th, 2018
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.45 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.gif")
  7. window.screensize(1200, 800)
  8.  
  9. BASE_X, BASE_Y = 0, -400
  10. ROCKET_BASE_X, ROCKET_BASE_Y = 0, 400         # база положение противника
  11.  
  12.  
  13. # функция для правой кнопки мыши (противник)
  14. def fire_rocket(x, y):
  15.     rocket = turtle.Turtle(visible=False)
  16.     rocket.speed(0)
  17.     rocket.color('red')
  18.     rocket.penup()
  19.     rocket.setpos(x=ROCKET_BASE_X, y=ROCKET_BASE_Y)
  20.     rocket.pendown()
  21.     heading = calc_heading(x1=ROCKET_BASE_X, y1=ROCKET_BASE_Y, x2=x, y2=y)
  22.     rocket.setheading(heading)
  23.     rocket.showturtle()
  24.     info_rocket = {'missile': rocket, 'target': [x, y], 'state': 'launched', 'radius': 0}
  25.     our_missiles.append(info_rocket)
  26.     return
  27.  
  28.  
  29. def calc_heading(x1, y1, x2, y2):
  30.     dx = x2 - x1
  31.     dy = y2 - y1
  32.     length = (dx ** 2 + dy ** 2) ** 0.5
  33.     cos_alpha = dx / length
  34.     alpha = math.acos(cos_alpha)
  35.     alpha = math.degrees(alpha)
  36.     if dy < 0:
  37.         alpha = -alpha
  38.     return alpha
  39.  
  40. # функция для левой кнопки мыши
  41. def fire_missile(x, y):
  42.     missile = turtle.Turtle(visible=False)
  43.     missile.speed(0)
  44.     missile.penup()
  45.     missile.setpos(x=BASE_X, y=BASE_Y)
  46.     missile.color('white')
  47.     heading = calc_heading(x1=BASE_X, y1=BASE_Y, x2=x, y2=y)
  48.     missile.pendown()
  49.     missile.setheading(heading)
  50.     missile.showturtle()
  51.     info_missile = {'missile': missile, 'target': [x, y], 'state': 'launched', 'radius': 0}
  52.     our_missiles.append(info_missile)
  53.  
  54.  
  55. window.onclick(fire_missile, 1)  # левый клик
  56. window.onclick(fire_rocket, 2)  # правый клик
  57.  
  58. our_missiles = []
  59.  
  60. while True:
  61.     window.update()
  62.  
  63.     for info in our_missiles:
  64.         state = info['state']
  65.         missile = info['missile']
  66.         if state == 'launched':
  67.             missile.forward(4)
  68.             target = info['target']
  69.             if missile.distance(x=target[0], y=target[1]) < 20:
  70.                 info['state'] = 'explode'
  71.                 missile.shape('circle')
  72.         elif state == 'explode':
  73.             info['radius'] += 1
  74.             if info['radius'] > 5:
  75.                 missile.clear()
  76.                 missile.hideturtle()
  77.                 info['state'] = 'dead'
  78.             else:
  79.                 missile.shapesize(info['radius'])
  80.  
  81.     dead_missiles = [info for info in our_missiles if info['state'] == 'dead']
  82.     for dead in dead_missiles:
  83.         our_missiles.remove(dead)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement