예제 #1
0
def demo_pygame(file_name):

    file = './sounds/Firestrm.ogg'
    # parser the map (it is done here to initialize the
    # window the same size as the map if it is small enough)
    world_map = tiledtmxloader.tmxreader.TileMapParser().parse_decode(
        file_name)
    mixer.init()
    # loading the sound files in different sound formats of mixer and main background sound in mixer stream
    sound_ouch = mixer.Sound('./sounds/pain.ogg')
    mixer.music.load(file)
    mixer.music.play(-1)

    # init pygame and set up a screen
    pygame.display.set_caption("tiledtmxloader - " + file_name + \
                                                        " - keys: arrows, 0-9")
    screen_width = min(1024, world_map.pixel_width)
    screen_height = min(768, world_map.pixel_height)
    screen = pygame.display.set_mode((screen_width, screen_height))

    # load the images using pygame
    resources = tiledtmxloader.helperspygame.ResourceLoaderPygame()
    resources.load(world_map)

    # prepare map rendering
    assert world_map.orientation == "orthogonal"

    # renderer
    renderer = tiledtmxloader.helperspygame.RendererPygame()

    # create hero sprite
    # use floats for hero position
    hero_pos_x = 18 * 32 + 16
    hero_pos_y = 22 * 32
    hero = person.create_person(hero_pos_x, hero_pos_y, './images/hero_u2.png')
    # dimensions of the hero for collision detection

    hero_width = hero.rect.width
    hero_height = 5
    # create knife sprite
    knife_pos_x = 8 * 32
    knife_pos_y = 21 * 32
    knife = create_knife(knife_pos_x, knife_pos_y)
    # create coin sprite
    coin_pos_x = 28 * 32 + 16
    coin_pos_y = 16 * 32
    coin = create_coin(coin_pos_x, coin_pos_y)

    # cam_offset is for scrolling
    cam_world_pos_x = 1024 / 2
    cam_world_pos_y = 768 / 2
    # set initial cam position and size
    renderer.set_camera_position_and_size(cam_world_pos_x, cam_world_pos_y, \
                                        screen_width, screen_height)

    # retrieve the layers
    sprite_layers = tiledtmxloader.helperspygame.get_layers_from_map(resources)

    # filter layers
    sprite_layers = [
        layer for layer in sprite_layers if not layer.is_object_group
    ]

    # add the hero the the right layer, it can be changed using 0-9 keys
    sprite_layers[3].add_sprite(hero)
    sprite_layers[2].add_sprite(coin)
    sprite_layers[2].add_sprite(knife)

    # layer add/remove hero keys
    num_keys = [pygame.K_0, pygame.K_1, pygame.K_2, pygame.K_3, pygame.K_4, \
                    pygame.K_5, pygame.K_6, pygame.K_7, pygame.K_8, pygame.K_9]

    ###FOR INTERFACE on top-left corner loading the libraries from menu file and loading the local variables into the function
    savegame = pk.load(open("./save.p", "rb"))
    HERO_HEALTH = savegame['hp']  # loading the last hero health
    hp = savegame['hp']
    hp_max = savegame['max_hp']  # keep updating the values in pk file
    c_pos = [cam_world_pos_x, cam_world_pos_y]

    #c_pos=camra.camera(file_name,renderer,hero)
    interf_toggle = 0
    interface = menu.create_interface(renderer, sprite_layers, screen, c_pos)
    hp_sprite = person.create_person(c_pos[0], c_pos[1], './images/hp_bar.png')
    l_g = menu.create_l_g(renderer, sprite_layers, screen, c_pos)
    [hp_sprite, hp] = menu.create_hp_bar(renderer, sprite_layers, screen,
                                         hp_sprite, c_pos)
    #for showing the xp in the interface
    xp_sprite = person.create_person(c_pos[0], c_pos[1],
                                     './images/exp_bar.png')
    xp_sprite = menu.create_xp_bar(renderer, sprite_layers, screen, xp_sprite,
                                   c_pos)

    # variables for the main loop
    clock = pygame.time.Clock()
    running = True
    speed = 4.75
    # setting up an environment for shifting the map while exiting from the map
    portal1 = pygame.Rect(17 * 32, 22 * 32, 96, 32)
    # set up timer for fps printing
    pygame.time.set_timer(pygame.USEREVENT, 1000)
    mr = ml = md = mu = 0

    # mainloop
    while running:
        dt = clock.tick(50)  # value set to work same with different processors
        ## continously moving the interface and saving the health and other data in the files
        savegame = pk.load(open("./save.p", "rb"))
        interface.rect.topleft = (c_pos[0] - 512, c_pos[1] - 384)
        hp_sprite.rect.topleft = (c_pos[0] - 400, c_pos[1] - 382)
        xp_sprite.rect.topleft = (c_pos[0] - 400, c_pos[1] - 345)
        l_g.rect.topleft = (c_pos[0] - 508, c_pos[1] - 381)

        # event handling
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
            elif event.type == pygame.USEREVENT:
                print("fps: ", clock.get_fps())
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_ESCAPE:
                    running = False
                    mixer.music.stop()

            menu.update_lg(l_g, c_pos)
            menu.update_hp_bar(renderer, sprite_layers, screen, hp_sprite,
                               c_pos, 0)
            menu.update_xp_bar(renderer, sprite_layers, screen, xp_sprite,
                               c_pos, 0)

        # find directions
