猫史档案馆


【python】第一个作品,多多包涵,要用新版海龟!!!

用户:可口玉米卷可口玉米卷查看:0 回复:3 评论:0 创建时间:2024-08-07T18:05:23


import random

 

#背景

 

 

def back_():

    print('游戏开始')

    print('欢迎来到旧日之海,这里的深处有一座古城,你决定前往探索')

 

#查询——职业

def find_job(hero_list, job):

    for hero in hero_list:

        if hero.get(job):  # 假设每个角色字典中都有相应的职业键

            print(f'编号:{hero["num"]}, 姓名:{hero["name"]}')

 

#查询--名字

def find_name(hero_list, name_like):

    flag = False

    for x in hero_list:

        if name_like in x.get('name'):

            print('编号:%s,姓名:%s' % (x.get('num'), x.get('name')))

            flag = True

    if not flag:

        print('没有找到对应的角色。')

 

#boss列表

boss_list = [{'boss_num': 1, 'boss_name': '特瓦林(暴风的领主)', 'place': '风暴下的凌乱之地', 'hp': 150, 'dp': 10, 'max': 80, 'min': 40}, {

    'boss_num': 2, 'boss_name': '旋涡之魔神(谢安第斯的霸主)', 'place': '旋涡之下的隐蔽之处', 'hp': 200, 'dp': 12, 'max': 90, 'min': 50},

            {'boss_num': 3, 'boss_name': '怒雷树(电流横蹿的大家伙)', 'place': '酥酥麻麻的海底', 'hp': 250, 'dp': 14, 'max': 110, 'min': 65}]

 

 

#选择角色

def chose_hero(hero_list):

    print('请输入角色武器类型(单手剑,法器,弓箭)或角色姓名查找角色列表,输入角色编号选择角色。')

    for hero in hero_list:

        print(f'编号:{hero["num"]}, 姓名:{hero["name"]},技能:{hero["skills"]},技能伤害:{hero["skills_hp"]}生命值:{hero["hp"]},防御力:{hero["dp"]},每个技能所需魔法值:{hero["skills_mp"]},初始魔法值:{hero["mp"]}。')

    print('选择后不能更改,请谨慎选择!!!')    

    while True:

        ni = input('请输入')

        if ni == '1' or ni == '2'or ni=='3':

            hero = hero_list[int(ni) - 1]

            return hero

            print(f'你选择了{hero.get("name")}')

            break

        elif ni == "单手剑":

            find_job(hero_list, 'is_warrior')

            continue

        elif ni == '法器':

            find_job(hero_list, 'is_mage')

            continue

        elif ni == '弓箭':

            find_job(hero_list, 'is_bow')

            continue

        else:

            find_name(hero_list, ni)

            continue

 

#玩家和一个boss战斗

 

def fight(hero, boss):

    print(f'你来到了{boss["place"]}。这里有{boss["boss_name"]}看守着。')

    skills = hero['skills']

    skills_hp = hero['skills_hp']

    hp_player = hero['hp']

    name_boss = boss['boss_name']

    hp_boss = boss['hp']

    boss_num = boss['boss_num']  # 修正键名

    boss_dp=boss['dp']

    dp_player=hero['dp']

    player_mp=hero['mp']

    skills_mp=hero['skills_mp']

    while hp_boss > 0 and hp_player > 0:  # 只有当boss和玩家都活着时继续战斗

        print('快输入数字攻击它!')

        for i in range(len(skills)):

            print(f'输入{i+1},消耗{skills_mp[i]}点魔法值释放技能:{skills[i]}')

        try:

            input_ni = int(input('选择技能:'))

            if input_ni > 0 and input_ni <= len(skills):  # 检查用户输入是否有效

                if player_mp>skills_mp[input_ni-1]:

                    skill_index = input_ni - 1

                    skill_damage = skills_hp[skill_index]

                    hp_boss+=boss_dp

                    hp_boss -= skill_damage

                    player_mp-=skills_mp[input_ni-1]

                    print(f'你使用{skills[skill_index]}击中了{name_boss},造成了{skill_damage-boss_dp}点伤害。{name_boss}剩余血量{hp_boss},消耗了{skills_mp[input_ni-1]}点魔法值。 ')

                    if hp_boss <= 0:

                        hp_boss=0

                        print(f'恭喜你!击败了{name_boss}!')

                        hero['hp']=hp_player+boss_num * 100  # 更新玩家血量,这里不需要在字典中更新

                        print(f'奖励你{boss_num*100}的血量')

                        print(f'奖励你20点魔法值!')

                        player_mp+=20

                        print('*'*50)

                        return True

                    else:

                        at_boss = random.randint(boss['min'], boss['max'])

                        at_boss-=dp_player

                        hp_player -= at_boss

                        if hp_player < 0:

                            hp_player = 0

                        player_mp+=10

                        print('魔力值补充10点')

                        print(f'愤怒的{name_boss}进行了反击,你的防御抵挡了{dp_player}点伤害,boss对你造成了{at_boss}点伤害,你当前剩余血量{hp_player},剩余魔法值{player_mp}。')                    

                        if hp_player == 0:

                            return False

                else:

                    print('魔法值不足!')

            else:

                print('无效的选择,请选择1到技能总数之间的数字。')

        except ValueError:

            print('请输入一个有效的数字。')

 

    return False  # 如果退出循环,返回False表示战斗失败

