コード例 #1
0
def handle_keys():
    global key

    if GameState.game_state == 'playing':
        #movement keys
        if GameState.key.vk == libtcod.KEY_UP or GameState.key.vk == libtcod.KEY_KP8:
            player_move_or_attack(0, -1)
        elif GameState.key.vk == libtcod.KEY_DOWN or GameState.key.vk == libtcod.KEY_KP2:
            player_move_or_attack(0, 1)
        elif GameState.key.vk == libtcod.KEY_LEFT or GameState.key.vk == libtcod.KEY_KP4:
            player_move_or_attack(-1, 0)
        elif GameState.key.vk == libtcod.KEY_RIGHT or GameState.key.vk == libtcod.KEY_KP6:
            player_move_or_attack(1, 0)
        elif GameState.key.vk == libtcod.KEY_HOME or GameState.key.vk == libtcod.KEY_KP7:
            player_move_or_attack(-1, -1)
        elif GameState.key.vk == libtcod.KEY_PAGEUP or GameState.key.vk == libtcod.KEY_KP9:
            player_move_or_attack(1, -1)
        elif GameState.key.vk == libtcod.KEY_END or GameState.key.vk == libtcod.KEY_KP1:
            player_move_or_attack(-1, 1)
        elif GameState.key.vk == libtcod.KEY_PAGEDOWN or GameState.key.vk == libtcod.KEY_KP3:
            player_move_or_attack(1, 1)
        elif GameState.key.vk == libtcod.KEY_KP5 or GameState.key.vk == '.':
            pass  #do nothing ie wait for the monster to come to you
        else:
            #test for other keys
            key_char = chr(GameState.key.c)

            if key_char == 'g':
                #pick up an item
                for object in GameState.objects:  #look for an item in the player's tile
                    if object.x == GameState.player.x and object.y == GameState.player.y and GameState.player.floor == object.floor and object.item:
                        GameState.player.entity.Pick_Up(object)
                        break

            if key_char == 'f':
                #(F)ire your weapon.
                AttackingWeapons = []
                DefendingArmor = []

                AttackingTypes = []
                DefendingResistances = []

                x = BodyParts.Part()
                y = Equipment.RangedWeapon()

                for x in GameState.player.entity.parts:
                    if (isinstance(x,BodyParts.Part)):
                        y = x.currentItem
                        if isinstance(y, Equipment.RangedWeapon):
                            AttackingWeapons.append(x.currentItem)
                if len(AttackingWeapons) > 0:
                    GUI.message("Select a target to attack.")
                    target = target_monster(AttackingWeapons[0].weapon_Range)
                    if target != None:
                        GameState.player.entity.melee_attack_entity(target.entity)
                        GameState.player.move(0, 0)
                        GameState.fov_recompute = True
                else:
                    GUI.message("Cancelled")


            if key_char == 'i':
                #show the inventory; if an item is selected, use it
                chosen_item = GUI.inventory_menu('Press the key next to an item to use it, or any other to cancel.\n')
                if chosen_item is not None:
                    chosen_item.use()

            if key_char == 'd':
                #show the inventory; if an item is selected, drop it
                chosen_item = GUI.inventory_menu('Press the key next to an item to drop it, or any other to cancel.\n')
                if chosen_item is not None:
                    chosen_item.drop()

            if key_char == 'c':
                #show character information
                level_up_xp = cfg.LEVEL_UP_BASE + GameState.player.level * cfg.LEVEL_UP_FACTOR
                msgbox('Character Information\n\nLevel: ' + str(player.level) + '\nExperience: ' + str(GameState.player.fighter.xp) +
                       '\nExperience to level up: ' + str(level_up_xp) + '\n\nMaximum HP: ' + str(GameState.player.fighter.max_hp) +
                       '\nAttack: ' + str(GameState.player.fighter.power) + '\nDefense: ' + str(GameState.player.fighter.defense), cfg.CHARACTER_SCREEN_WIDTH)

            if key_char == '<':
                #go down stairs, if the player is on them
                if GameState.stairs.x == GameState.player.x and GameState.stairs.y == GameState.player.y:
                    next_level()

            return 'didnt-take-turn'