Advertisement
Ura1skaya

Homework

Dec 14th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.85 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.  
  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. def against_missile():
  42.     c = random.randint(-1000, 1000)
  43.     m = turtle.Turtle(visible=False)
  44.     m.speed(0)
  45.     m.color("red")
  46.     m.penup()
  47.     m.setpos(x=c, y=800)
  48.     m.pendown()
  49.     m.showturtle()
  50.     heading1 = calc_heading(x1=c, y1=800, x2=BASE_X, y2=BASE_Y)
  51.     m.setheading(heading1)
  52.     #while m.distance(x=BASE_X, y=BASE_Y) > 10:
  53.     #    m.forward(4)
  54.     a_info = {"missile": m, "target": [BASE_X, BASE_Y],
  55.             "state": "launched", "radius": 0}
  56.     a_missiles.append(a_info)
  57.  
  58. window.onclick(fire_missile)
  59. our_missiles = []
  60. a_missiles = []
  61. for i in range(1,5,1):
  62.     against_missile()
  63. while True:
  64.     window.update()
  65.     for info in our_missiles:
  66.         state = info["state"]
  67.         missile = info["missile"]
  68.         if state == "launched":
  69.             missile.forward(4)
  70.             target = info["target"]
  71.             if missile.distance(x=target[0], y=target[1]) < 20:
  72.                 info["state"] = "explode"
  73.                 missile.shape("circle")
  74.         elif state == "explode":
  75.             info["radius"] += 1
  76.             if info["radius"] > 5:
  77.                 missile.clear()
  78.                 missile.hideturtle()
  79.                 info['state'] = 'dead'
  80.             else:
  81.                 missile.shapesize(info["radius"])
  82.  
  83.     for a_info in a_missiles:
  84.         state = a_info["state"]
  85.         m = a_info["missile"]
  86.         if state == "launched":
  87.             m.forward(4)
  88.             target = a_info["target"]
  89.             if m.distance(x=target[0], y=target[1]) < 20:
  90.                 info["state"] = "explode"
  91.                 m.shape("circle")
  92.                 a_missiles.remove(a_info)
  93.                 m.clear()
  94.                 m.hideturtle()
  95.         elif state == "explode":
  96.             a_info['state'] = 'dead'
  97.  
  98.     dead_missiles = [info for info in our_missiles if info['state'] == 'dead']
  99.     for dead in dead_missiles:
  100.         our_missiles.remove(dead)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement