c

codeye

V1

2022/10/10阅读:19主题:默认主题

空战游戏计分

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

创建一个函数,在两个战斗机之间的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的调用基础技巧
  • while循环基本用法
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 描述每次攻击消耗双方的油料

注意,每次攻击双方都要消耗油料,节能表现更优的战机有获胜的机会增大。

分类:

后端

标签:

后端

作者介绍

c
codeye
V1