空战游戏计分

2022-10-10  本文已影响0人  Python_Camp

描述
游戏算法逻辑原理基础知识

创建一个函数,在两个战斗机之间的PK,返回胜利者的名字。

每个战士轮流攻击对方,谁先杀死对方,谁就胜利了。
死亡被定义为健康状况<=0。

每个战士将是一个战斗机对象/实例。请看下面你选择的语言中的战斗机类。

健康状况和每次攻击伤害(damage_per_attackfor 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__

大喵点评:

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多平台发布

上一篇下一篇

猜你喜欢

热点阅读