鱼C论坛

 找回密码
 立即注册
查看: 6681|回复: 55

[技术交流] 鱼C论坛Python精英挑战赛(第二季05期)

[复制链接]
发表于 2017-8-21 01:10:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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 @~风介~ @小甲鱼

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
致年轻的我们 + 5 + 5 + 3 热爱鱼C^_^

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-8-21 07:30:28 | 显示全部楼层
沙发占楼,先思考再贴程序
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-21 08:38:44 | 显示全部楼层
本帖最后由 gunjang 于 2017-8-21 08:48 编辑

问下boss的回血回合是几次,还是一直就是回血中。。
玩家的回血次数是30+10+10,如果第二次也回血,第二次是40还是30次。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-21 09:30:17 | 显示全部楼层
gunjang 发表于 2017-8-21 08:38
问下boss的回血回合是几次,还是一直就是回血中。。
玩家的回血次数是30+10+10,如果第二次也回血,第二次 ...

Boss回血无回合限制,每回合开始就会回5 HP。
玩家第一次使用治疗,马上就会回30 HP,在下2个回合内,每回合再回10 HP。
如果紧接着下一回合又使用治疗,则回血30HP+10HP(上一次触发的Buff),并在下2回合内,每回合回10HP。
再下一回合,如果不使用治疗,则回血10HP(第2次治疗触发的Buff,由于Buff不能累加,所以第一次触发的Buff就无效了)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-21 09:47:29 | 显示全部楼层
gunjang 发表于 2017-8-21 08:38
问下boss的回血回合是几次,还是一直就是回血中。。
玩家的回血次数是30+10+10,如果第二次也回血,第二次 ...

boss自动回血改成3 HP了,自动回血太高,回合太长了,关键是知道如何应对这个机制就可以了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-21 11:44:59 | 显示全部楼层
jerryxjr1220 发表于 2017-8-21 09:47
boss自动回血改成3 HP了,自动回血太高,回合太长了,关键是知道如何应对这个机制就可以了。

收到
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-21 11:47:52 | 显示全部楼层
占楼,目测我这种小白只能用一堆if
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-21 11:50:05 | 显示全部楼层
怪物每回合回血机制可以叠加吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-21 11:54:32 | 显示全部楼层
还有boss的技能前两个有点累赘吧,,,一直斩杀就行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-21 12:02:07 | 显示全部楼层
新手·ing 发表于 2017-8-21 11:54
还有boss的技能前两个有点累赘吧,,,一直斩杀就行了

要是Boss把你虐得死去活来,根本没可能赢,这游戏谁还要玩

Boss的大招都不敢连续放,不然你都没赢的可能。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-21 12:03:01 | 显示全部楼层
新手·ing 发表于 2017-8-21 11:50
怪物每回合回血机制可以叠加吗

不能叠加,可以叠加的话,Boss就杀不死了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-21 12:05:20 | 显示全部楼层
新手·ing 发表于 2017-8-21 11:47
占楼,目测我这种小白只能用一堆if

条件状态判断肯定是要用到的,关键是你这个if该怎么写?

期待你的解答。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-21 12:11:07 | 显示全部楼层
jerry,你的测试数据中,怪物没有使用过回血
我是不是可以不考虑回血了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-21 12:17:59 | 显示全部楼层
新手·ing 发表于 2017-8-21 12:11
jerry,你的测试数据中,怪物没有使用过回血
我是不是可以不考虑回血了

有回血的,回血不是主动技能,不需要释放,每回合Boss会自动回血3 HP。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-21 12:25:48 | 显示全部楼层
jerryxjr1220 发表于 2017-8-21 12:17
有回血的,回血不是主动技能,不需要释放,每回合Boss会自动回血3 HP。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-21 14:36:31 | 显示全部楼层
jerryxjr1220 发表于 2017-8-21 12:17
有回血的,回血不是主动技能,不需要释放,每回合Boss会自动回血3 HP。

这个怪物太可怕了。。。目测杀死的时间会很长。。。难怪测试都要30回合以上
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-21 15:50:56 | 显示全部楼层
想了一中午,最后的结论:Jerry,做一个鱼C初级挑战赛吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-21 16:41:59 | 显示全部楼层
新手·ing 发表于 2017-8-21 15:50
想了一中午,最后的结论:Jerry,做一个鱼C初级挑战赛吧

跟着我的【每天进步一点点】系列做呀,里面的题目都是初级的,面向新手的。

你可以先看题目,不要看我的解答,做完以后可以和我的解答对比,看看有没有可以改进的地方。

这样你才能从中学到东西。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-21 18:34:16 | 显示全部楼层
不说明谁先手么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-21 19:08:54 | 显示全部楼层
GB18030 发表于 2017-8-21 18:34
不说明谁先手么

回合制的,同一回合内双方轮流各执行一次,然后回合结束时统一结算,如果玩家和boss血量同时降为0,则判定玩家输。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 14:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表