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]
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"]
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 # какая-то хрень
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
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
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)
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
def collision(self, actor=None): if isinstance(actor, Player) and not isinstance(actor, Bullet): actor.gun = DefaultGun() GameManager.instance().remove_actor(self)