Esempio n. 1
0
def load_level(level_loaded: Level):
    tile_x = level_loaded.TILE_X
    tile_y = level_loaded.TILE_Y
    offset_w = level_loaded.offset_w
    offset_h = level_loaded.offset_h

    entities = pygame.sprite.Group()
    platforms = []
    enemies = []
    players = []

    # block     : -1
    # empty     :  0
    # ground    :  1
    # stairs    :  2
    # bar       :  3
    # fly       :  4


    # build the level
    y = offset_h
    for i_row in range(0, level_loaded.TILE_Y_NUM):
        x = offset_w
        level_row = level_loaded.level[i_row]
        for j_col in range(0, level_loaded.TILE_X_NUM):
            level_block = level_row[j_col]
            level_loaded.level_matrix[i_row][j_col] = 0
            if level_block == "▉" or level_block == "P":
                e = PlatformBlock(level_loaded, x, y)
                platforms.append(e)
                entities.add(e)
                level_loaded.level_matrix[i_row][j_col] = -1
            if level_block == "╬" or level_block == "E":
                e = StairsBlock(level_loaded, x, y)
                platforms.append(e)
                entities.add(e)
                level_loaded.level_matrix[i_row][j_col] = 2
            if level_block == "-" or level_block == "B":
                e = BarBlock(level_loaded, x, y)
                platforms.append(e)
                entities.add(e)
                level_loaded.level_matrix[i_row][j_col] = 3
            if level_block == "_" or level_block == "H":
                e = BarHBlock(x, y)
                platforms.append(e)
                entities.add(e)
                level_loaded.level_matrix[i_row][j_col] = 3
            if level_block == "⊟" or level_block == "G":
                e = GoalBlock(level_loaded, x, y)
                platforms.append(e)
                entities.add(e)
                level_loaded.level_matrix[i_row][j_col] = -1
            if level_block == "⊏" or level_block == "L":
                e = GoalBlockLeft(level_loaded, x, y)
                platforms.append(e)
                entities.add(e)
                level_loaded.level_matrix[i_row][j_col] = -1
            if level_block == "⊐" or level_block == "R":
                e = GoalBlockRight(level_loaded, x, y)
                platforms.append(e)
                entities.add(e)
                level_loaded.level_matrix[i_row][j_col] = -1

            if level_block == "⭐" or level_block == "S":
                e = StarItem(level_loaded, x, y)
                platforms.append(e)
                entities.add(e)

            if level_block == "g":
                e = Ghost(
                    level_loaded,
                    x, y, "Ghost",
                    bg_color="#72A877",
                    image_file='images/sprites/characters/enemies/ghost.png',
                    flip=True,
                    jump_sound=constants.PLAYER_P1_JUMP
                )
                entities.add(e)
                enemies.append(e)
            if level_block == "t":
                e = Enemy(
                    level_loaded,
                    x, y, "Tritannus",
                    None, None, None, None,
                    bg_color="#72A877",
                    image_file='images/winx_raw/tritannus_01.png',
                    flip=True,
                    jump_sound=constants.PLAYER_P1_JUMP
                )
                entities.add(e)
                enemies.append(e)

            if level_block == "1" or level_block == "Y":
                e = Player(
                    level_loaded,
                    x, y, "Y",
                    K_UP, K_DOWN, K_RIGHT, K_LEFT,
                    constants.PLAYER_P1_COLOR_BG,
                    'images/winx_raw/tritannus_01.png',
                    'images/winx_raw/tritannus_01.png',
                    # constants.IMAGE_P1,
                    # constants.IMAGE_P1_TRANSFORMED,
                    flip=True,
                    jump_sound=constants.PLAYER_P1_JUMP
                )
                level_loaded.num_players = level_loaded.num_players + 1
                players.append(e)
                player_p1 = e

            if level_block == "2" or level_block == "X":
                e = Player(
                    level_loaded,
                    x, y, "X",
                    K_w, K_s, K_d, K_a,
                    constants.PLAYER_P2_COLOR_BG, constants.IMAGE_P2,
                    constants.IMAGE_P2_TRANSFORMED,
                    flip=True,
                    jump_sound=constants.PLAYER_P2_JUMP
                )
                level_loaded.num_players = level_loaded.num_players + 1
                players.append(e)
                player_p2 = e

            x += tile_x
        y += tile_y

    for i_row in range(0, level_loaded.TILE_Y_NUM-2):
        for j_col in range(0, level_loaded.TILE_X_NUM):
            if i_row < level_loaded.TILE_Y_NUM-1:
                if \
                        level_loaded.level_matrix[i_row+2][j_col] in [0, 4] and \
                        level_loaded.level_matrix[i_row+1][j_col] in [0, 4] and \
                        level_loaded.level_matrix[i_row][j_col] == 0:
                    level_loaded.level_matrix[i_row][j_col] = 4

    for p in players:
        entities.add(p)
        platforms.append(p)
    return entities, platforms, enemies, players
