有人能给我解释一下每一段代码吗?我不明白它是怎么工作的

2024-09-30 22:18:05 发布

您现在位置:Python中文网/ 问答频道 /正文

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的攻击。 代码一直循环,直到一个战士死了,但我不明白两个战士是怎么轮到的,比如一个怎么攻击另一个,等等。。。 有人能给我解释一下代码是怎么写的吗?谢谢


Tags: tonameselfgamedefrandomoverprint
1条回答
网友
1楼 · 发布于 2024-09-30 22:18:05

从你的问题,听起来你是困惑的一切在你提供的示例代码

对于我的回答,我将集中在代码中与您过于宽泛的问题最相关的部分

代码的每一部分都在决定胜利者中扮演着自己的角色,然而while循环是这个程序的核心,在达到game over场景之前保持一切正常运行

while循环的第一步将首先让warrior1(又名Sam)和warrior2(又名Paul)对战,通过执行一些初始的数学运算来确定Sam会做多少攻击以及Paul会阻挡多少

一旦计算完成,程序将打印出一些语句来显示谁做了什么,如果Pauls health小于零,那么游戏就结束了如果不小于零,那么我们继续执行while语句的第2步

步骤2代码只是翻转角色。现在不是山姆进攻,而是保罗进攻,山姆防守。程序运行相同的数学来确定保罗攻击山姆的结果,如果山姆的生命值降到零以下,那么游戏就结束了,如果没有,我们回到第一步,从头开始看谁/如果有人赢了下一轮

一旦有人赢了,游戏就会打印Game Over,而中断线会停止while loop,就是这样

相关问题 更多 >