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()
代码使两个战士'山姆'和'保罗'互相战斗,直到他们的一个健康下降到0或低于0的攻击。 代码一直循环,直到一个战士死了,但我不明白两个战士是怎么轮到的,比如一个怎么攻击另一个,等等。。。 有人能给我解释一下代码是怎么写的吗?谢谢
从你的问题,听起来你是困惑的一切在你提供的示例代码
对于我的回答,我将集中在代码中与您过于宽泛的问题最相关的部分
代码的每一部分都在决定胜利者中扮演着自己的角色,然而
while
循环是这个程序的核心,在达到game over
场景之前保持一切正常运行while循环的第一步将首先让warrior1(又名Sam)和warrior2(又名Paul)对战,通过执行一些初始的数学运算来确定Sam会做多少攻击以及Paul会阻挡多少
一旦计算完成,程序将打印出一些语句来显示谁做了什么,如果Pauls health小于零,那么游戏就结束了如果不小于零,那么我们继续执行while语句的第2步
步骤2代码只是翻转角色。现在不是山姆进攻,而是保罗进攻,山姆防守。程序运行相同的数学来确定保罗攻击山姆的结果,如果山姆的生命值降到零以下,那么游戏就结束了,如果没有,我们回到第一步,从头开始看谁/如果有人赢了下一轮
一旦有人赢了,游戏就会打印
Game Over
,而中断线会停止while loop
,就是这样相关问题 更多 >
编程相关推荐