描述 游戏算法逻辑原理基础知识
创建一个函数,在两个战斗机之间的PK,返回胜利者的名字。
每个战士轮流攻击对方,谁先杀死对方,谁就胜利了。 死亡被定义为健康状况<=0。
每个战士将是一个战斗机对象/实例。请看下面你选择的语言中的战斗机类。
健康状况和每次攻击伤害(damage_per_attack
for python)都将是大于0的整数,你可以改变战斗机对象。
你的函数还接收第三个参数,一个字符串,包含首先攻击的战斗机的名字。
例子。
declare_winner(Fighter("Lew", 10, 2),
Fighter("Harry", 5, 4),
"Lew" ) => "Lew"
Lew攻击Harry;Harry现在有3点健康。 哈利攻击卢;卢现在有6点生命值。 Lew攻击Harry;Harry现在有1点健康。 哈利攻击卢;卢现在有2点健康。 Lew攻击Harry:Harry 现在有-1生命值,Harry已经失败,Lew赢了。
主函数调用的类Fighter(object)
定义如下
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 __str__(self): return "Fighter({}, {}, {})".format(self.name, self.health, self.damage_per_attack)
__repr__=__str__
大喵点评:
class
的调用基础技巧 def declare_winner(fighter1, fighter2, first_attacker):
while fighter1.health > 0 and fighter2.health > 0:
if fighter1.name == first_attacker:
fighter2.health -= fighter1.damage_per_attack
first_attacker = fighter2.name
elif fighter2.name == first_attacker:
fighter1.health -= fighter2.damage_per_attack
first_attacker = fighter1.name
return fighter1.name if fighter1.health > 0 else fighter2.name
更加简洁的写法
def declare_winner(fighter1, fighter2, first_attacker):
cur, opp = (fighter1, fighter2) if first_attacker == fighter1.name else (fighter2, fighter1)
while cur.health > 0:
opp.health -= cur.damage_per_attack
cur, opp = opp, cur
return opp.name
课后作业
拓展学习class
的升级任务: 增加一个维度描述双方战机的战斗力,如油耗:
添加一个参数:oil
描述战机的开始空战前油有多少
添加一个参数:consume_per_attack
描述每次攻击消耗双方的油料
注意,每次攻击双方都要消耗油料,节能表现更优的战机有获胜的机会增大。
本文由 mdnice 多平台发布