コード例 #1
0
ファイル: ghost.py プロジェクト: MarcinDadura/Shamboogeon
    def update(self, time_delta, objects=None):
        self.set_sprite(
            pygame.image.load('img/ghost_{}.png'.format(
                self.count)).convert_alpha())
        player = Player.get_instance()
        p_x = player.get_x()
        p_y = player.get_y()
        horizontal_direction = 0
        vertical_direction = 0

        if p_x > self.get_x():
            horizontal_direction = 1
        elif p_x < self.get_x():
            horizontal_direction = -1

        if p_y > self.get_y():
            vertical_direction = 1
        elif p_y < self.get_y():
            vertical_direction = -1

        self.set_x(self._x + self.speed *
                   (time_delta / 1000) * horizontal_direction)
        self.set_y(self._y + self.speed *
                   (time_delta / 1000) * vertical_direction)
        self.count = self.count + 1 if self.count < 3 else 0
コード例 #2
0
    def update(self, time_delta, objects):
        if not self.move:
            return
        old_x = self.get_x()
        old_y = self.get_y()
        if self.count % 20 == 0:
            self.set_sprite(
                pygame.image.load('img/{}_{}.png'.format(
                    self.name, self.count // 20)).convert_alpha())

        player = Player.get_instance()
        p_x = player.get_x()
        p_y = player.get_y()
        self.horizontal_direction = 0
        self.vertical_direction = 0

        if p_x > self.get_x():
            self.horizontal_direction = 1
        elif p_x < self.get_x():
            self.horizontal_direction = -1

        if p_y > self.get_y():
            self.vertical_direction = 1
        elif p_y < self.get_y():
            self.vertical_direction = -1

        self.count = self.count + 1 if self.count < self.max * 20 else 0

        self.set_x(self._x + self.speed *
                   (time_delta / 1000) * self.horizontal_direction)
        for obj in pygame.sprite.spritecollide(self, objects, dokill=False):
            if obj.type == 'wall' or obj.type == 'trellis':
                self.horizontal_direction = -self.horizontal_direction
                self.set_x(old_x)
                break
        #self.set_x(self._x + self.speed * (time_delta / 1000) * self.horizontal_direction)

        self.set_y(self._y + self.speed *
                   (time_delta / 1000) * self.vertical_direction)
        for obj in pygame.sprite.spritecollide(self, objects, dokill=False):
            if obj.type == 'wall' or obj.type == 'trellis':
                self.vertical_direction = -self.vertical_direction
                self.set_y(old_y)
                break
コード例 #3
0
def game(screen):
    """Load levels"""
    global welcome, lost, game_sound

    game_state = GameState.get_instance()
    inventory = Inventory.get_instance()
    inventory_board = pygame.Surface(screen.get_size())

    item = Item("arrow", "arrow", pygame.image.load('img/strzala_prawo.png'), 0, 0)
    item2 = Item("arrow", "arrow", pygame.image.load('img/strzala_prawo.png'), 0, 0)
    item3 = Item("arrow", "arrow", pygame.image.load('img/strzala_prawo.png'), 0, 0)
    Inventory.get_instance().add_item(item)
    Inventory.get_instance().add_item(item2)
    Inventory.get_instance().add_item(item3)

    game_state.reset()

    room_manager.set_lvl(lvl)

    """Sound"""

    game_menu.sound.stop()
    if (room_manager.get_lvl() == 1):
        print('test')
        game_sound = pygame.mixer.Sound('sounds/LOCHY-theme.ogg')
        game_sound.play(-1)
        game_sound.set_volume(0.15)


    board = pygame.Surface((640, 640))


    run = True
    counter = 0
    while run:
        counter += 1
        board, welcome_2 = calculate_scale(screen.get_size(), board, welcome, force=True)
        board.blit(welcome_2, (0, 0))
        screen.fill((0, 0, 0))
        screen.blit(board, ((screen.get_size()[0] - board.get_size()[0])/2, 0))
        pygame.display.flip()
        for event in pygame.event.get():
            if event.type == pygame.KEYDOWN and counter > 300:
                run = False


    player = Player.get_instance()
    player.set_x(128)
    player.set_y(128)

    show_s = True

    resett = True

    while(not game_state.exit):
        objects_list = room_manager.get_objects()
        old_room_obj = room(screen, board, objects_list, inventory, inventory_board)
        player = Player.get_instance()
        if player.get_y() < 0:
            room_manager.move_up()
        elif player.get_y() + player._height > 16 * 16:
            room_manager.move_down()
        elif player.get_x() < 0:
            room_manager.move_left()
        elif player.get_x() + player._width > 16 * 16:
            room_manager.move_right()
        if old_room_obj is not None:
            play_room_animation(old_room_obj, room_manager.get_objects(), board, inventory, inventory_board)
        GameObject.clear_objects_list()
        if game_state.next_lvl:
            game_state.next_lvl = False
            room_manager.set_lvl(room_manager.get_lvl() + 1)

        if (room_manager.get_lvl() == 2 and resett):
            resett = False
            game_sound.stop()
            game_sound = pygame.mixer.Sound('sounds/hepi-theme-final.ogg')
            game_sound.play(-1)
            game_sound.set_volume(0.95)

        run = True
        counter = 0
        while run and show_s and room_manager.get_lvl() == 2:
            counter += 1
            board, lost3 = calculate_scale(screen.get_size(), board, lost2, force=True)
            board.blit(lost3, (0, 0))
            screen.fill((0, 0, 0))
            screen.blit(board, ((screen.get_size()[0] - board.get_size()[0])/2, 0))
            pygame.display.flip()
            for event in pygame.event.get():
                if event.type == pygame.KEYDOWN and counter > 300:
                    run = False
                    show_s = False

    run = True
    counter = 0
    while run:
        counter += 1
        if Player.get_instance().hp == 0:
            board, lost_2 = calculate_scale(screen.get_size(), board, lost, force=True)
        else:
            board, lost_2 = calculate_scale(screen.get_size(), board, win, force=True)
        board.blit(lost_2, (0, 0))
        screen.fill((0, 0, 0))
        screen.blit(board, ((screen.get_size()[0] - board.get_size()[0])/2, 0))
        pygame.display.flip()
        for event in pygame.event.get():
            if event.type == pygame.QUIT and counter > 300:
                run = False
            if event.type == pygame.KEYDOWN and counter > 300:
                run = False
    exit(0)
コード例 #4
0
def room(screen, board, objects_list: list, inventory: Inventory, inventory_board) -> pygame.sprite.Group:

    global hearth, empty_heart, hearths_board, game_sound

    game_s = GameState.get_instance()
    game_s = game_s.sound

    if game_s != None:
        game_sound.stop()
        game_sound = game_s
        game_sound.play()


    objects = pygame.sprite.Group()
    monsters = pygame.sprite.Group()
    enemies = pygame.sprite.Group()
    teleports = pygame.sprite.Group()
    floor = None
    if RoomManager.get_instance().get_lvl() == 1:
        floor = pygame.image.load('img/no_floor.png')
    else:
        floor = pygame.image.load('img/no_floor.png')

    for o in objects_list:
        if not isinstance(o, Teleport) and not isinstance(o, Monster):
            objects.add(o)
        elif isinstance(o, Monster):
            monsters.add(o)
        elif not o.cary:
            teleports.add(o)
        elif o.cary:
            pass

    for obj in objects:
        if obj.type in ('ghost', 'rock', 'rainbow1', 'rainbow2', 'saw'):
            enemies.add(obj)

    for o in monsters:
        enemies.add(o)

    clock = pygame.time.Clock()
    game_state = GameState.get_instance()

    player = Player.get_instance()
    player_group = pygame.sprite.Group()
    player_group.add(player)

    inventory_g = pygame.sprite.Group()
    inventory_bar = pygame.sprite.Group()
    inventory.rescale()
    inventory_bar.add(inventory)

    # Make sure if scale of the board is correct
    board, floor = calculate_scale(screen.get_size(), board, floor, force=True)

    all_objects = pygame.sprite.Group()
    for obj in objects:
        all_objects.add(obj)
    for obj in monsters:
        all_objects.add(obj)

    running = True
    while running:
    
        for i in game_state.resp:
            enemies.add(i)
            all_objects.add(i)
            game_state.resp.remove(i)

        hearths_board.fill((0, 0, 0))
        inventory_g = pygame.sprite.Group()
        for o in inventory.get_items():
            o.rescale()
            inventory_g.add(o)

        for i in range(3):
            if i < player.hp:
                hearths_board.blit(hearth, (16*i * game_state.get_board_scale(), 0))
            else:
                hearths_board.blit(empty_heart, (16*i * game_state.get_board_scale(), 0))

        time_delta = clock.tick(120)
        # RGB from 0 to 255
        screen.fill((0, 0, 0))
        inventory_board.fill((0, 0, 0))

        board.fill((0, 255, 0))
        if floor:
            board.blit(floor, (0, 0))

        objects.update(time_delta)
        teleports.update(time_delta)
        monsters.update(time_delta, objects)
        player.update(time_delta, all_objects, enemies)
        enemies.update(time_delta, all_objects)

        objects.draw(board)
        enemies.draw(board)
        teleports.draw(board)
        player_group.draw(board)
        monsters.draw(board)

        inventory_bar.draw(inventory_board)
        inventory_g.draw(inventory_board)

        screen.blit(inventory_board, (0, 0))
        screen.blit(hearths_board, (0, screen.get_size()[1]-16 * GameState.get_instance().get_board_scale()))
        screen.blit(board, ((screen.get_size()[0] - board.get_size()[0])/2, 0))
        pygame.display.flip()
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
                game_state.exit = True
                exit(0)
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_ESCAPE:
                    running = False
                    game_state.exit = True
                    exit(0)

                arrow = None
                if event.key == pygame.K_UP:
                    arrow = Arrow.shoot_arrow(0, -1)
                elif event.key == pygame.K_DOWN:
                    arrow = Arrow.shoot_arrow(0, 1)
                elif event.key == pygame.K_LEFT:
                    arrow = Arrow.shoot_arrow(-1, 0)
                elif event.key == pygame.K_RIGHT:
                    arrow = Arrow.shoot_arrow(1, 0)

                if arrow is not None:
                    enemies.add(arrow)
            elif event.type == pygame.VIDEORESIZE:
                width, height = event.size
                if width < 300:
                    width = 300
                    pygame.display.set_mode((width, height), pygame.RESIZABLE)
                if height < 300:
                    height = 300
                    pygame.display.set_mode((width, height), pygame.RESIZABLE)
                board, floor = calculate_scale(event.size, board, floor)
            elif event.type == pygame.KEYUP and event.key == pygame.K_e:
                if inventory.has_potion():
                    player.hp = player.hp + 1
                    inventory.dec_potion()

        if player.check_if_hit_border():
            for t in teleports:
                objects.add(t)
            Saw.stop_saws()
            return objects
        if pygame.sprite.spritecollideany(player, teleports):
            Saw.stop_saws()
            game_state.next_lvl = True
            running = False
        if player.hp == 0 or player.hp == -1:
            game_sound.stop()
            lost_s.play()
            Saw.stop_saws()
            running = False
            game_state.exit = True
コード例 #5
0
def play_room_animation(old_objects, new_objects, board, inventory: Inventory, inventory_board):
    global hearth, empty_heart, hearths_board
    speed = 150
    player = Player.get_instance()
    horizontal = True
    direction = -1
    if player.get_x() < 0:
        horizontal = True
        direction = 1
    elif player.get_y() < 0:
        horizontal = False
        direction = 1
    elif player.get_y() + player._height > 16 * 16:
        horizontal = False
        direction = -1

    if horizontal:
        for x in new_objects:
            if not x.cary:
                x.set_x(x.get_x() - 16 * 16 * direction)
    if not horizontal:
        for x in new_objects:
            if not x.cary:
                x.set_y(x.get_y() - 16 * 16 * direction)

    objects_list = new_objects
    new_objects = pygame.sprite.Group()
    inventory_g = pygame.sprite.Group()
    inventory_bar = pygame.sprite.Group()

    for o in objects_list:
        if not o.cary:
            new_objects.add(o)


    player_group = pygame.sprite.Group()
    player_group.add(player)
    inventory.rescale()
    inventory_bar.add(inventory)

    clock = pygame.time.Clock()
    game_state = GameState.get_instance()
    if RoomManager.get_instance().get_lvl() == 1:
        floor = pygame.image.load('img/no_floor.png')
    else:
        floor = pygame.image.load('img/no_floor.png')
    board, floor = calculate_scale(screen.get_size(), board, floor, force=True)
    move = 0

    while True:

        for o in inventory.get_items():
            o.rescale()
            inventory_g.add(o)

        inventory_board.fill((0, 0, 0))
        hearths_board.fill((0, 0, 0))
        for i in range(3):
            if i < player.hp:
                hearths_board.blit(hearth, (16*i * game_state.get_board_scale(), 0))
            else:
                hearths_board.blit(empty_heart, (16*i * game_state.get_board_scale(), 0))


        inventory_board.fill((0, 0, 0))
        inventory_bar.draw(inventory_board)
        inventory_g.draw(inventory_board)

        time_delta = clock.tick(120)
        move += speed * (time_delta/1000) * game_state.get_board_scale()
        screen.fill((0, 0, 0))

        board.fill((0, 255, 0))
        if floor:
            if horizontal:
                board.blit(floor, (move*2 * direction, 0))
                board.blit(floor, (move*2 * direction - (direction * 256 * GameState.get_instance().get_board_scale()), 0))
            else:
                board.blit(floor, (0, -move*2 * -direction))
                board.blit(floor, (0, -move*2 * -direction - (direction * 256 * GameState.get_instance().get_board_scale())))
        new_objects.draw(board)
        old_objects.draw(board)
        player_group.draw(board)
        screen.blit(inventory_board, (0, 0))
        screen.blit(hearths_board, (0, screen.get_size()[1]-16 * GameState.get_instance().get_board_scale()))
        screen.blit(board, ((screen.get_size()[0] - board.get_size()[0])/2, 0))
        pygame.display.flip()

        if horizontal:
            for x in old_objects:
                if not x.cary:
                    x.set_x(x.get_x() + speed * (time_delta/1000) * game_state.get_board_scale() * direction)
            for x in new_objects:
                if not x.cary:
                    x.set_x(x.get_x() + speed * (time_delta/1000) * game_state.get_board_scale() * direction)
            player.set_x(player.get_x() + speed * (time_delta/1000) * game_state.get_board_scale()/(17.3/16) * direction)
        else:
            for x in old_objects:
                if not x.cary:
                    x.set_y(x.get_y() + speed * (time_delta/1000) * game_state.get_board_scale() * direction)
            for x in new_objects:
                if not x.cary:
                    x.set_y(x.get_y() + speed * (time_delta/1000) * game_state.get_board_scale() * direction)
            player.set_y(player.get_y() + speed * (time_delta/1000) * game_state.get_board_scale()/(17.3/16) * direction)

        if move >= 16 * 16:
            if horizontal:
                player.set_x(player.get_x() - direction)
            else:
                player.set_y(player.get_y() - direction)
            return