Python: 每日一题 50
- 2017-11-27 13:37:00
- 六月
- 来源:
- http://bbs.fishc.com/thread-87461-1-1.html
- 转贴 623
虽然我也知道大佬都比较偏爱算法一类以思考为主的题目,但是毕竟这个系列总体是偏向比较基础的题库。
所以今天我也给各位出个游戏题,这样可以给各位和我一样的新手更多的参考。如果你熟悉类,这题不会很难,如果你不熟悉类,可以通过这题来熟悉。Let's go.
写一个小游戏的程序:两名武士决斗,返回出胜利者的名字。
要求:两名武士轮流攻击对方,先杀死对方的胜者。而死亡取决于其health, health<=0时死亡。
每个武士为一个Fighter实例。(需要有名字(name),生命值(health),伤害(damage_per_attack))
主函数为:declare_winner(武士1,武士2,先攻击者)
返回值为:获胜者。
示例:
- declare_winner(Fighter("Lew", 10, 2), Fighter("Harry", 5, 4), "Lew") => "Lew" # 此处函数中最后一个参数为先攻击者,而返回值为胜利者。
- Lew attacks Harry; Harry now has 3 health. # 这里是整个游戏的攻击过程,这也需要体现出来。
- Harry attacks Lew; Lew now has 6 health.
- Lew attacks Harry; Harry now has 1 health.
- Harry attacks Lew; Lew now has 2 health.
- Lew attacks Harry: Harry now has -1 health and is dead. Lew wins.
好了,如果有说的不清楚的地方,请留言。
- class Fighter(object):
- def __init__(self, name, health, damage_per_attack):
- self.name = name
- self.health = health
- self.damage_per_attack = damage_per_attack
- def attack(attacker, defender):
- defender.health -= attacker.damage_per_attack
- if defender.health > 0:
- print('{0} attacks {1}; {2} now has {3} health.'.format(attacker.name, defender.name, defender.name, defender.health))
- else:
- print('{0} attacks {1}; {2} now has {3} health and is dead.{4} is wins.'.format(attacker.name, defender.name, defender.name, defender.health, attacker.name))
- return attacker.name
- def declare_winner(fighter1, fighter2, first_attacker):
- if fighter1.name == first_attacker:
- attacker = fighter1
- defender = fighter2
- else:
- attacker = fighter2
- defender = fighter1
- while fighter1.health > 0 and fighter2.health > 0:
- result = attack(attacker, defender)
- if result:
- return result
- attacker, defender = defender, attacker
发表评论