Ejemplo n.º 1
0
class Ship:
    def __init__(self,
                 pars,
                 is_kinetic=False,
                 acc=0,
                 ang_acc=0,
                 fr=0,
                 lives=0,
                 life=0):
        self.image = pars["image"]
        self.image_center = pars["info"].get_center()
        self.image_size = pars["info"].get_size()
        radius = pars["info"].get_radius()
        self.up_key_down = False
        self.left_key_down = False
        self.right_key_down = False
        self.missile_image = pars["missile_image"]
        self.missile_info = pars["missile_info"]
        self.missile_sound = pars["missile_sound"]
        self.ship_thrust_sound = pars["ship_thrust_sound"]
        self.missile_group = set([])
        self.lives = lives
        self.life = life
        self.score = 0
        if is_kinetic:
            self.physics = Physics(radius, pars["WIDTH"], pars["HEIGHT"], None,
                                   is_kinetic, fr)
            self.physics.set_ang_acc(ang_acc)
            self.physics.set_acc(acc)
        else:
            self.physics = Physics(radius, WIDTH, HEIGHT)
        self.physics.set_pos(pars["pos"])
        self.physics.set_vel(pars["vel"])
        self.physics.set_ang(pars["ang"])
        self.physics.set_ang_vel(pars["ang_vel"])

    def draw(self, canvas):
        if not self.up_key_down:
            canvas.draw_image(self.image, self.image_center, self.image_size,
                              self.physics.get_pos(), self.image_size,
                              self.physics.get_angle())
            self.ship_thrust_sound.rewind()
        else:
            canvas.draw_image(self.image, [
                self.image_center[0] + self.image_size[0], self.image_center[1]
            ], self.image_size, self.physics.get_pos(), self.image_size,
                              self.physics.get_angle())
            self.ship_thrust_sound.play()

    def get_physics_component(self):
        return self.physics

    def turn(self, ang_acc=0):
        self.physics.add_torque(ang_acc)

    def thrust(self, acc=0):
        self.physics.add_force(acc)

    def process_missile_group(self, canvas):
        SpriteGroup.process_sprite_group(canvas, self.missile_group)
        SpriteGroup.process_lifespan_group(canvas, self.missile_group)

    def shoot(self):
        front = self.get_front()
        pos = self.physics.get_pos()
        vel = self.physics.get_vel()
        self.missile_group.add(
            Sprite([
                pos[0] + self.physics.get_radius() * front[0],
                pos[1] + self.physics.get_radius() * front[1]
            ], [
                vel[0] + front[0] * self.physics.get_radius() / 5,
                vel[1] + front[1] * self.physics.get_radius() / 5
            ], 0, 0, self.missile_image, self.missile_info, self.physics.WIDTH,
                   self.physics.HEIGHT, self.missile_sound))

    def collide_ship_sprites(self,
                             group,
                             explosion_group,
                             explosion_image,
                             explosion_info,
                             ship=None,
                             ship_group=None):
        group_copy = set([])
        aux_copy = group.copy()
        for sprite in aux_copy:
            if self.physics.collide(sprite) is True:
                group_copy.add(sprite)
                explosion = Sprite(sprite.get_physics_component().get_pos(),
                                   [0, 0], 0, 0, explosion_image,
                                   explosion_info, self.physics.WIDTH,
                                   self.physics.HEIGHT)
                explosion_group.add(explosion)
                explosion_group.add(
                    Sprite(self.physics.get_pos(), [0, 0], 0, 0,
                           explosion_image, explosion_info, self.physics.WIDTH,
                           self.physics.HEIGHT))
                if self.life <= 0:
                    self.lives -= 1
                if ship is not None:
                    ship.score += 1

                if ship_group is not None:
                    ship_group.add(self)

        group.difference_update(group_copy)

    def get_front(self):
        return [
            Auxiliars.angle_to_vector(self.physics.get_angle())[0],
            Auxiliars.angle_to_vector(self.physics.get_angle())[1]
        ]

    def get_right(self):
        return [
            Auxiliars.angle_to_vector(self.physics.get_angle() +
                                      math.pi / 2.0)[0],
            Auxiliars.angle_to_vector(self.physics.get_angle() +
                                      math.pi / 2.0)[1]
        ]

    def get_missile_group(self):
        return self.missile_group

    def get_pos(self):
        return self.physics.get_pos()

    def get_acc(self):
        return self.physics.get_acc()

    def get_ang_acc(self):
        return self.physics.get_ang_acc()

    def get_score(self):
        return self.score

    def set_score(self, score):
        self.score = score

    def set_inc_score(self):
        score += 1
Ejemplo n.º 2
0
class Sprite:
    def __init__(self,
                 pos,
                 vel,
                 angle,
                 angle_vel,
                 image,
                 info,
                 WIDTH,
                 HEIGHT,
                 sound=None,
                 is_kinetic=False,
                 acc=0,
                 ang_acc=0,
                 fr=0):
        self.pos = [pos[0], pos[1]]
        self.vel = [vel[0], vel[1]]
        self.angle = angle
        self.angle_vel = angle_vel
        self.image = image
        self.image_center = info.get_center()
        self.image_size = info.get_size()
        radius = info.get_radius()
        self.lifespan = info.get_lifespan()
        self.animated = info.get_animated()
        #self.age = 0
        if sound:
            sound.rewind()
            sound.play()
        if is_kinetic:
            if self.lifespan == None:
                self.physics = Physics(radius, WIDTH, HEIGHT, None, is_kinetic,
                                       fr)
            else:
                self.physics = Physics(radius, WIDTH, HEIGHT, self.lifespan,
                                       is_kinetic, fr)
            self.physics.set_ang_acc(ang_acc)
            self.physics.set_acc(acc)
        else:
            if self.lifespan == None:
                self.physics = Physics(radius, WIDTH, HEIGHT)
            else:
                self.physics = Physics(radius, WIDTH, HEIGHT, self.lifespan)
        self.physics.set_pos(pos)
        self.physics.set_vel(vel)
        self.physics.set_ang(angle)
        self.physics.set_ang_vel(angle_vel)

    def draw(self, canvas):
        if self.animated:
            canvas.draw_image(self.image, [
                self.image_center[0] +
                (self.physics.age * self.image_size[0]), self.image_center[1]
            ], self.image_size, self.pos, self.image_size, self.angle)
        else:
            canvas.draw_image(self.image, self.image_center, self.image_size,
                              self.physics.get_pos(), self.image_size,
                              self.physics.get_angle())

    def get_physics_component(self):
        return self.physics