コード例 #1
0
ファイル: client.py プロジェクト: gjmiles/adventure_pygame
def main():
    """ Main Program """
    pygame.init()
 
    # Set the height and width of the screen
    size = [SCREEN_WIDTH, SCREEN_HEIGHT]
    screen = pygame.display.set_mode(size)
 
    pygame.display.set_caption("Dungeon Dreams Demo")
 
    # Create the player
    map_pix_size = 30

 
    # Create all the levels
    level_list = []
#    level_list.append( Level_01(player) )
 
    # Set the current level
    current_level_no = 0
    current_level = 0
#    current_level = level_list[current_level_no]

    active_sprite_list = pygame.sprite.Group()

 
    # Loop until the user clicks the close button.
    done = False
 
    # Used to manage how fast the screen updates
    clock = pygame.time.Clock()
    all_sprites_list = pygame.sprite.LayeredDirty()
    collid_list = pygame.sprite.LayeredDirty()
    mobiles_list = pygame.sprite.Group()
    m_attacks = pygame.sprite.Group()
    area = None
    image_files = glob.glob('HumanMage.PNG')
    hud = Hud(screen)
    player = Player(100,100,image_files,hud)
    hud.display_player_stats(player.stats)
    player.set_all_sprites(all_sprites_list)
    screen_size = (screen.get_width(),screen.get_height())
    m_fact = Monster_Factory(area,collid_list,50,screen_size,all_sprites_list,player)
    map_tool = Map_Handler(screen,all_sprites_list,collid_list,player,mobiles_list,
                           m_fact,hud)
    map_tool.build_area()
    item_fact = map_tool.get_item_fact()

    shift_x = 0
    shift_y = 0
    
    all_mobiles = m_fact.get_mobiles_group()
    dam_mod = 1
    #init path finding...
    path_finder = a_star(collid_list,50)
    player.group_add(all_mobiles)

    image_files = glob.glob('*.PNG')
    
    #init events for following and monsters, start at 3 seconds because
    #player needs a second or two catch bearings
    FOLLOW_EVENT = USEREVENT + 1
    M_ATTACK_EVENT = USEREVENT + 2
    pygame.time.set_timer(FOLLOW_EVENT, 3000)
    pygame.time.set_timer(M_ATTACK_EVENT,3000)
    game_start = False
    #-------- Main Program Loop -----------
    while not done:

        #Probably would make a class just to handle
        #client events.
        #These handle the movements
        keys = pygame.key.get_pressed()
        if keys[pygame.K_h]:
            player.changespeed(-1, 0)
        if keys[pygame.K_l]:
            player.changespeed(1, 0)
        if keys[pygame.K_k]:
            player.changespeed(0, -1)
        if keys[pygame.K_j]:
            player.changespeed(0, 1)
        if keys[pygame.K_n]: 
            player.changespeed(1,1)
        if keys[pygame.K_b]: 
            player.changespeed(-1,1)
        if keys[pygame.K_y]:
            player.changespeed(-1,-1)
        if keys[pygame.K_u]:
            player.changespeed(1,-1)

        #More events, quit and attacks and stopping the player
        #when the button goes up.
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                done = True

            player.check_events(event)

            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_SPACE:
                    r_attack = player.ranged_attack(all_sprites_list,
                                                    None,
                                                    player.r_attack_images,
                                                    dam_mod)
                    m_fact.set_check_attack(r_attack)
                    
            if event.type == pygame.KEYUP:
                if event.key == pygame.K_h:
                    player.stop()
                if event.key == pygame.K_y:
                    player.stop()
                if event.key == pygame.K_k:
                    player.stop()
                if event.key == pygame.K_u:
                    player.stop()
                if event.key == pygame.K_l:
                    player.stop()
                if event.key == pygame.K_n:
                    player.stop()
                if event.key == pygame.K_j:
                    player.stop()
                if event.key == pygame.K_b:
                    player.stop()

            #Really for testing pathfinding, pathfinding is really for monsters.
            if event.type == pygame.MOUSEBUTTONUP:
                pos = pygame.mouse.get_pos()
                player.follow_path(path_finder.get_path(player.get_pos(),pos),
                                   map_pix_size,
                                   pos)

            #Monsters follow every two seconds to cut down on pathfinding
            #Calculations
            if event.type == FOLLOW_EVENT:
                m_fact.monster_group_follow(player.get_pos())
                pygame.time.set_timer(FOLLOW_EVENT, 2000)

            #Attack every second which is kind of a lot still
            #Otherwise player would get hurt too fast or too slow.
            if event.type == M_ATTACK_EVENT:
                m_attacks = m_fact.monsters_attack(player.get_pos())
                player.set_check_attack(m_attacks)
                pygame.time.set_timer(M_ATTACK_EVENT,1000)

        #Move the player and then check for game end or picked up item.
        player_pos = player.move(collid_list,all_mobiles)
        lost = player.damaged()
        m_fact.move_monsters(all_mobiles)
        got_item = item_fact.is_picked_up()
        #For now just one item and if it is picked up the player wins.
        if got_item:
            end_text = []
            end_text.append('You Found the Scepter of Yendor and Won the Game!')
            end_text.append('To replay press r!')
            end_text.append('To quit press q!')
            end_text.append('To continue press Space Bar!')
            done = game_end(True,end_text,screen,map_tool)
            map_tool.map_move(0,0)
            player.stop()
            player.ranged_item = 3
            player.speed = 8
            player.dam_mod = 10
        elif(lost):
            end_text = []
            end_text.append('You perished!')
            end_text.append('To replay press r!')
            end_text.append('To quit press q!')
            done = game_end(False,end_text,screen,map_tool)
            
        if(map_tool.map_section_change(player_pos)):
            area = map_tool.get_area()
            m_fact.gen_monsters(area)
        
        player.is_moving(map_pix_size)
        all_mobiles.update(None,None)
        if m_attacks:
            m_attacks.update()
        all_sprites_list.draw(screen)
        
        clock.tick(25)
        pygame.display.flip()
        
    pygame.quit()
