예제 #1
0
    def __init__(self, x=0, y=0):
        super().__init__(x=x,
                         y=y,
                         t=Structure.Circle,
                         vertices=50,
                         color='grey')

        self._time = 0

        self.shape.elasticity = 1
        self.shape.friction = 5
        self.shape.collision_type = collision_type[CollisionType.Enemy]

        self.body.velocity_func = Dynamic.speed_update_body
        self.body.velocity = (0, 0)
        self.body.angular_velocity = 0

        self._gun = None
        self._set_gun(DefaultGun(1))
        self._visible_player = False
        self._num_shot = 0
        self._reload_time = 0
        self._num_task = 0
        self.life = 1000

        self._logic = [self._logic1, self._logic2, self._logic3]
예제 #2
0
    def __init__(self, x=0, y=0, stats=None):
        super().__init__(x=x,
                         y=y,
                         t=Structure.Polygon,
                         vertices=Actor.center([[-10, 10], [30, 0], [-10, -10],
                                                [-20, 0]]),
                         color='blue')
        # информация об игроке
        self._stat = stats
        if stats is None:
            self._stat = Player.get_default_stats()

        self.shape.elasticity = 0  # упругость
        self.shape.friction = 1  # трение
        self.shape.collision_type = collision_type[
            CollisionType.Player]  # тип коллизии

        self.body.velocity = (0, 0)  # начальная скорость
        self.body.angular_velocity = 0  # угловая скорость
        self._direction_move = 0  # направление движения (для управления игроком)

        self._shot = False  # флаг для управления выстрелами
        if self._stat["Gun"] == 0:
            self._gun = DefaultGun(self._stat["Bullet"])  # тип оружия
        else:
            self._gun = TripleGun(self._stat["Bullet"])
        self._gun.set_collision_type(
            collision_type[CollisionType.PlayerBullet]
        )  # тип коллизий пуль (не сталуиваются с игроком)
        self._gun.set_color('aquamarine2')  # цвет пуль
        self.type_gun = self._stat["Gun"]
        self.type_bul = self._stat["Bullet"]
        self.life = self._stat["Heal"]  # количество жизней
        self.maxLife = self._stat["MaxHeal"]
예제 #3
0
    def __init__(self, x=0, y=0):
        super().__init__(x=x,
                         y=y,
                         t=Structure.Polygon,
                         vertices=Actor.center([[-10, 10], [30, 0], [-10, -10],
                                                [-20, 0]]),
                         color='blue')

        self.shape.elasticity = 0  # упругость
        self.shape.friction = 1  # трение
        self.shape.collision_type = collision_type[
            CollisionType.Player]  # тип коллизии

        self.body.velocity = (0, 0)  # начальная скорость
        self.body.angular_velocity = 0  # угловая скорость
        self._direction_move = 0  # направление движения (для управления игроком)
        self._old_velocity = (
            0, 0
        )  # запись предыдущей добавки к скорости для адекватного перерасчета
        self.no_collision = False
        self._shot = False  # флаг для управления выстрелами
        self._gun = DefaultGun(0)  # тип оружия
        self._gun.set_collision_type(
            collision_type[CollisionType.PlayerBullet]
        )  # тип коллизий пуль (не сталуиваются с игроком)
        self._gun.set_color('aquamarine2')  # цвет пуль
        self.tgun = 0
        self.tbul = 0
        self.life = 5  # количество жизней
        self.maxLife = 5
        self.shield = 100  # какая-то хрень
예제 #4
0
class StupidEnemy(Dynamic):
    def __init__(self, x=0, y=0):
        super().__init__(x=x,
                         y=y,
                         t=Structure.Circle,
                         vertices=10,
                         color='grey')

        self.shape.elasticity = 1
        self.shape.friction = 5
        self.shape.collision_type = collision_type[CollisionType.Enemy]

        self.body.velocity_func = Dynamic.speed_update_body
        self.body.velocity = (0, 0)
        self.body.angular_velocity = 0
        self._direction_move = 0
        self._shot = False
        self._gun = DefaultGun(0)
        self._gun.set_collision_type(collision_type[CollisionType.EnemyBullet])
        self._gun.set_color('red')
        self._visible_player = False

        self._gun.reload_time = 0.3

    def update(self, delta: float):
        self._gun.update(delta)
        # пускает луч от себя к игроку, чтобы проверить виден ли игрок
        RayManager.ray_cast(self.pos,
                            GameManager.instance().get_player_pos(),
                            self.call_back)
        if self._visible_player:
            v = GameManager.instance().get_player_pos()
            v = [v[0] - self.pos[0], v[1] - self.pos[1]]
            self.body.angle = math.atan2(v[1], v[0])
            dx = math.cos(self.body.angle)
            dy = math.sin(self.body.angle)
            self._gun.shot([self.pos[0] + 30 * dx, self.pos[1] + 30 * dy],
                           [dx * 500, dy * 500])
            self._visible_player = False
        if self.life <= 0:
            GameManager.instance().remove_actor(self)

    def call_back(self, actor):
        # проверят если луч столкнулся с игроком, то игрок виден
        if isinstance(actor, Player):
            self._visible_player = True
        if actor == self or isinstance(actor, Bullet):
            return True
        return False

    def collision(self, actor=None):
        if isinstance(actor, Bullet):
            self.life -= 1
        return True
예제 #5
0
    def __init__(self, x=0, y=0):
        super().__init__(x=x,
                         y=y,
                         t=Structure.Circle,
                         vertices=10,
                         color='grey')

        self.shape.elasticity = 1
        self.shape.friction = 5
        self.shape.collision_type = collision_type[CollisionType.Enemy]

        self.body.velocity_func = Dynamic.speed_update_body
        self.body.velocity = (0, 0)
        self.body.angular_velocity = 0
        self._gun = DefaultGun(0)
        self._gun.set_collision_type(collision_type[CollisionType.EnemyBullet])
        self._gun.set_color('red')
        self._visible_player = False

        self._gun.reload_time = 0.3
예제 #6
0
 def update(self, delta: float):
     self._time += delta
     if self._time >= 5:
         self._time = 0
         self._num_task = random.randint(0, 2)
         if self._num_task == 0:
             self._set_gun(DefaultGun(random.randint(0, 1)))
         if self._num_task == 1:
             self._set_gun(TripleGun(random.randint(0, 1)))
             self._gun.reload_time = 0.5
         if self._num_task == 2:
             self._set_gun(
                 Explosion(ct=collision_type[CollisionType.EnemyBullet]))
             self._gun.reload_time = 0.1
     self._logic[self._num_task](delta)
     if self.life <= 0:
         GameManager.instance().remove_boss(self)
예제 #7
0
 def changeGun(self, gun=-1, bullet=-1):
     if gun == -1:
         gun = self.type_gun
     if bullet == -1:
         bullet = self.type_bul
     if gun == 0:
         self._gun = DefaultGun(bullet)
         self._gun.set_collision_type(
             collision_type[CollisionType.PlayerBullet])
         self._gun.set_color('aquamarine2')
     elif gun == 1:
         self._gun = TripleGun(bullet)
         self._gun.set_collision_type(
             collision_type[CollisionType.PlayerBullet])
         self._gun.set_color('aquamarine2')
     self.type_gun = gun
     self.type_bul = bullet
예제 #8
0
 def collision(self, actor=None):
     if isinstance(actor, Player) and not isinstance(actor, Bullet):
         actor.gun = DefaultGun()
         GameManager.instance().remove_actor(self)