# loading commom movement of hero stored in movements1 file and chaning its positions
        mov = movements1.hero_move(mr, ml, md, mu, hero_pos_x, hero_pos_y,
                                   hero, speed, sprite_layers[4])
        mr = mov[0]
        ml = mov[1]
        md = mov[2]
        mu = mov[3]
        hero_pos_x = mov[4]
        hero_pos_y = mov[5]
        # fire collision health loss
        if (fire_ouch(hero_pos_x, hero_pos_y, sprite_layers[1])):
            sound_ouch.play()
            dmg = 0.85
            # updating the new health
            menu.update_hp_bar(renderer, sprite_layers, screen, hp_sprite,
                               c_pos, dmg)
            savegame['hp'] -= dmg
            HERO_HEALTH -= dmg
            if (HERO_HEALTH < 0):
                # setting the hero kill position from fire
                savegame['hp'] = savegame['max_hp']
                HERO_HEALTH = savegame['hp']
                hero_pos_x = 18 * 32 + 16
                hero_pos_y = 22 * 32
                # if knife and coin not taken adding them here
                if (not sprite_layers[2].contains_sprite(knife)):
                    sprite_layers[2].add_sprite(knife)
                if (not sprite_layers[2].contains_sprite(coin)):
                    sprite_layers[2].add_sprite(coin)

        # getting coin here
        if (pygame.sprite.collide_rect(hero, coin)):
            sprite_layers[2].remove_sprite(coin)

        #getting knife here
        if (pygame.sprite.collide_rect(hero, knife)):
            sprite_layers[2].remove_sprite(knife)
# collision with portal for changing map
        if(portal1.collidepoint(hero.rect.midbottom) and not sprite_layers[2].contains_sprite(coin) \
            and not sprite_layers[2].contains_sprite(knife)):
            mixer.music.stop()
            savegame['b_h_vil'] = 1
            savegame['talk_vil']['./maps/village1.tmx'][1] = 1
            savegame['dagger'] = 1
            savegame['eqp_weapon'] = 'dagger'
            pk.dump(savegame, open("./save.p", "wb"))
            running = False
            #CODE FOR MAP CHANGING HERE.........
        # condition for shifting map

        # adjust camera according to the hero's position, follow him
        # (don't make the hero follow the cam, maybe later you want different
        #  objects to be followd by the cam)
        #renderer.set_camera_position(hero.rect.centerx, hero.rect.centery)

        # clear screen, might be left out if every pixel is redrawn anyway
        screen.fill((0, 0, 0))

        # render the map
        for sprite_layer in sprite_layers:
            if sprite_layer.is_object_group:
                # we dont draw the object group layers
                # you should filter them out if not needed
                continue
            else:
                renderer.render_layer(screen, sprite_layer)

        pk.dump(savegame, open("./save.p", "wb"))
        pygame.display.flip()