#战斗过程

def fight_all_boss(hero, boss_list):

    for boss in boss_list:

        if not fight(hero, boss):

            print('很遗憾,你没能探索古城。')

            break

 

def main():

    back_()

    

    hero_list = [{'num':1, 'name': '影', 'hp': 114,'dp': 10, 'skills': ['斩杀', '神凝', '无想'],

                  'skills_hp':[random.randint(28, 38), random.randint(59, 73), random.randint(80, 109)], 'is_warrior':True, 'is_mage':False, 'is_bow':False,

                 'skills_mp':[0,6,20],'mp':30},

                {'num':2, 'name': '芙卡洛斯', 'hp': 124,'dp': 11, 'skills': ['幽静', '谢幕', '狂欢'],

                  'skills_hp':[random.randint(21, 33), random.randint(54, 69), random.randint(80, 139)], 'is_warrior':True, 'is_mage':False, 'is_bow':False,

                'skills_mp':[0,6,20],'mp':30},

                {'num':3, 'name': '艾洛伊', 'hp': 120,'dp': 12, 'skills': ['团子', '神射手', '冰冻箭'],

                  'skills_hp':[random.randint(20, 44), random.randint(59, 70), random.randint(78, 149)], 'is_warrior':False, 'is_mage':False, 'is_bow':True,

                'skills_mp':[0,8,23],'mp':32}]

    hero=chose_hero(hero_list)

    fight_all_boss(hero, boss_list)

    

main()


回复

上一页1 页 / 共 1下一页
peTerpeTer

编的可以

 

点赞0


评论


贺鸣Herman贺鸣Herman

《“喵”》

点赞0


评论


code猫的code猫的

import random

# Background
def back_():
    print('游戏开始')
    print('欢迎来到旧日之海,这里的深处有一座古城,你决定前往探索')

# Query by profession
def find_job(hero_list, job):
    for hero in hero_list:
        if hero.get(job):
            print(f'编号:{hero["num"]}, 姓名:{hero["name"]}')

# Query by name
def find_name(hero_list, name_like):
    flag = False
    for hero in hero_list:
        if name_like in hero.get('name'):
            print(f'编号:{hero.get("num")}, 姓名:{hero.get("name")}')
            flag = True
    if not flag:
        print('没有找到对应的角色。')

# Boss list
boss_list = [
    {'boss_num': 1, 'boss_name': '特瓦林(暴风的领主)', 'place': '风暴下的凌乱之地', 'hp': 150, 'dp': 10, 'max': 80, 'min': 40},
    {'boss_num': 2, 'boss_name': '旋涡之魔神(谢安第斯的霸主)', 'place': '旋涡之下的隐蔽之处', 'hp': 200, 'dp': 12, 'max': 90, 'min': 50},
    {'boss_num': 3, 'boss_name': '怒雷树(电流横蹿的大家伙)', 'place': '酥酥麻麻的海底', 'hp': 250, 'dp': 14, 'max': 110, 'min': 65}
]

# Choose hero
def chose_hero(hero_list):
    print('请输入角色武器类型(单手剑,法器,弓箭)或角色姓名查找角色列表,输入角色编号选择角色。')
    for hero in hero_list:
        print(f'编号:{hero["num"]}, 姓名:{hero["name"]}, 技能: {hero["skills"]}, 技能伤害:{hero["skills_hp"]}, 生命值:{hero["hp"]}, 防御力:{hero["dp"]}, 每个技能所需魔法值:{hero["skills_mp"]}, 初始魔法值:{hero["mp"]}.')

    print('选择后不能更改,请谨慎选择!!!')    

    while True:
        ni = input('请输入:')
        if ni in ['1', '2', '3']:
            hero = hero_list[int(ni) - 1]
            print(f'你选择了{hero.get("name")}')
            return hero
        elif ni == "单手剑":
            find_job(hero_list, 'is_warrior')
        elif ni == '法器':
            find_job(hero_list, 'is_mage')
        elif ni == '弓箭':
            find_job(hero_list, 'is_bow')
        else:
            find_name(hero_list, ni)

