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。 代码保持循环,直到一个战士死亡,但我不明白两个战士如何轮流,如一个人如何攻击,然后是另一个,等等...... 有人可以解释一下我的代码吗?谢谢
答案 0 :(得分:0)
从您提出的问题来看,您对所提供的示例代码中的所有内容感到困惑。
对于我的回答,我将重点关注代码中最相关的部分,以解决您过于宽泛的问题。
代码的每个部分都在确定胜利者方面发挥作用,但是while
循环是该程序的核心,关于在达到game over
场景之前保持一切。
while循环的第1步将首先通过执行一些初始数学确定Sam将会做多少攻击以及保罗将阻止多少次来使warrior1又名Sam对抗warrior2又名Paul。
一旦完成数学运算,程序将打印出一些语句,以显示谁做了什么,如果Pauls的健康状况小于零则游戏结束,如果没有,那么我们继续执行while语句的第2步。
第2步,代码只是翻转角色。而不是萨姆攻击它现在是保罗攻击和萨姆捍卫。该程序运行相同的数学运算来确定保罗攻击萨姆的结果,如果萨姆的HP低于零则游戏结束,如果不是,我们回到步骤1并开始全面检查是否有人赢得下一轮。
一旦有人获胜,那么游戏将打印Game Over
,并且中断线将停止while loop
,就是这样。