コード例 #2
0
ファイル: client.py プロジェクト: gjmiles/adventure_pygame
def main():
    """ Main Program """
    pygame.init()

    # Set the height and width of the screen
    size = [SCREEN_WIDTH, SCREEN_HEIGHT]
    screen = pygame.display.set_mode(size)

    pygame.display.set_caption("Dungeon Dreams Demo")

    # Create the player
    map_pix_size = 30

    # Create all the levels
    level_list = []
    #    level_list.append( Level_01(player) )

    # Set the current level
    current_level_no = 0
    current_level = 0
    #    current_level = level_list[current_level_no]

    active_sprite_list = pygame.sprite.Group()

    # Loop until the user clicks the close button.
    done = False

    # Used to manage how fast the screen updates
    clock = pygame.time.Clock()
    all_sprites_list = pygame.sprite.LayeredDirty()
    collid_list = pygame.sprite.LayeredDirty()
    mobiles_list = pygame.sprite.Group()
    m_attacks = pygame.sprite.Group()
    area = None
    image_files = glob.glob('HumanMage.PNG')
    hud = Hud(screen)
    player = Player(100, 100, image_files, hud)
    hud.display_player_stats(player.stats)
    player.set_all_sprites(all_sprites_list)
    screen_size = (screen.get_width(), screen.get_height())
    m_fact = Monster_Factory(area, collid_list, 50, screen_size,
                             all_sprites_list, player)
    map_tool = Map_Handler(screen, all_sprites_list, collid_list, player,
                           mobiles_list, m_fact, hud)
    map_tool.build_area()
    item_fact = map_tool.get_item_fact()

    shift_x = 0
    shift_y = 0

    all_mobiles = m_fact.get_mobiles_group()
    dam_mod = 1
    #init path finding...
    path_finder = a_star(collid_list, 50)
    player.group_add(all_mobiles)

    image_files = glob.glob('*.PNG')

    #init events for following and monsters, start at 3 seconds because
    #player needs a second or two catch bearings
    FOLLOW_EVENT = USEREVENT + 1
    M_ATTACK_EVENT = USEREVENT + 2
    pygame.time.set_timer(FOLLOW_EVENT, 3000)
    pygame.time.set_timer(M_ATTACK_EVENT, 3000)
    game_start = False
    #-------- Main Program Loop -----------
    while not done:

        #Probably would make a class just to handle
        #client events.
        #These handle the movements
        keys = pygame.key.get_pressed()
        if keys[pygame.K_h]:
            player.changespeed(-1, 0)
        if keys[pygame.K_l]:
            player.changespeed(1, 0)
        if keys[pygame.K_k]:
            player.changespeed(0, -1)
        if keys[pygame.K_j]:
            player.changespeed(0, 1)
        if keys[pygame.K_n]:
            player.changespeed(1, 1)
        if keys[pygame.K_b]:
            player.changespeed(-1, 1)
        if keys[pygame.K_y]:
            player.changespeed(-1, -1)
        if keys[pygame.K_u]:
            player.changespeed(1, -1)

        #More events, quit and attacks and stopping the player
        #when the button goes up.
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                done = True

            player.check_events(event)

            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_SPACE:
                    r_attack = player.ranged_attack(all_sprites_list, None,
                                                    player.r_attack_images,
                                                    dam_mod)
                    m_fact.set_check_attack(r_attack)

            if event.type == pygame.KEYUP:
                if event.key == pygame.K_h:
                    player.stop()
                if event.key == pygame.K_y:
                    player.stop()
                if event.key == pygame.K_k:
                    player.stop()
                if event.key == pygame.K_u:
                    player.stop()
                if event.key == pygame.K_l:
                    player.stop()
                if event.key == pygame.K_n:
                    player.stop()
                if event.key == pygame.K_j:
                    player.stop()
                if event.key == pygame.K_b:
                    player.stop()

            #Really for testing pathfinding, pathfinding is really for monsters.
            if event.type == pygame.MOUSEBUTTONUP:
                pos = pygame.mouse.get_pos()
                player.follow_path(path_finder.get_path(player.get_pos(), pos),
                                   map_pix_size, pos)

            #Monsters follow every two seconds to cut down on pathfinding
            #Calculations
            if event.type == FOLLOW_EVENT:
                m_fact.monster_group_follow(player.get_pos())
                pygame.time.set_timer(FOLLOW_EVENT, 2000)

            #Attack every second which is kind of a lot still
            #Otherwise player would get hurt too fast or too slow.
            if event.type == M_ATTACK_EVENT:
                m_attacks = m_fact.monsters_attack(player.get_pos())
                player.set_check_attack(m_attacks)
                pygame.time.set_timer(M_ATTACK_EVENT, 1000)

        #Move the player and then check for game end or picked up item.
        player_pos = player.move(collid_list, all_mobiles)
        lost = player.damaged()
        m_fact.move_monsters(all_mobiles)
        got_item = item_fact.is_picked_up()
        #For now just one item and if it is picked up the player wins.
        if got_item:
            end_text = []
            end_text.append(
                'You Found the Scepter of Yendor and Won the Game!')
            end_text.append('To replay press r!')
            end_text.append('To quit press q!')
            end_text.append('To continue press Space Bar!')
            done = game_end(True, end_text, screen, map_tool)
            map_tool.map_move(0, 0)
            player.stop()
            player.ranged_item = 3
            player.speed = 8
            player.dam_mod = 10
        elif (lost):
            end_text = []
            end_text.append('You perished!')
            end_text.append('To replay press r!')
            end_text.append('To quit press q!')
            done = game_end(False, end_text, screen, map_tool)

        if (map_tool.map_section_change(player_pos)):
            area = map_tool.get_area()
            m_fact.gen_monsters(area)

        player.is_moving(map_pix_size)
        all_mobiles.update(None, None)
        if m_attacks:
            m_attacks.update()
        all_sprites_list.draw(screen)

        clock.tick(25)
        pygame.display.flip()

    pygame.quit()