# calling the other map after completion of catching all the fishes
    shifty1.demo_pygame('./maps/village1.tmx', 2)
예제 #2
0
def demo_pygame(file_name, frm):

    # parser the map (it is done here to initialize the
    # window the same size as the map if it is small enough)
    world_map = tiledtmxloader.tmxreader.TileMapParser().parse_decode(
        file_name)

    # init pygame and set up a screen
    pygame.display.set_caption("tiledtmxloader - " + file_name + \
                                                        " - keys: arrows, 0-9")
    screen_width = min(1024, world_map.pixel_width)
    screen_height = min(768, world_map.pixel_height)
    screen = pygame.display.set_mode((screen_width, screen_height))

    # load the images using pygame
    resources = tiledtmxloader.helperspygame.ResourceLoaderPygame()
    resources.load(world_map)

    # prepare map rendering
    assert world_map.orientation == "orthogonal"

    # renderer
    renderer = tiledtmxloader.helperspygame.RendererPygame()

    #background music
    tunnel2_4_sound = sound.create_music(file_name)
    sound.volume(tunnel2_4_sound, 0.2)

    # create hero sprite
    if frm == 0:
        hero_pos_x = 5 * 32
        hero_pos_y = 95 * 32
    else:
        hero_pos_x = 81 * 32
        hero_pos_y = 62 * 32
    hero = person.create_person(hero_pos_x, hero_pos_y, './images/hero_u2.png')

    # create monster sprites
    mon = []
    mon_dir = []
    mon_image = []
    mon.append(person.create_person(16 * 32, 82 * 32, './images/slime14.png'))
    mon.append(person.create_person(39 * 32, 82 * 32, './images/slime14.png'))
    mon.append(person.create_person(50 * 32, 82 * 32, './images/slime14.png'))
    mon.append(person.create_person(60 * 32, 82 * 32, './images/slime14.png'))
    mon.append(person.create_person(67 * 32, 82 * 32, './images/slime14.png'))
    mon.append(person.create_person(5 * 32, 74 * 32, './images/slime14.png'))
    mon.append(person.create_person(5 * 32, 47 * 32, './images/slime14.png'))
    mon.append(person.create_person(14 * 32, 47 * 32, './images/slime14.png'))
    mon.append(person.create_person(23 * 32, 33 * 32, './images/slime14.png'))
    mon.append(person.create_person(23 * 32, 20 * 32, './images/slime14.png'))
    mon.append(person.create_person(20 * 32, 8 * 32, './images/slime14.png'))
    mon.append(person.create_person(43 * 32, 8 * 32, './images/slime14.png'))
    mon.append(person.create_person(43 * 32, 24 * 32, './images/slime14.png'))
    mon.append(person.create_person(43 * 32, 41 * 32, './images/slime14.png'))
    mon.append(person.create_person(49 * 32, 47 * 32, './images/slime14.png'))
    mon.append(person.create_person(66 * 32, 47 * 32, './images/slime14.png'))
    mon.append(person.create_person(72 * 32, 32 * 32, './images/slime14.png'))
    mon.append(person.create_person(72 * 32, 23 * 32, './images/slime14.png'))
    mon.append(person.create_person(72 * 32, 8 * 32, './images/slime14.png'))
    mon.append(person.create_person(81 * 32, 8 * 32, './images/slime14.png'))
    mon.append(person.create_person(81 * 32, 19 * 32, './images/slime14.png'))
    mon.append(person.create_person(81 * 32, 36 * 32, './images/slime14.png'))
    mon.append(person.create_person(81 * 32, 49 * 32, './images/slime14.png'))
    mon.append(person.create_person(67 * 32, 64 * 32, './images/slime14.png'))
    mon.append(person.create_person(82 * 32, 64 * 32, './images/slime14.png'))

    #list to save the direcion constraints for enemy's movements
    mon_dir = [
        -1, 0, -1, 0, 1, 0, 1, 0, 1, 0, 0, -1, 1, 0, -1, 0, 0, -1, 0, 1, 1, 0,
        -1, 0, 0, 1, 0, -1, 1, 0, -1, 0, 0, -1, 0, 1, 1, 0, -1, 0, 0, 1, 0, -1,
        0, 1, 1, 0, -1, 0
    ]

    # cam_offset is for scrolling
    cam_world_pos_x = screen_width / 2
    cam_world_pos_y = screen_height / 2

    # set initial cam position and size
    renderer.set_camera_position_and_size(cam_world_pos_x, cam_world_pos_y, \
                                        screen_width, screen_height)

    # retrieve the layers
    sprite_layers = tiledtmxloader.helperspygame.get_layers_from_map(resources)

    # filter layers
    sprite_layers = [
        layer for layer in sprite_layers if not layer.is_object_group
    ]

    # add the hero and monsters to the the right layer
    sprite_layers[1].add_sprite(hero)
    i = 0
    for i in range(len(mon)):
        mon_image.append(1)
        sprite_layers[1].add_sprite(mon[i])

    # portal for entry and exit of hero
    portal1 = pygame.Rect(4 * 32, 96 * 32, 3 * 32, 2 * 32)
    portal2 = pygame.Rect(85 * 32, 61 * 32, 1 * 32, 3 * 32)

    # variables for the main loop
    clock = pygame.time.Clock()
    running = True  # to run while loop
    speed = 10  # hero speed
    mr = ml = md = mu = 0  # image variables(change images to show movements of hero)
    h_drctn = 'up'  # direction where hero facing right now
    life = 1  # to keep track wheather hero is alive or not
    arrow_list = []  # contains a list of arrows (currently on screen)
    arrow_dir = []  # directions of arrows

    HP_MON = [10.0] * (len(mon))  # health of monster
    point_arrow = 10.0  # decrease in health of enemy when arrow of hero collides with enemy
    point_enm = 1.0  # decrease in health of hero after collision with enemy
    enm_speed = 8.0  # speed of enemy

    savegame = pk.load(open("./save.p", "rb"))
    old_xp = savegame['xp']
    old_level = savegame['h_level']
    old_armor = savegame['sheild_hp']
    old_arrow = savegame['arrow_count']

    # interface code
    c_pos = [cam_world_pos_x, cam_world_pos_y]
    interface = menu.create_interface(renderer, sprite_layers, screen, c_pos)
    hp_sprite = person.create_person(c_pos[0], c_pos[1],
                                     './images/hp_bar.png')  # hp bar interface
    l_g = menu.create_l_g(renderer, sprite_layers, screen,
                          c_pos)  # level and gold interface
    [hp_sprite, hp] = menu.create_hp_bar(renderer, sprite_layers, screen,
                                         hp_sprite, c_pos)
    xp_sprite = person.create_person(c_pos[0], c_pos[1],
                                     './images/exp_bar.png')  # x interface
    xp_sprite = menu.create_xp_bar(renderer, sprite_layers, screen, xp_sprite,
                                   c_pos)
    f_i = menu.create_f_i(renderer, sprite_layers, screen,
                          c_pos)  # arrow,armor,sword interface
    interf_fight = menu.create_interface_fight(renderer, sprite_layers, screen,
                                               c_pos)

    # set up timer for fps printing
    pygame.time.set_timer(pygame.USEREVENT, 1000)

    # mainloop
    while running:
        dt = clock.tick(50)
        savegame = pk.load(open("./save.p", "rb"))

        # event handling
        for event in pygame.event.get():
            if (event.type == pygame.QUIT):
                running = False
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_w and savegame['arrow_count'] > 0:
                    enemy_attack.create_arrow(
                        arrow_list, arrow_dir, h_drctn, hero,
                        sprite_layers)  # create arrow on pressing 'w'
                    remove_mon(
                        HP_MON, mon, mon_dir, mon_image, sprite_layers
                    )  # remove monster sprite if health bacomes zero
                    savegame[
                        'arrow_count'] -= 1  # decrease the arrow count and update in the dictionary
                    pk.dump(savegame,
                            open("./save.p",
                                 "wb"))  # save the changes of dictionary
                elif event.key == pygame.K_a:
                    # attack with sword on pressing 'a'
                    enemy_attack.attack(h_drctn, hero, mon, HP_MON)
                    remove_mon(HP_MON, mon, mon_dir, mon_image, sprite_layers)

            # interface update
            menu.update_lg(l_g, c_pos)
            menu.update_hp_bar(renderer, sprite_layers, screen, hp_sprite,
                               c_pos, 0)
            menu.update_xp_bar(renderer, sprite_layers, screen, xp_sprite,
                               c_pos, 0)
            menu.update_f_i(f_i, c_pos)

        # calling hero_move() function for hero's movements
        mov = movements1.hero_move(mr, ml, md, mu, hero_pos_x, hero_pos_y,
                                   hero, speed, sprite_layers[3])
        mr = mov[0]
        ml = mov[1]
        md = mov[2]
        mu = mov[3]
        hero_pos_x = mov[4]
        hero_pos_y = mov[5]

        # to detect the direction of hero
        if (mu > 1):
            h_drctn = 'up'
        elif (mr > 1):
            h_drctn = 'right'
        elif (md > 1):
            h_drctn = 'down'
        elif (ml > 1):
            h_drctn = 'left'

        # decresing the HP of player if collides any of the monsters
        # if HP becomes zero then start the game again
        for i in range(len(mon)):
            if pygame.sprite.collide_rect(hero, mon[i]):
                ouch_sound = sound.create_soundfx('./sounds/weapon_touch.ogg')
                sound.volume(ouch_sound, 0.4)
                if savegame['sheild_hp'] > 0:
                    savegame['sheild_hp'] -= (point_enm / 2)
                    savegame['hp'] -= (point_enm / 2)
                    if savegame['sheild_hp'] < 0:
                        savegame['sheild_hp'] = 0
                else:
                    savegame['hp'] -= point_enm
                    if savegame['hp'] <= 0:
                        sound.stop_soundfx(tunnel2_4_sound)
                        savegame['xp'] = old_xp
                        savegame['h_level'] = old_level
                        savegame['sheild_hp'] = old_armor
                        savegame['arrow_count'] = old_arrow
                        savegame['hp'] = savegame['max_hp']
                        pk.dump(savegame, open("./save.p", "wb"))
                        menu.update_hp_bar(renderer, sprite_layers, screen,
                                           hp_sprite, c_pos, 0)
                        life = 0
                        running = False
                pk.dump(savegame, open("./save.p", "wb"))

        (mon_dir, mon, mon_image) = move_mon(mon_dir, mon, mon_image,
                                             sprite_layers,
                                             enm_speed)  # monsters's movement
        enemy_attack.remove_arrow(
            arrow_list, mon, HP_MON, arrow_dir, sprite_layers,
            point_arrow)  # remove arrow if it goes out of the screen
        remove_mon(HP_MON, mon, mon_dir, mon_image,
                   sprite_layers)  # remove monsters
        menu.update_lg(l_g, c_pos)  #interface update

        # adjust camera according to the hero's position, follow him
        # (don't make the hero follow the cam, maybe later you want different
        #  objects to be followed by the cam)
        cam_pos_x = hero.rect.centerx
        cam_pos_y = hero.rect.centery
        if hero.rect.centerx <= 520:
            cam_pos_x = 520
        elif hero.rect.centerx >= 2336:
            cam_pos_x = 2336
        if hero.rect.centery >= 2875:
            cam_pos_y = 2875
        elif hero.rect.centery <= 408:
            cam_pos_y = 408
        renderer.set_camera_position(cam_pos_x, cam_pos_y)

        # interface update
        c_pos = (cam_pos_x, cam_pos_y)
        interface.rect.topleft = (c_pos[0] - 512, c_pos[1] - 384)
        hp_sprite.rect.topleft = (c_pos[0] - 400, c_pos[1] - 382)
        xp_sprite.rect.topleft = (c_pos[0] - 400, c_pos[1] - 345)
        l_g.rect.topleft = (c_pos[0] - 508, c_pos[1] - 381)
        f_i.rect.bottomright = (c_pos[0] + 500, c_pos[1] + 350)
        interf_fight.rect.bottomright = (c_pos[0] + 512, c_pos[1] + 384)

        # next map
        if pygame.Rect.colliderect(hero.rect,
                                   portal1) or pygame.Rect.colliderect(
                                       hero.rect, portal2):
            portal = True
            sound.stop_soundfx(tunnel2_4_sound)
            running = False

        # clear screen, might be left out if every pixel is redrawn anyway
        screen.fill((0, 0, 0))
        (renderer, sprite_layers,
         screen) = render_update(renderer, sprite_layers, screen)

    # Game restarts
    if life == 0:
        demo_pygame('./maps/tunnel2_4.tmx', 0)

    elif portal == True:
        shifty1.demo_pygame('./maps/village1.tmx', 1)
