Advertisement
Awijex

Untitled

Dec 15th, 2018
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.96 KB | None | 0 0
  1. import math
  2. import os
  3. import random
  4. import turtle
  5.  
  6. BASE_PATH = os.path.dirname(__file__)
  7.  
  8. window = turtle.Screen()
  9. window.setup(1200 + 3, 800 + 3)
  10. window.bgpic(os.path.join(BASE_PATH, "images", "background.png"))
  11. window.screensize(1200, 800)
  12. # window.tracer(n=2)
  13.  
  14. ENEMY_COUNT = 1
  15.  
  16. BASE_X, BASE_Y = 0, -300
  17.  
  18.  
  19. class Buildings:
  20.  
  21.     def __init__(self, x, y, image, health):
  22.         self.image = image
  23.         self.health = health
  24.         base = turtle.Turtle()
  25.         base.hideturtle()
  26.         base.speed(0)
  27.         base.penup()
  28.         base.setpos(x=x, y=y)
  29.         pic_path = os.path.join(BASE_PATH, "images", image)
  30.         window.register_shape(pic_path)
  31.         base.shape(pic_path)
  32.         base.showturtle()
  33.         base.health = health
  34.  
  35.  
  36. class Missile:
  37.  
  38.     def __init__(self, x, y, color, x2, y2):
  39.         self.color = color
  40.         pen = turtle.Turtle(visible=False)
  41.         pen.speed(0)
  42.         pen.color(color)
  43.         pen.penup()
  44.         pic_path = os.path.join(BASE_PATH, "images", "missile.gif")
  45.         print(pic_path)
  46.         window.register_shape(pic_path)
  47.         pen.shape(pic_path)
  48.         pen.setpos(x=x, y=y)
  49.         pen.pendown()
  50.         heading = pen.towards(x2, y2)
  51.         pen.setheading (heading)
  52.         pen.showturtle()
  53.         self.pen = pen
  54.  
  55.         self.state = 'launched'
  56.         self.target = x2, y2
  57.         self.radius = 0
  58.  
  59.     def step(self):
  60.         if self.state == 'launched':
  61.             self.pen.forward(4)
  62.             if self.pen.distance(x=self.target[0], y=self.target[1]) < 20:
  63.                 self.state = 'explode'
  64.                 self.pen.shape('circle')
  65.         elif self.state == 'explode':
  66.             self.radius += 1
  67.             if self.radius > 5:
  68.                 self.pen.clear()
  69.                 self.pen.hideturtle()
  70.                 self.state = 'dead'
  71.             else:
  72.                 self.pen.shapesize(self.radius)
  73.         elif self.state == 'dead':
  74.             self.pen.clear()
  75.             self.pen.hideturtle()
  76.  
  77.     def distance(self, x, y):
  78.         return self.pen.distance(x=x, y=y)
  79.  
  80.     @property
  81.     def x(self):
  82.         return self.pen.xcor()
  83.  
  84.     @property
  85.     def y(self):
  86.         return self.pen.ycor()
  87.  
  88.  
  89. def fire_missile(x, y):
  90.     info = Missile(color='white', x=BASE_X, y=BASE_Y, x2=x, y2=y)
  91.     our_missiles.append(info)
  92.  
  93.  
  94. def fire_enemy_missile():
  95.     x = random.randint(-600, 600)
  96.     y = 400
  97.     info = Missile(color='red', x=x, y=y, x2=BASE_X, y2=BASE_Y)
  98.     enemy_missiles.append(info)
  99.  
  100.  
  101. def move_missiles(missiles):
  102.     for missile in missiles:
  103.         missile.step()
  104.  
  105.     dead_missiles = [missile for missile in missiles if missile.state == 'dead']
  106.     for dead in dead_missiles:
  107.         missiles.remove(dead)
  108.  
  109.  
  110. def check_enemy_count():
  111.     if len(enemy_missiles) < ENEMY_COUNT:
  112.         fire_enemy_missile()
  113.  
  114.  
  115. def check_interceptions():
  116.     for our_missile in our_missiles:
  117.         if our_missile.state != 'explode':
  118.             continue
  119.         for enemy_missile in enemy_missiles:
  120.             if enemy_missile.distance(our_missile.x, our_missile.y) < our_missile.radius * 10:
  121.                 enemy_missile.state = 'dead'
  122.  
  123.  
  124. window.onclick(fire_missile)
  125.  
  126. our_missiles = []
  127. enemy_missiles = []
  128.  
  129.  
  130. def game_over():
  131.     return base.health < 0
  132.  
  133.  
  134. def check_impact():
  135.     for enemy_missile in enemy_missiles:
  136.         if enemy_missile.state != 'explode':
  137.             continue
  138.         if enemy_missile.distance(BASE_X, BASE_Y) < enemy_missile.radius * 10:
  139.             base.health -= 100
  140.             # print('base_health', base_health)
  141.  
  142.  
  143. base = Buildings(x=0, y=-300, image="base.gif", health=2000)
  144. for i in range(2):
  145.     x = i * 200 - 400
  146.     Buildings(x=x, y=-300, image="house_1.gif", health=1000)
  147.  
  148.  
  149. while True:
  150.     window.update()
  151.     if game_over():
  152.         continue
  153.     check_impact()
  154.     check_enemy_count()
  155.     check_interceptions()
  156.     move_missiles(missiles=our_missiles)
  157.     move_missiles(missiles=enemy_missiles)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement