有人可以向我解释每一段代码我不明白它是如何工作的

时间:2017-08-28 15:45:08

标签: python python-2.7 class

import random
import math

class Warrior:

    def __init__(self, name="Warrior", health=0, attkMax=0, blockMax=0):
        self.name = name
        self.health = health
        self.attkMax = attkMax
        self.blockMax = blockMax

    def attack(self):
        attkAmt = self.attkMax * (random.random() + .5)
        return attkAmt

    def block(self):
        blockAmt = self.blockMax * (random.random() + .5)

class Battle:

    def startFight(self, warrior1, warrior2):

        while True:
        if self.getAttackResult(warrior1, warrior2) == "Game Over":
            print ("Game Over")
            break
        elif self.getAttackResult(warrior2, warrior1) == "Game Over":
            print ("Game Over")
            break

    @staticmethod
    def getAttackResult(warriorA, warriorB):

    warriorAAttkAmt = warriorA.attack()

    warriorBBlockAmt = warriorB.block()

    damage_to_warriorB = math.ceil(warriorAAttkAmt - warriorBBlockAmt)

    warriorB.health = warriorB.health - damage_to_warriorB

    print ("{} attacks {} and deals {} damage".format(warriorA.name, warriorB.name, damage_to_warriorB))

    print ("{} is down to {} health".format(warriorB.name, warriorB.health))

    if warriorB.health <= 0:
        print("{} has died and {} is Victorious".format(warriorB.name, warriorA.name))
        return "Game Over"
    else:
        return "Fight Again"

def main():
    Sam = Warrior("Sam", 50, 20, 10)
    Paul = Warrior("Paul", 50, 20, 10)

    battle = Battle()

    battle.startFight(Sam, Paul)

main()

该代码使两个战士的'Sam'和'Paul'互相争斗,直到他们的一个健康状况在攻击中降至0或低于0。 代码保持循环,直到一个战士死亡,但我不明白两个战士如何轮流,如一个人如何攻击,然后是另一个,等等...... 有人可以解释一下我的代码吗?谢谢

1 个答案:

答案 0 :(得分:0)

从您提出的问题来看,您对所提供的示例代码中的所有内容感到困惑。

对于我的回答,我将重点关注代码中最相关的部分,以解决您过于宽泛的问题。

代码的每个部分都在确定胜利者方面发挥作用,但是while循环是该程序的核心,关于在达到game over场景之前保持一切。

while循环的第1步将首先通过执行一些初始数学确定Sam将会做多少攻击以及保罗将阻止多少次来使warrior1又名Sam对抗warrior2又名Paul。

一旦完成数学运算,程序将打印出一些语句,以显示谁做了什么,如果Pauls的健康状况小于零则游戏结束,如果没有,那么我们继续执行while语句的第2步。

第2步,代码只是翻转角色。而不是萨姆攻击它现在是保罗攻击和萨姆捍卫。该程序运行相同的数学运算来确定保罗攻击萨姆的结果,如果萨姆的HP低于零则游戏结束,如果不是,我们回到步骤1并开始全面检查是否有人赢得下一轮。

一旦有人获胜,那么游戏将打印Game Over,并且中断线将停止while loop,就是这样。