Example #1
0
class Game:
    def __init__(self):
        pygame.init()
        self.screen = pygame.display.set_mode(
            [WIDTH, HEIGHT])  # pygame.FULLSCREEN | pygame.DOUBLEBUF
        pygame.display.set_caption(TITLE)
        self.clock = pygame.time.Clock()
        self.load_data()

    def load_data(self):
        """Lets add an image for bee's nests"""
        root_folder = path.dirname(__file__)

        sprites = Spritesheet(
            path.join(root_folder, "data", "img", "spritesheet_x2.png"))

        self.player_img = sprites.image_at(PLAYER_SPRITE_AT[0],
                                           PLAYER_SPRITE_AT[1], TILESIZE, 2,
                                           KEY)

        self.bee_img = sprites.image_at(BEE_SPRITE_AT[0], BEE_SPRITE_AT[1],
                                        TILESIZE, 2, KEY)

        self.bee_nest_img = sprites.image_at(BEE_NEST_SPRITE_AT[0],
                                             BEE_NEST_SPRITE_AT[1], TILESIZE,
                                             2, KEY)

        self.top_wall_img = sprites.image_at(TOP_WALL_SPRITE_AT[0],
                                             TOP_WALL_SPRITE_AT[1], TILESIZE,
                                             2, KEY)
        self.front_wall_img = sprites.image_at(FRONT_WALL_SPRITE_AT[0],
                                               FRONT_WALL_SPRITE_AT[1],
                                               TILESIZE, 2, KEY)

    def reset(self):
        """We have a new sprite group: nests"""
        self.all_sprites = pygame.sprite.Group()
        self.walls = pygame.sprite.Group()
        self.mobs = pygame.sprite.Group()
        self.bullets = pygame.sprite.Group()
        self.nests = pygame.sprite.Group()

        self.current_map = Map()
        self.current_map.load_from_file("bigMap.txt")
        self.current_map.create_sprites_from_data(self)

        self.player = Player(self, self.current_map.entry_point[0],
                             self.current_map.entry_point[1], self.all_sprites,
                             self.player_img, PLAYER_SPEED, PLAYER_HEALTH)

        self.camera = Camera(self.current_map.pixel_width,
                             self.current_map.pixel_height)

    def run(self):
        self.playing = True
        while self.playing:
            self.dt = self.clock.tick(FPS)
            self.events()
            self.update()
            self.draw()

    def quit(self):
        pygame.quit()
        sys.exit()

    def update(self):
        """Bullets can collide with nests too"""
        self.all_sprites.update()
        self.camera.update(self.player)

        # bullets hitting nests
        hits = pygame.sprite.groupcollide(self.nests, self.bullets, False,
                                          True)
        for nest, bullets in hits.items():
            nest.hit(bullets[0].damage)

        # bullets hitting mobs
        hits = pygame.sprite.groupcollide(self.mobs, self.bullets, False, True)
        for mob, bullets in hits.items():
            mob.hit(bullets[0].damage)

        # mobs hitting player
        hits = pygame.sprite.spritecollide(self.player, self.mobs, False,
                                           False)
        for mob in hits:
            mob.attack(self.player)

        # mobs hitting mobs
        hits = pygame.sprite.groupcollide(self.mobs, self.mobs, False, False)
        for mobA, mobB in hits.items():
            mobA.push(mobB[0])

    def draw(self):
        pygame.display.set_caption("{:.2f}".format(self.clock.get_fps()))
        self.screen.fill(DARKGREY)
        for sprite in self.all_sprites:
            if isinstance(sprite, Mob) and sprite != self.player:
                sprite.draw_health()
            self.screen.blit(sprite.image, self.camera.apply_to_sprite(sprite))
        self.draw_player_health(self.screen, 10, 10,
                                self.player.health / PLAYER_HEALTH)
        pygame.display.flip()

    def draw_player_health(self, surface, x, y, health):
        if health < 0:
            health = 0
        BAR_LENTH = 100
        BAR_HEIGHT = 20
        fill = health * BAR_LENTH
        outline = pygame.Rect(x, y, BAR_LENTH, BAR_HEIGHT)
        fill_rect = pygame.Rect(x, y, fill, BAR_HEIGHT)
        if health > 0.6:
            col = GREEN
        elif health > 0.3:
            col = YELLOW
        else:
            col = RED
        pygame.draw.rect(surface, col, fill_rect)
        pygame.draw.rect(surface, WHITE, outline, 2)

    def events(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                self.quit()

    def show_start_screen(self):
        pass
Example #2
0
class Game:
    """Adding pygame mixer, which needs to be tweaked
    in order to avoid lag"""
    def __init__(self):
        pygame.mixer.pre_init(44100, -16, 2, 1024)
        pygame.init()
        pygame.mixer.set_num_channels(16)
        self.screen = pygame.display.set_mode(
            [WIDTH, HEIGHT])  # pygame.FULLSCREEN | pygame.DOUBLEBUF
        pygame.display.set_caption(TITLE)
        self.clock = pygame.time.Clock()
        self.load_data()

    def load_data(self):
        """Adding music & fx"""
        root_folder = path.dirname(__file__)
        img_folder = path.join(root_folder, "data", "img")
        music_folder = path.join(root_folder, "data", "music")
        fx_folder = path.join(root_folder, "data", "fx")

        sprites = Spritesheet(path.join(img_folder, "spritesheet_x2.png"))

        # IMAGES

        self.item_images = {}
        for item_name in ITEMS:
            sprite_at = ITEMS[item_name]['SPRITE_AT']
            self.item_images[item_name] = sprites.image_at(
                sprite_at[0], sprite_at[1], TILESIZE, 2, KEY_COLOR)

        self.player_img = sprites.image_at(PLAYER_SPRITE_AT[0],
                                           PLAYER_SPRITE_AT[1], TILESIZE, 2,
                                           KEY_COLOR)

        self.bee_img = sprites.image_at(BEE_SPRITE_AT[0], BEE_SPRITE_AT[1],
                                        TILESIZE, 2, KEY_COLOR)

        self.bee_nest_img = sprites.image_at(BEE_NEST_SPRITE_AT[0],
                                             BEE_NEST_SPRITE_AT[1], TILESIZE,
                                             2, KEY_COLOR)

        self.top_wall_img = sprites.image_at(TOP_WALL_SPRITE_AT[0],
                                             TOP_WALL_SPRITE_AT[1], TILESIZE,
                                             2, KEY_COLOR)

        self.front_wall_img = sprites.image_at(FRONT_WALL_SPRITE_AT[0],
                                               FRONT_WALL_SPRITE_AT[1],
                                               TILESIZE, 2, KEY_COLOR)

        # SOUND
        # Using arrays to add some variance
        pygame.mixer.music.load(path.join(music_folder, BG_MUSIC))
        self.basic_gun_fx = []
        for fx in BASIC_GUN_FX:
            pewpew = pygame.mixer.Sound(path.join(fx_folder, fx))
            pewpew.set_volume(0.1)
            self.basic_gun_fx.append(pewpew)
        self.critter_death_fx = []
        for fx in CRITTER_DEAD_FX:
            self.critter_death_fx.append(
                pygame.mixer.Sound(path.join(fx_folder, fx)))
        self.item_fx = {}
        for fx in ITEMS:
            self.item_fx[fx] = pygame.mixer.Sound(
                path.join(fx_folder, ITEMS[fx]['FX']))

    def reset(self):
        self.all_sprites = pygame.sprite.Group()
        self.walls = pygame.sprite.Group()
        self.mobs = pygame.sprite.Group()
        self.bullets = pygame.sprite.Group()
        self.nests = pygame.sprite.Group()
        self.items = pygame.sprite.Group()

        self.current_map = Map()
        self.current_map.load_from_file("bigMap.txt")
        # self.current_map.create_cave_cellular_automata(self, 50, 50)
        # self.current_map.create_cave_diggers(self, 50, 50)

        self.current_map.create_sprites_from_data(self)

        self.player = Player(self, self.current_map.entry_point[0],
                             self.current_map.entry_point[1], self.all_sprites,
                             self.player_img, PLAYER_SPEED, PLAYER_HEALTH)

        HealthPack(self, self.player.pos.x + TILESIZE,
                   self.player.pos.y + TILESIZE)

        SpeedUp(self, self.player.pos.x - TILESIZE,
                self.player.pos.y - TILESIZE)

        self.camera = Camera(self.current_map.pixel_width,
                             self.current_map.pixel_height)

    def run(self):
        """Start playing music!"""
        self.playing = True
        # pygame.mixer.music.play(loops=-1)
        while self.playing:
            self.dt = self.clock.tick(FPS)
            self.events()
            self.update()
            self.draw()

    def quit(self):
        pygame.quit()
        sys.exit()

    def update(self):
        self.all_sprites.update()
        self.camera.update(self.player)

        # bullets hitting nests
        hits = pygame.sprite.groupcollide(self.nests, self.bullets, False,
                                          True)
        for nest, bullets in hits.items():
            nest.hit(bullets[0].damage)

        # bullets hitting mobs
        hits = pygame.sprite.groupcollide(self.mobs, self.bullets, False, True)
        for mob, bullets in hits.items():
            mob.hit(bullets[0].damage)

        # mobs hitting player
        hits = pygame.sprite.spritecollide(self.player, self.mobs, False,
                                           False)
        for mob in hits:
            mob.attack(self.player)

        # mobs hitting mobs
        hits = pygame.sprite.groupcollide(self.mobs, self.mobs, False, False)
        for mobA, mobB in hits.items():
            mobA.push(mobB[0])

        # player hitting items
        hits = pygame.sprite.spritecollide(self.player, self.items, False,
                                           False)
        for item in hits:
            item.picked_by(self.player)

    def draw(self):
        pygame.display.set_caption("{:.2f}".format(self.clock.get_fps()))
        self.screen.fill(DARKGREY)
        for sprite in self.all_sprites:
            if isinstance(sprite, Mob) and sprite != self.player:
                sprite.draw_health()

            self.screen.blit(sprite.image, self.camera.apply_to_sprite(sprite))

            # pygame.draw.rect(self.screen, YELLOW,
            #                self.camera.apply_to_sprite(sprite))

        self.draw_player_health(self.screen, 10, 10,
                                self.player.health / PLAYER_HEALTH)
        pygame.display.flip()

    def draw_player_health(self, surface, x, y, health):
        if health < 0:
            health = 0
        BAR_LENTH = 100
        BAR_HEIGHT = 20
        fill = health * BAR_LENTH
        outline = pygame.Rect(x, y, BAR_LENTH, BAR_HEIGHT)
        fill_rect = pygame.Rect(x, y, fill, BAR_HEIGHT)
        if health > 0.6:
            col = GREEN
        elif health > 0.3:
            col = YELLOW
        else:
            col = RED
        pygame.draw.rect(surface, col, fill_rect)
        pygame.draw.rect(surface, WHITE, outline, 2)

    def events(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                self.quit()

    def show_start_screen(self):
        pass
Example #3
0
class Game:
    def __init__(self):
        pygame.init()
        self.screen = pygame.display.set_mode(
            [WIDTH, HEIGHT])  # pygame.FULLSCREEN | pygame.DOUBLEBUF
        pygame.display.set_caption(TITLE)
        self.clock = pygame.time.Clock()
        self.load_data()

    def load_data(self):
        root_folder = path.dirname(__file__)

        sprites = Spritesheet(
            path.join(root_folder, "data", "img", "spritesheet.png"))

        self.player_img = sprites.image_at(
            PLAYER_SPRITE_AT[0], PLAYER_SPRITE_AT[1], TILESIZE, 1, KEY)

        self.bee_img = sprites.image_at(
            BEE_SPRITE_AT[0], BEE_SPRITE_AT[1], TILESIZE, 1, KEY)

        self.top_wall_img = sprites.image_at(
            TOP_WALL_SPRITE_AT[0], TOP_WALL_SPRITE_AT[1], TILESIZE, 1, KEY)
        self.front_wall_img = sprites.image_at(
            FRONT_WALL_SPRITE_AT[0], FRONT_WALL_SPRITE_AT[1], TILESIZE, 1, KEY)

    def reset(self):
        """Let's add a bullets group"""
        self.all_sprites = pygame.sprite.Group()
        self.walls = pygame.sprite.Group()
        self.mobs = pygame.sprite.Group()
        self.bullets = pygame.sprite.Group()

        self.current_map = Map()
        self.current_map.load_from_file("bigMap.txt")
        self.current_map.create_sprites_from_data(self)

        self.player = Player(
            self,
            self.current_map.entry_point[0], self.current_map.entry_point[1],
            self.all_sprites,
            self.player_img,
            PLAYER_SPEED)

        self.camera = Camera(self.current_map.pixel_width,
                             self.current_map.pixel_height)

    def run(self):
        self.playing = True
        while self.playing:
            self.dt = self.clock.tick(FPS)
            self.events()
            self.update()
            self.draw()

    def quit(self):
        pygame.quit()
        sys.exit()

    def update(self):
        self.all_sprites.update()
        self.camera.update(self.player)

    def draw(self):
        """Updated camera apply method to use sprites or positions"""
        pygame.display.set_caption("{:.2f}".format(self.clock.get_fps()))
        self.screen.fill(DARKGREY)
        for sprite in self.all_sprites:
            self.screen.blit(sprite.image, self.camera.apply_to_sprite(sprite))

        pygame.display.flip()

    def events(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                self.quit()

    def show_start_screen(self):
        pass
Example #4
0
class Game:
    def __init__(self):
        pygame.init()
        self.screen = pygame.display.set_mode(
            [WIDTH, HEIGHT])  # pygame.FULLSCREEN | pygame.DOUBLEBUF
        pygame.display.set_caption(TITLE)
        self.clock = pygame.time.Clock()
        self.load_data()

    def load_data(self):
        """Loading item images"""
        root_folder = path.dirname(__file__)
        img_folder = path.join(root_folder, "data", "img")

        sprites = Spritesheet(path.join(img_folder, "spritesheet_x2.png"))

        # IMAGES
        self.item_images = {}
        for item_name in ITEMS:
            sprite_at = ITEMS[item_name]['SPRITE_AT']
            self.item_images[item_name] = sprites.image_at(
                sprite_at[0], sprite_at[1], TILESIZE, 2, KEY_COLOR)

        self.player_img = sprites.image_at(PLAYER_SPRITE_AT[0],
                                           PLAYER_SPRITE_AT[1], TILESIZE, 2,
                                           KEY_COLOR)

        self.bee_img = sprites.image_at(BEE_SPRITE_AT[0], BEE_SPRITE_AT[1],
                                        TILESIZE, 2, KEY_COLOR)

        self.bee_nest_img = sprites.image_at(BEE_NEST_SPRITE_AT[0],
                                             BEE_NEST_SPRITE_AT[1], TILESIZE,
                                             2, KEY_COLOR)

        self.top_wall_img = sprites.image_at(TOP_WALL_SPRITE_AT[0],
                                             TOP_WALL_SPRITE_AT[1], TILESIZE,
                                             2, KEY_COLOR)

        self.front_wall_img = sprites.image_at(FRONT_WALL_SPRITE_AT[0],
                                               FRONT_WALL_SPRITE_AT[1],
                                               TILESIZE, 2, KEY_COLOR)

    def reset(self):
        """New sprite group for items. Adding two for testing"""
        self.all_sprites = pygame.sprite.Group()
        self.walls = pygame.sprite.Group()
        self.mobs = pygame.sprite.Group()
        self.bullets = pygame.sprite.Group()
        self.nests = pygame.sprite.Group()
        self.items = pygame.sprite.Group()

        self.current_map = Map()
        self.current_map.load_from_file("bigMap.txt")
        # self.current_map.create_cave_cellular_automata(self, 50, 50)
        # self.current_map.create_cave_diggers(self, 50, 50)

        self.current_map.create_sprites_from_data(self)

        self.player = Player(self, self.current_map.entry_point[0],
                             self.current_map.entry_point[1], self.all_sprites,
                             self.player_img, PLAYER_SPEED, PLAYER_HEALTH)

        HealthPack(self, self.player.pos.x + TILESIZE,
                   self.player.pos.y + TILESIZE)

        SpeedUp(self, self.player.pos.x - TILESIZE,
                self.player.pos.y - TILESIZE)

        self.camera = Camera(self.current_map.pixel_width,
                             self.current_map.pixel_height)

    def run(self):
        self.playing = True
        while self.playing:
            self.dt = self.clock.tick(FPS)
            self.events()
            self.update()
            self.draw()

    def quit(self):
        pygame.quit()
        sys.exit()

    def update(self):
        """Added collision between player and items"""
        self.all_sprites.update()
        self.camera.update(self.player)

        # bullets hitting nests
        hits = pygame.sprite.groupcollide(self.nests, self.bullets, False,
                                          True)
        for nest, bullets in hits.items():
            nest.hit(bullets[0].damage)

        # bullets hitting mobs
        hits = pygame.sprite.groupcollide(self.mobs, self.bullets, False, True)
        for mob, bullets in hits.items():
            mob.hit(bullets[0].damage)

        # mobs hitting player
        hits = pygame.sprite.spritecollide(self.player, self.mobs, False,
                                           False)
        for mob in hits:
            mob.attack(self.player)

        # mobs hitting mobs
        hits = pygame.sprite.groupcollide(self.mobs, self.mobs, False, False)
        for mobA, mobB in hits.items():
            mobA.push(mobB[0])

        # player hitting items
        hits = pygame.sprite.spritecollide(self.player, self.items, False,
                                           False)
        for item in hits:
            item.picked_by(self.player)

    def draw(self):
        pygame.display.set_caption("{:.2f}".format(self.clock.get_fps()))
        self.screen.fill(DARKGREY)
        for sprite in self.all_sprites:
            if isinstance(sprite, Mob) and sprite != self.player:
                sprite.draw_health()

            self.screen.blit(sprite.image, self.camera.apply_to_sprite(sprite))

            # pygame.draw.rect(self.screen, YELLOW,
            #                self.camera.apply_to_sprite(sprite))

        self.draw_player_health(self.screen, 10, 10,
                                self.player.health / PLAYER_HEALTH)
        pygame.display.flip()

    def draw_player_health(self, surface, x, y, health):
        if health < 0:
            health = 0
        BAR_LENTH = 100
        BAR_HEIGHT = 20
        fill = health * BAR_LENTH
        outline = pygame.Rect(x, y, BAR_LENTH, BAR_HEIGHT)
        fill_rect = pygame.Rect(x, y, fill, BAR_HEIGHT)
        if health > 0.6:
            col = GREEN
        elif health > 0.3:
            col = YELLOW
        else:
            col = RED
        pygame.draw.rect(surface, col, fill_rect)
        pygame.draw.rect(surface, WHITE, outline, 2)

    def events(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                self.quit()

    def show_start_screen(self):
        pass
Example #5
0
class Game:
    def __init__(self):
        pygame.mixer.pre_init(44100, -16, 2, 1024)
        pygame.init()
        pygame.mixer.set_num_channels(16)
        self.screen = pygame.display.set_mode(
            [WIDTH, HEIGHT])  # pygame.FULLSCREEN | pygame.DOUBLEBUF
        pygame.display.set_caption(TITLE)
        self.clock = pygame.time.Clock()
        self.load_data()

    def load_data(self):
        """Let's create more sensible data structures for each group"""
        root_folder = path.dirname(__file__)
        img_folder = path.join(root_folder, "data", "img")
        music_folder = path.join(root_folder, "data", "music")
        fx_folder = path.join(root_folder, "data", "fx")

        sprites = Spritesheet(path.join(img_folder, "spritesheet_x2.png"))

        # IMAGES & SOUND

        self.images = {}
        self.fx = {}

        for item in ITEMS:
            sprite_at = ITEMS[item]['SPRITE']
            self.images[item] = sprites.image_at(sprite_at[0], sprite_at[1],
                                                 TILESIZE, 2, KEY_COLOR)
            fx = pygame.mixer.Sound(
                path.join(fx_folder, ITEMS[item]['FX_PICKUP']))
            fx.set_volume(0.1)
            self.fx[item] = fx

        for mob in MOBS:
            sprite_at = MOBS[mob]['SPRITE']
            self.images[mob] = sprites.image_at(sprite_at[0], sprite_at[1],
                                                TILESIZE, 2, KEY_COLOR)
            fx = pygame.mixer.Sound(path.join(fx_folder,
                                              MOBS[mob]['FX_DEATH']))
            fx.set_volume(0.1)
            self.fx[mob] = fx

        for nest in NESTS:
            sprite_at = NESTS[nest]['SPRITE']
            self.images[nest] = sprites.image_at(sprite_at[0], sprite_at[1],
                                                 TILESIZE, 2, KEY_COLOR)
            fx = pygame.mixer.Sound(
                path.join(fx_folder, NESTS[nest]['FX_DEATH']))
            fx.set_volume(0.1)
            self.fx[nest] = fx

        for weapon in WEAPONS:
            fx = pygame.mixer.Sound(path.join(fx_folder,
                                              WEAPONS[weapon]['FX']))
            fx.set_volume(0.1)
            self.fx[weapon] = fx

        self.tiles = {}
        for wall in WALLS:
            for orientation in ['TOP', 'FRONT']:
                sprite_at = WALLS[wall][orientation]
                self.tiles[f"{wall}_{orientation}"] = sprites.image_at(
                    sprite_at[0], sprite_at[1], TILESIZE, 2, KEY_COLOR)

        # MUSIC
        pygame.mixer.music.load(path.join(music_folder, BG_MUSIC))

    def reset(self):
        """Creating enemy bullet group, adding gun to constructors"""
        self.all_sprites = pygame.sprite.Group()
        self.walls = pygame.sprite.Group()
        self.mobs = pygame.sprite.Group()
        self.player_bullets = pygame.sprite.Group()
        self.enemy_bullets = pygame.sprite.Group()
        self.nests = pygame.sprite.Group()
        self.items = pygame.sprite.Group()

        self.current_map = Map()
        self.current_map.load_from_file("bigMap.txt")
        # self.current_map.create_cave_cellular_automata(self, 50, 50)
        # self.current_map.create_cave_diggers(self, 50, 50)

        self.current_map.create_sprites_from_data(self)

        self.player = Player(self, self.current_map.entry_point[0],
                             self.current_map.entry_point[1], self.all_sprites,
                             self.images['PLAYER'], MOBS['PLAYER']['SPEED'],
                             MOBS['PLAYER']['HEALTH'], 'GUN')

        HealthPack(self, self.player.pos.x + TILESIZE,
                   self.player.pos.y + TILESIZE)

        SpeedUp(self, self.player.pos.x - TILESIZE,
                self.player.pos.y - TILESIZE)

        self.camera = Camera(self.current_map.pixel_width,
                             self.current_map.pixel_height)

    def run(self):
        self.playing = True
        # pygame.mixer.music.play(loops=-1)
        while self.playing:
            self.dt = self.clock.tick(FPS)
            self.events()
            self.update()
            self.draw()

    def quit(self):
        pygame.quit()
        sys.exit()

    def update(self):
        """Adding player-enemybullets collisions and updating player_bullets"""
        self.all_sprites.update()
        self.camera.update(self.player)

        # bullets hitting nests
        hits = pygame.sprite.groupcollide(self.nests, self.player_bullets,
                                          False, True)
        for nest, bullets in hits.items():
            nest.hit(bullets[0].damage)

        # bullets hitting mobs
        hits = pygame.sprite.groupcollide(self.mobs, self.player_bullets,
                                          False, True)
        for mob, bullets in hits.items():
            mob.hit(bullets[0].damage)

        # bullets hitting player
        hits = pygame.sprite.spritecollide(self.player, self.enemy_bullets,
                                           True)
        for bullet in hits:
            self.player.hit(bullet.damage)

        # mobs hitting player
        hits = pygame.sprite.spritecollide(self.player, self.mobs, False)
        for mob in hits:
            mob.attack(self.player)

        # player hitting items
        hits = pygame.sprite.spritecollide(self.player, self.items, False)
        for item in hits:
            item.picked_by(self.player)

    def draw(self):
        pygame.display.set_caption("{:.2f}".format(self.clock.get_fps()))
        self.screen.fill(DARKGREY)
        for sprite in self.all_sprites:
            if isinstance(sprite, Mob) and sprite != self.player:
                sprite.draw_health()
                in_camera = self.camera.apply_to_sprite(sprite)

            self.screen.blit(sprite.image, self.camera.apply_to_sprite(sprite))

            # pygame.draw.rect(self.screen, YELLOW,
            #                self.camera.apply_to_sprite(sprite))

        self.draw_player_health(self.screen, 10, 10,
                                self.player.health / MOBS['PLAYER']['HEALTH'])
        pygame.display.flip()

    def draw_player_health(self, surface, x, y, health):
        if health < 0:
            health = 0
        BAR_LENTH = 100
        BAR_HEIGHT = 20
        fill = health * BAR_LENTH
        outline = pygame.Rect(x, y, BAR_LENTH, BAR_HEIGHT)
        fill_rect = pygame.Rect(x, y, fill, BAR_HEIGHT)
        if health > 0.6:
            col = GREEN
        elif health > 0.3:
            col = YELLOW
        else:
            col = RED
        pygame.draw.rect(surface, col, fill_rect)
        pygame.draw.rect(surface, WHITE, outline, 2)

    def events(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                self.quit()

    def show_start_screen(self):
        pass