예제 #3
0
def demo_pygame(file_name):

    # parser the map (it is done here to initialize the
    # window the same size as the map if it is small enough)
    world_map = tiledtmxloader.tmxreader.TileMapParser().parse_decode(
        file_name)
    pygame.display.set_caption("tiledtmxloader - " + file_name + \
                                                        " - keys: arrows, 0-9")
    screen_width = min(1024, world_map.pixel_width)
    screen_height = min(768, world_map.pixel_height)
    screen = pygame.display.set_mode((screen_width, screen_height))

    mixer.init()
    # loading the sound files in different sound formats of mixer and main background sound in mixer stream
    fish_catch = mixer.Sound('./sounds/zish_catch.ogg')
    file = './sounds/zish_back.ogg'
    mixer.music.load(file)
    mixer.music.play(-1)

    # load the images using pygame
    resources = tiledtmxloader.helperspygame.ResourceLoaderPygame()
    resources.load(world_map)

    # prepare map rendering
    assert world_map.orientation == "orthogonal"

    # renderer
    renderer = tiledtmxloader.helperspygame.RendererPygame()

    # create hero sprite
    # use floats for hero position
    hero_pos_x = 1048 / 2
    hero_pos_y = 768 / 2 + 6 * 32
    hero = create_hero(hero_pos_x, hero_pos_y)
    hero_width = 31
    hero_height = 5

    # creating random fish
    fishes = []
    fish_count = 10
    fish_loc = []
    for i in range(fish_count):
        fishes.append(create_fish())
    #Storing the fishes in an array for further addition
    for i in range(fish_count):
        fish_loc.append(fishes[i].rect)
    # for different directions different images to be set on the moving fish.
    im1 = pygame.image.load('./images/ztile1.png')
    im2 = pygame.image.load('./images/ztile2.png')

    # cam_offset is for scrolling
    cam_world_pos_x = screen_width / 2
    cam_world_pos_y = screen_height / 2

    # set initial cam position and size
    renderer.set_camera_position_and_size(cam_world_pos_x, cam_world_pos_y, \
                                        screen_width, screen_height)

    # retrieve the layers
    sprite_layers = tiledtmxloader.helperspygame.get_layers_from_map(resources)

    # filter layers
    sprite_layers = [
        layer for layer in sprite_layers if not layer.is_object_group
    ]

    # adding the hero  and the firshes to the the right layer
    sprite_layers[1].add_sprite(hero)
    flag = [0 for x in range(fish_count)]
    #small fishes added in bottom of screen showing the count of remaining fishes left to complete the game
    small_fish = []
    for i in range(fish_count):
        small_fish.append(
            person.create_person(64 + i * 32, 22 * 32,
                                 './images/ztile_small.png'))

    for i in range(len(flag)):
        sprite_layers[1].add_sprite(fishes[i])
    for i in range(len(flag)):
        sprite_layers[1].add_sprite(small_fish[i])

    # variables for the main loop
    clock = pygame.time.Clock()
    running = True
    speed_x = 0.0
    speed_y = 0.0
    #initializing random values for the direction of 10 fishes
    for i in range(len(flag)):
        flag[i] = random.randint(1, 2)
    # mainloop
    # set up timer for fps printing
    pygame.time.set_timer(pygame.USEREVENT, 10000)

    while running:
        dt = clock.tick(50)  # value set to work same with different processors

        # event handling
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
# showing the fps
            elif event.type == pygame.USEREVENT:
                print("fps: ", clock.get_fps())
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_ESCAPE:
                    running = False

        # deciding fish speed at each instant along with the need to change direction with another function
        for i in range(len(flag)):
            f_temp_x = fishes[i].rect.centerx
            f_temp_y = fishes[i].rect.centery
            if (flag[i] == 0):
                flag[i] = random.randint(1, 2)
            if (flag[i] == 1):
                f_temp_x += random.randint(6, 11)
            else:
                f_temp_x -= random.randint(6, 11)
            f_temp_x, f_temp_y, flag[i] = dist_bound_x(
                f_temp_x, f_temp_y,
                flag[i])  # returns new position with direction flag
            if (flag[i] == 1):
                fishes[i].image = im2
            else:
                fishes[i].image = im1
