2017-09-07 45 views
2
while jogador1_hp > 30: 
    enemy1_atk = random.randrange(1, 250) 
    enemy1 = Enemy1(enemy1_atk) 
    enemy1_atkk = enemy1.getAttk() 
    jogador1_hp = jogador1_hp - enemy1_atkk 

    if jogador1_hp <= 30: 
     jogador1_hp = 30 

    print("You got hit and you lost ", enemy1_atkk, " hp. Your HP its now", jogador1_hp) 

    if jogador1_hp > 30: 
     continue 

    print("Gods protected you by teleporting you to the nearest INN") 
    break 

在本练习中,我想创建一个“敌人”,并且我希望他的攻击在每次攻击时都是随机的。如果我在while循环中创建敌方对象,每次循环它都会创建一个新对象,或者它会再次创建同一个对象?如何更改对象的参数而无需创建新对象?

有没有办法在循环之外创建对象,并且每次循环时仍然能够改变他的“攻击”?

编辑:这是我的敌人类

class Enemy1: 
    def __init__(self, atkp): 
     self.atkp = atkp 

    def getAttk(self): 
     return self.atkp 

EDIT2:谢谢您的答复,我设法解决它。现在是这样的:

class Enemy1: 
    def __init__(self, atkp): 
     self.atkp = atkp 




jogador1 = Player1(300) 
jogador1_hp = jogador1.getBHP() 
enemy1_atk = random.randrange(1, 250) 
nemy1 = Enemy1(enemy1_atk) 

while jogador1_hp > 30: 
    enemy1_atk = random.randrange(1, 250) 
    jogador1_hp = jogador1_hp - enemy1_atk 
+1

我已经在您的原始代码中为您的打印语句提供了一个建议。您可以使用字符串格式来真正轻松地组装字符串:'print(“你被击中并且你失去了{} hp。你的HP它的现在格式(enemy1_atkk,jogador1_hp))' – RagingRoosevelt

回答

2

是的,如果你创建循环内的敌人类的实例,你会得到一个新的实例,每个循环迭代。

enemy1 = Enemy1(enemy1_atk) 
while jogador1_hp > 30: 
    # the rest of your code 

将你的循环运行之前创建的敌人,那么你引用enemy1循环内的任何时间,这将是相同的实例。

Python没有私有类属性(变量)。因此,您不需要Enemy类中的getAttk方法。您可以直接访问atkp属性。如果你想获得enemy1atkp属性,所有你需要做的就是

enemy1.atkp = x 

因为很容易能够访问敌人的攻击,有可能是还没有必要为enemy1_atkk变量。

2

您每次创建一个新对象。如果你想每次从同一个对象获得一个随机值,只需让该对象创建随机值。

import random 


class Enemy(object): 

    @staticmethod 
    def get_attack(): 
     return random.randrange(1, 250) 

然后在循环之外创建对象。

相关问题