def load_level(level: Level, game_screen: GameScreen):
    tile_x = int(game_screen.w / level.TILE_X_NUM)
    tile_y = int(game_screen.h / level.TILE_Y_NUM)
    offset_w = game_screen.x_offset + int(
        round((game_screen.w - tile_x * level.TILE_X_NUM) / 2))
    offset_h = game_screen.y_offset + int(
        round((game_screen.h - tile_y * level.TILE_Y_NUM) / 2))
    level.offset_tile_x = offset_w
    level.offset_tile_y = offset_h

    constants.VELOCITY_MOVEMENT = level.VELOCITY_MOVEMENT
    constants.VELOCITY_JUMP = level.VELOCITY_JUMP
    constants.VELOCITY_MAX_FALL = level.VELOCITY_MAX_FALL

    constants.TILE_X = tile_x
    constants.TILE_Y = tile_y
    # constants.TILE_X_NUM = level.TILE_X_NUM
    # constants.TILE_Y_NUM = level.TILE_Y_NUM

    entities = pygame.sprite.Group()
    platforms = []

    # build the level
    player_p1 = Player(0, 0, "dummy")
    player_p2 = Player(0, 0, "dummy")
    y = offset_h
    for level_row in level.get_level():
        x = offset_w
        for level_block in level_row:
            if level_block == "P":
                e = PlatformBlock(x, y)
                platforms.append(e)
                entities.add(e)
            if level_block == "E":
                e = StairsBlock(x, y)
                platforms.append(e)
                entities.add(e)
            if level_block == "B":
                e = BarBlock(x, y)
                platforms.append(e)
                entities.add(e)
            if level_block == "H":
                e = BarHBlock(x, y)
                platforms.append(e)
                entities.add(e)
            if level_block == "G":
                e = GoalBlock(x, y)
                platforms.append(e)
                entities.add(e)
            if level_block == "L":
                e = GoalBlockLeft(x, y)
                platforms.append(e)
                entities.add(e)
            if level_block == "R":
                e = GoalBlockRight(x, y)
                platforms.append(e)
                entities.add(e)
            if level_block == "Y":
                player_p1 = Player(
                    x,
                    y,
                    "Y",
                    constants.PLAYER_P1_COLOR_BG,
                    constants.IMAGE_P1,
                    flip=True,
                    force_background=level.player_force_background,
                    jump_sound=constants.PLAYER_P1_JUMP)
                level.num_players = level.num_players + 1
            if level_block == "X":
                player_p2 = Player(
                    x,
                    y,
                    "X",
                    constants.PLAYER_P2_COLOR_BG,
                    constants.IMAGE_P2,
                    flip=True,
                    force_background=level.player_force_background,
                    jump_sound=constants.PLAYER_P2_JUMP)
                level.num_players = level.num_players + 1
            x += tile_x
        y += tile_y

    if player_p1.name is not "Dummy":
        platforms.append(player_p1)
        entities.add(player_p1)
    if player_p2.name is not "Dummy":
        entities.add(player_p2)
        platforms.append(player_p2)
    return entities, platforms, player_p1, player_p2