# assiging the new final positon of every fish in every tick
            fishes[i].rect.centerx = f_temp_x
            fishes[i].rect.centery = f_temp_y
            fish_loc[i] = fishes[i].rect

        # find directions
        direction_x = pygame.key.get_pressed()[
            pygame.K_RIGHT] - pygame.key.get_pressed()[pygame.K_LEFT]
        direction_y = pygame.key.get_pressed()[
            pygame.K_DOWN] - pygame.key.get_pressed()[pygame.K_UP]

        # make sure the hero moves with same speed in all directions (diagonal!)
        speed_x += direction_x * 0.0056
        speed_y += direction_y * 0.0056
        dir_len = math.hypot(direction_x, direction_y)
        dir_len = dir_len if dir_len else 1.0
        if (math.fabs(speed_x) > 0.74):
            if (speed_x > 0):
                speed_x = 0.7
            else:
                speed_x = -0.7
        # update position
        step_x = speed_x * 36 / dir_len
        step_y = speed_y * 36 / dir_len
        step_x, step_y = check_collision(
            hero_pos_x, hero_pos_y, step_x, step_y, hero_width, hero_height,
            sprite_layers[3])  # to check collision from boundary for the hook
        hero_pos_x += step_x
        hero_pos_y += step_y
        if (step_x == 0):
            speed_x = 0.0
        if (step_y == 0):
            speed_y = 0.0
        hero.rect.center = (hero_pos_x, hero_pos_y)
        # checking for the contact with the hook midtop for catching fish
        flag = fish_collision(fish_loc, hero.rect, flag)

        i = 0
        # always check for any value in flag to be 0 if yes to remove that fish
        while (i < len(flag)):
            #print i
            if (flag[i] == 0):
                fish_catch.play()
                sprite_layers[1].remove_sprite(
                    fishes[i])  # removing big fish from big screen
                flag.pop(i)
                sprite_layers[1].remove_sprite(small_fish[len(
                    flag)])  # removing small fish from big screen
                fishes.pop(i)
                fish_loc.pop(i)
                continue
            i += 1
        #print("cleared here")
# synchronizing fishes sound along with their catch.
        if (len(flag) == 0):
            mixer.music.stop()
            sv = pk.load(open("./save.p", "rb"))
            sv['f_vil'] = 1
            sv['talk_vil']['./maps/village2_out1.tmx'][0] = 1
            pk.dump(
                sv, open("./save.p", "wb")
            )  # saving the results in the file to check for the next time in the story where to go or not to go
            running = False
        # adjust camera according to the hero's position, follow him
        screen.fill((0, 0, 0))
        # render the map
        for sprite_layer in sprite_layers:
            if sprite_layer.is_object_group:
                # we dont draw the object group layers
                # you should filter them out if not needed
                continue
            else:
                renderer.render_layer(screen, sprite_layer)

        pygame.display.flip()

# calling the other map after completion of catching all the fishes
    shifty1.demo_pygame('./maps/village2_out1.tmx', 2)