class MainChar(Sprite): def __init__(self): self.move = Movement(self, thrust_strength = 100000, accelx = 100000, accely = 100000, maxspeedx = 120, maxspeedy = 120, gravity = 0, posx=200, posy=200) self.hunter = media.load_image('hunter.png').convert_alpha() self.firstupdate = False self.image = self.hunter self.rect = self.image.get_rect() self.imgflip = False self.dir = 1 self.fuel = 10000 self.lives = 3 self.score = 0 self.caught_fairies = Group() self.fairies_to_catch = Group() self.out_of_fuel_event = None self.no_more_life_event = None self.all_fairies_caught_event = None self.moveright(1000) def set_init_pos(self): self.move.posx = 200 self.move.posy = 200 self.move.speedx = 0 self.move.speedy = 0 self.dir = 1 self.flip() def flip(self): if not self.imgflip and self.dir == -1: self.image = pygame.transform.flip(self.image, True, False) self.imgflip = True elif self.imgflip and self.dir == 1: self.image = pygame.transform.flip(self.image, True, False) self.imgflip = False def moveright(self, tick): self.dir = 1 self.flip() self.move.moveright(tick) def moveup(self, tick): self.move.thrust(tick) def movedown(self, tick): self.move.movedown(tick) def update(self, tick): if not self.firstupdate: self.image = self.hunter self.imgflip = False self.flip() self.firstupdate = False self.move.calculate_movement(tick) self.rect.x = self.move.posx self.rect.y = self.move.posy def raise_no_more_life_event(self): self.no_more_life_event() def remove_life(self): self.lives -= 1 if self.lives == 0: self.raise_no_more_life_event()
class MainChar(Sprite): def __init__(self): self.move = Movement(self, thrust_strength = 1800, accelx = 900, maxspeedx = 1000, maxspeedy = 1000, posx=50, posy=50) self.hunter = media.load_image('hunter.png').convert_alpha() self.hunter_boost = media.load_image('hunter_boost.png').convert_alpha() self.firstupdate = False self.image = self.hunter self.rect = self.image.get_rect() self.imgflip = False self.dir = 1 self.fuel = 10000 self.lives = 3 self.caught_fairies = Group() self.fairies_to_catch = Group() self.out_of_fuel_event = None self.no_more_life_event = None self.all_fairies_caught_event = None def set_init_pos(self): self.move.posx = 33 self.move.posy = 50 self.move.speedx = 0 self.move.speedy = 0 self.dir = 1 self.flip() def flip(self): if not self.imgflip and self.dir == -1: self.image = pygame.transform.flip(self.image, True, False) self.imgflip = True elif self.imgflip and self.dir == 1: self.image = pygame.transform.flip(self.image, True, False) self.imgflip = False def moveleft(self, tick): self.dir = -1 self.flip() if self.move.speedy == 0: self.move.moveleft(tick) def moveright(self, tick): self.dir = 1 self.flip() if self.move.speedy == 0: self.move.moveright(tick) def thrust(self, tick): if self.fuel > 0: self.image = self.hunter_boost self.imgflip = False self.flip() self.firstupdate = True if self.imgflip: self.move.moveleft(tick / 2) else: self.move.moveright(tick / 2) self.move.thrust(tick) self.fuel -= tick / 8 else: self.fuel = 0 self.out_of_fuel_event() def update(self, tick): if not self.firstupdate: self.image = self.hunter self.imgflip = False self.flip() self.firstupdate = False self.move.calculate_movement(tick) if self.move.speedx > 0: self.move.speedx -= 1 elif self.move.speedx < 0: self.move.speedx += 1 self.rect.x = self.move.posx self.rect.y = self.move.posy self.catch_fairies() def raise_out_of_fuel_event(self): self.out_of_fuel_event() def raise_no_more_life_event(self): self.no_more_life_event() def raise_all_fairies_caught_event(self): self.all_fairies_caught_event() def remove_life(self): self.lives -= 1 if self.lives == 0: self.raise_no_more_life_event() def catch_fairies(self): for f in self.fairies_to_catch: dist = math.sqrt((f.rect.centerx - self.rect.centerx)**2 + (f.rect.centery - self.rect.centery)**2) if dist < 20: f.kill() self.caught_fairies.add(f) if len(self.fairies_to_catch) == 0: self.raise_all_fairies_caught_event()