python - 当我希望它随每个实例而改变时,我的循环不断重复相同的值

标签 python loops oop while-loop

最近我的任务是创建一种游戏,其中有两个对象(例如,plane1、plane2),它们是“Airplanes”类的一部分

Airplanes 类应该有一个名为“shoot”的方法,该方法应该接受该类的对象作为其参数。该方法会从敌人身上夺走随机数量的生命值,并从射手身上夺走双倍随机生命值,这种情况应该会发生,直到其中一架飞机的生命值为零。我一切都井井有条,除了 while 循环在所有 10 个实例中保持打印相同数量的弹药和生命值,而且它永远不会降到 0,因为它始终保留第一个实例的值。

import random

class Airplane:
    def __init__(self, name, maxHp, maxAmmo,):
        self.name = name
        self.maxHp = maxHp
        self.hp = maxHp
        self.maxAmmo = maxAmmo
        self.ammo = maxAmmo

    def shoot(self, target):
        randomAmt = random.randrange(10, 25)
        damage = randomAmt
        target.hp = target.maxHp - damage
        self.ammo = self.maxAmmo - damage * 2
        counter = 1
        while counter <= 10:
            print(f"{counter}    {self.name} │ {self.maxAmmo}/{self.ammo} │ {self.maxHp}/{self.hp}  :  {target.name} │ {target.maxAmmo}/{target.ammo} │ {target.maxHp}/{target.hp}")
            counter+=1    
            
            
plane1 = Airplane(input("Enter name: "), 100, 250)
plane2 = Airplane(input("Enter name: "), 100, 250)


print(plane1.shoot(plane2))

最佳答案

您已在代码中调用了一次shoot 方法。 shoot 方法中的循环每次仅打印相同的信息,因为这就是编写代码的目的。您的循环不会重新触发拍摄。 两种选择:

  • 将 while 循环移到类外部以多次调用 shoot 方法。
  • 或者,在循环中的 print 语句之后,调用 self.shoot 重新触发拍摄。

关于python - 当我希望它随每个实例而改变时,我的循环不断重复相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74784788/

相关文章:

r - 优化 R 中的循环

Python - for 循环内的 if 和 else 且 count 不起作用

由类型创建的类的Python元类

python - 在 Python 中从 parent 那里访问 child 的 __dict__?

python - Python 中文件解析器的包装或继承

python - 在 tkinter python 中围绕光标绘制一个定义大小的圆圈

python - 如何删除以python 3中的特定元素开头的子列表?

python - 为什么 Tkinter 在打包滚动条时会卡住?

python - 静态文件的 "pip install"和 "setup.py install"有什么区别

function - 大括号的 Swift 行业标准