2017-09-07 41 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) 

然後在循環之外創建對象。

相關問題