马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 jerryxjr1220 于 2017-8-24 09:57 编辑
鱼C论坛Python精英挑战赛第二季最后一期!感谢广大鱼油的热情参与!
本季挑战赛依旧会有精彩的题目供大家挑战,大量鱼币奖励等你赢取!
本期题目:RPG游戏之BOSS攻防战
小明在玩一款RPG游戏,里面有个BOSS相当厉害,小明打了好久一直没有过关。
然后小明注意到玩家和BOSS起始都是100 HP(血量不能超过100)。
BOSS的技能:
普通攻击,伤害15 HP;
致命一击,伤害25 HP;
斩杀,伤害45 HP;
回血,每回合开始自动回血3 HP
玩家的技能:
攻击,伤害10 HP;
搏命一击,伤害20 HP,同时自损 10 HP;
躲闪,完全回避BOSS攻击;
治疗,本回合回血30 HP,下两个回合每回合回血10 HP(回血Buff只能刷新,不能累加,即如果当前已有回血Buff,下回合再使用治疗,Buff也仅只保留2回合,不能累加到4回合)
现在已知BOSS的出招表boss_skill,请设计玩家的响应出招表生成程序gen_skill,使得在尽可能短的回合内击败BOSS
备注:若玩家和BOSS同时HP<=0,则判定玩家失败。
def gen_skill(boss_skill):
'''Your code here!'''
return player_skill
例如,boss_skill = ['致命一击', '致命一击', '斩杀', '致命一击', '斩杀', '致命一击', '致命一击', '斩杀', '普通攻击', '普通攻击']
如果,player_skill = ['攻击', '治疗', '搏命一击', '搏命一击', '攻击', '治疗', '搏命一击', '躲闪', '治疗', '攻击']
那么仅仅只过5回合,玩家就Game Over了。
boss_skill = ['斩杀', '斩杀', '致命一击', '致命一击', '普通攻击', '致命一击', '斩杀', '普通攻击', '斩杀', '致命一击']
player_skill = ['攻击', '攻击', '躲闪', '治疗', '攻击', '治疗', '躲闪', '躲闪', '躲闪', '躲闪']
那么最终的结果是平局,Boss HP: 100, Player HP: 45
测试技能:
boss_skill_1 = ['普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击']
boss_skill_2 = ['普通攻击', '普通攻击', '致命一击', '普通攻击', '普通攻击', '致命一击', '普通攻击', '普通攻击', '致命一击', '普通攻击', '普通攻击', '致命一击', '普通攻击', '普通攻击', '致命一击', '普通攻击', '普通攻击', '致命一击', '普通攻击', '普通攻击', '致命一击', '普通攻击', '普通攻击', '致命一击', '普通攻击', '普通攻击', '致命一击', '普通攻击', '普通攻击', '致命一击']
boss_skill_3 = ['普通攻击', '致命一击', '斩杀', '普通攻击', '致命一击', '斩杀', '普通攻击', '致命一击', '斩杀', '普通攻击', '致命一击', '斩杀', '普通攻击', '致命一击', '斩杀', '普通攻击', '致命一击', '斩杀', '普通攻击', '致命一击', '斩杀', '普通攻击', '致命一击', '斩杀', '普通攻击', '致命一击', '斩杀', '普通攻击', '致命一击', '斩杀']
boss_skill_4 = ['普通攻击', '致命一击', '普通攻击', '斩杀', '致命一击', '普通攻击', '致命一击', '普通攻击', '斩杀', '致命一击', '普通攻击', '致命一击', '普通攻击', '斩杀', '致命一击', '普通攻击', '致命一击', '普通攻击', '斩杀', '致命一击', '普通攻击', '致命一击', '普通攻击', '斩杀', '致命一击', '普通攻击', '致命一击', '普通攻击', '斩杀', '致命一击']
boss_skill_5 = ['致命一击', '普通攻击', '致命一击', '斩杀', '致命一击', '斩杀', '普通攻击', '致命一击', '斩杀', '普通攻击', '致命一击', '普通攻击', '致命一击', '斩杀', '致命一击', '斩杀', '普通攻击', '致命一击', '斩杀', '普通攻击', '致命一击', '普通攻击', '致命一击', '斩杀', '致命一击', '斩杀', '普通攻击', '致命一击', '斩杀', '普通攻击']
本期的题目是开放性命题,请设计合理的应对程序,程序运行正常,玩家最终获胜并且用的回合数最少的程序为佳。
我已经设计好了对战程序fight(boss_skill, gen_skill(boss_skill)),届时会以对战程序进行测试。
测试程序:boss_skill_4 = ['普通攻击', '致命一击', '普通攻击', '斩杀', '致命一击', '普通攻击', '致命一击', '普通攻击', '斩杀', '致命一击', '普通攻击', '致命一击', '普通攻击', '斩杀', '致命一击', '普通攻击', '致命一击', '普通攻击', '斩杀', '致命一击', '普通攻击', '致命一击', '普通攻击', '斩杀', '致命一击', '普通攻击', '致命一击', '普通攻击', '斩杀', '致命一击']
boss_skill_1 = ['普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击', '普通攻击']
boss_skill_2 = ['普通攻击', '普通攻击', '致命一击', '普通攻击', '普通攻击', '致命一击', '普通攻击', '普通攻击', '致命一击', '普通攻击', '普通攻击', '致命一击', '普通攻击', '普通攻击', '致命一击', '普通攻击', '普通攻击', '致命一击', '普通攻击', '普通攻击', '致命一击', '普通攻击', '普通攻击', '致命一击', '普通攻击', '普通攻击', '致命一击', '普通攻击', '普通攻击', '致命一击']
boss_skill_5 = ['致命一击', '普通攻击', '致命一击', '斩杀', '致命一击', '斩杀', '普通攻击', '致命一击', '斩杀', '普通攻击', '致命一击', '普通攻击', '致命一击', '斩杀', '致命一击', '斩杀', '普通攻击', '致命一击', '斩杀', '普通攻击', '致命一击', '普通攻击', '致命一击', '斩杀', '致命一击', '斩杀', '普通攻击', '致命一击', '斩杀', '普通攻击']
boss_skill_3 = ['普通攻击', '致命一击', '斩杀', '普通攻击', '致命一击', '斩杀', '普通攻击', '致命一击', '斩杀', '普通攻击', '致命一击', '斩杀', '普通攻击', '致命一击', '斩杀', '普通攻击', '致命一击', '斩杀', '普通攻击', '致命一击', '斩杀', '普通攻击', '致命一击', '斩杀', '普通攻击', '致命一击', '斩杀', '普通攻击', '致命一击', '斩杀']
player_skill_1 = ['搏命一击', '搏命一击', '搏命一击', '治疗', '搏命一击', '治疗', '搏命一击', '搏命一击', '治疗', '搏命一击']
player_skill_2 = ['搏命一击', '搏命一击', '治疗', '搏命一击', '搏命一击', '治疗', '治疗', '搏命一击', '治疗', '搏命一击', '搏命一击']
player_skill_3 = ['搏命一击', '搏命一击', '躲闪', '治疗', '搏命一击', '躲闪', '治疗', '搏命一击', '躲闪', '治疗', '搏命一击', '躲闪', '治疗', '搏命一击', '躲闪', '治疗', '搏命一击', '搏命一击']
player_skill_4 = ['搏命一击', '搏命一击', '治疗', '躲闪', '搏命一击', '治疗', '搏命一击', '治疗', '躲闪', '搏命一击', '治疗', '搏命一击', '搏命一击']
player_skill_5 = ['搏命一击', '搏命一击', '治疗', '躲闪', '搏命一击', '躲闪', '治疗', '搏命一击', '躲闪', '治疗', '搏命一击', '治疗', '搏命一击', '搏命一击']
def fight(boss, player):
skill = {"普通攻击":15, "致命一击":25, "斩杀":45, "攻击":10, "搏命一击":20}
hp_boss = 100
hp_player = 100
buff = []
for r in range(len(boss)):
b=boss[r]
p=player[r]
if buff:
hp_player = min(hp_player+buff.pop(0), 100)
hp_boss = min(hp_boss+3, 100)
if p=='治疗':
hp_player = min(hp_player+30, 100)
buff = [10,10]
hp_player -= skill[b]
elif p=='躲闪':
print('Round %d: Boss HP: %d, Player HP: %d' % (r+1, hp_boss, hp_player))
continue
elif p=='攻击':
hp_player -= skill[b]
hp_boss -= skill[p]
else:
hp_player -= skill[b]
hp_player -= 10
hp_boss -= skill[p]
print('Round %d: Boss HP: %d, Player HP: %d' % (r+1, hp_boss, hp_player))
if hp_player<=0:
return 'Player Lose! Round: %d' % (r+1)
if hp_boss <=0:
return 'Player Win! Round: %d' % (r+1)
return 'Draw! Boss HP: %d, Player HP: %d' % (hp_boss, hp_player)
for i in range(1,6):
print(fight(eval('boss_skill_'+str(i)), eval('player_skill_'+str(i))))
比赛截止期限:8月24日24时。
@冬雪雪冬 @SixPy @~风介~ @小甲鱼 |