用户:
可口玉米卷查看: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()
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
评论