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
答案 0 :(得分:3)
您每次都在创建一个新对象。如果要在每次从同一对象获取随机值时,只需让对象创建随机值。
import { computed } from 'mobx'
import { observer } from 'mobx-react'
import { createViewModel } from 'mobx-utils'
@observer
class Child extends React.Component {
owner = createViewModel(this.props.user);
render () {
return <div>{this.owner.name}</div>
}
}
然后在循环外创建对象。
答案 1 :(得分:2)
是的,如果你在循环中创建敌人类的实例,你将在每次循环迭代时获得一个新实例。
enemy1 = Enemy1(enemy1_atk)
while jogador1_hp > 30:
# the rest of your code
会在你的循环运行之前创建敌人,然后只要你在循环中引用enemy1
,它就会是同一个实例。
Python没有私有类属性(变量)。因此,您不需要getAttk
类中的Enemy
方法。您可以直接访问atkp
属性。如果您想要访问enemy1
的{{1}}属性,那么您需要做的就是
atkp
由于很容易能够访问敌人的攻击,因此可能也不需要enemy1.atkp = x
变量。