# Player vs Boss battle
def fight(hero, boss):
    print(f'你来到了{boss["place"]}。这里有{boss["boss_name"]}看守着。')
    
    skills = hero['skills']
    skills_hp = hero['skills_hp']
    hp_player = hero['hp']
    name_boss = boss['boss_name']
    hp_boss = boss['hp']
    boss_dp = boss['dp']
    dp_player = hero['dp']
    player_mp = hero['mp']
    skills_mp = hero['skills_mp']

    while hp_boss > 0 and hp_player > 0:  # Continue while both are alive
        print('快输入数字攻击它!')
        for i in range(len(skills)):
            print(f'输入{i + 1}, 消耗{skills_mp[i]}点魔法值释放技能:{skills[i]}')

        try:
            input_ni = int(input('选择技能:'))
            if 1 <= input_ni <= len(skills):  # Validate input
                if player_mp >= skills_mp[input_ni - 1]:
                    skill_index = input_ni - 1
                    skill_damage = skills_hp[skill_index]
                    hp_boss -= skill_damage

                    player_mp -= skills_mp[input_ni - 1]
                    print(f'你使用{skills[skill_index]}击中了{name_boss},造成了{skill_damage}点伤害。')

                    if hp_boss <= 0:
                        hp_boss = 0
                        print(f'恭喜你!击败了{name_boss}!')
                        hero['hp'] += boss['boss_num'] * 100  # Update player hp
                        print(f'你获得了{boss["boss_num"] * 100}点生命值奖励!')
                        print('奖励你20点魔法值!')
                        player_mp += 20
                        print('*' * 50)
                        return True
                    else:
                        at_boss = random.randint(boss['min'], boss['max']) - dp_player
                        hp_player -= max(at_boss, 0)  # Ensure hp_player doesn't go negative
                        player_mp += 10  # Recover magic
                        print('魔力值补充10点')
                        print(f'愤怒的{name_boss}进行了反击,你的防御抵挡了{dp_player}点伤害,boss对你造成了{max(at_boss, 0)}点伤害,你当前剩余血量{hp_player},剩余魔法值{player_mp}。')
                        
                        if hp_player <= 0:
                            print('你已被击败!')
                            return False
                else:
                    print('魔法值不足!')
            else:
                print('无效的选择,请选择1到技能总数之间的数字。')

        except ValueError:
            print('请输入一个有效的数字。')

    return False  # End of the fight

# Fighting all bosses
def fight_all_boss(hero, boss_list):
    for boss in boss_list:
        if not fight(hero, boss):
            print('很遗憾,你没能探索古城。')
            break

def main():
    back_()

    # List of heroes
    hero_list = [
        {'num': 1, 'name': '影', 'hp': 114, 'dp': 10, 'skills': ['斩杀', '神凝', '无想'],
         'skills_hp': [random.randint(28, 38), random.randint(59, 73), random.randint(80, 109)], 'is_warrior': True, 'is_mage': False, 'is_bow': False,
         'skills_mp': [0, 6, 20], 'mp': 30},
        {'num': 2, 'name': '芙卡洛斯', 'hp': 124, 'dp': 11, 'skills': ['幽静', '谢幕', '狂欢'],
         'skills_hp': [random.randint(21, 33), random.randint(54, 69), random.randint(80, 139)], 'is_warrior': True, 'is_mage': False, 'is_bow': False,
         'skills_mp': [0, 6, 20], 'mp': 30},
        {'num': 3, 'name': '艾洛伊', 'hp': 120, 'dp': 12, 'skills': ['团子', '神射手', '冰冻箭'],
         'skills_hp': [random.randint(20, 44), random.randint(59, 70), random.randint(78, 149)], 'is_warrior': False, 'is_mage': False, 'is_bow': True,
         'skills_mp': [0, 8, 23], 'mp': 32}
    ]

    hero = chose_hero(hero_list)
    fight_all_boss(hero, boss_list)

if __name__ == "__main__":
    main()

点赞0


评论