我正在做一个基本的RPG风格的游戏。我为代码的不同部分创建了不同的类,每个类对应于所涉及的主要项目(英雄、门、怪物等)
对于英雄和门,我都随机分配了它们的位置,如下面的代码所示,但是对于门,我运行while循环,确保门与英雄有一定的距离(使用毕达哥拉斯)
但是,door类中的while循环将不起作用,因为它总是对heroC和heroR(hero的行和列)使用值0。我对使用类比较陌生,但这似乎没有什么意义,因为在HeroLocation中,我为这些变量分配了一个随机整数,并且在DoorLocation之前调用了HeroLocation
任何帮助都将不胜感激
class Hero(Character):
def __init__(self):
super(Hero, self).__init__(10, 10, 1, 1, 0, 1)
self.herolocations = list(range(1,6)) + list(range(10,14))
self.heroC = 0
self.heroR = 0
def HeroLocation(self):
#place hero
self.heroC = random.choice(self.herolocations)
self.heroR = random.choice(self.herolocations)
class Door:
def __init__(self):
self.hero = Hero()
self.doorC = 0
self.doorR = 0
def DoorLocation(self):
while ((self.hero.heroC-self.doorC)**2+(self.hero.heroR-self.doorR)**2) <= 128:
self.doorC = random.randint(1, 13)
self.doorR = random.randint(1, 13)
class game:
def __init__(self, parent):
self.hero = Hero()
self.door = Door()
def MakeMap(self):
self.hero.HeroLocation()
self.herol = self.Main_game.create_image(15+30*self.hero.heroC,15+30*self.hero.heroR, image = self.heroimage)
self.door.DoorLocation()
self.doorl = self.Main_game.create_image(15+30*self.door.doorC,15+30*self.door.doorR, image = self.exitdoor)
NB有更多的代码,但我只张贴了我觉得是相关的东西,如果你需要更多的破解拼图信息我
您没有在
Door.DoorLocation
中调用好的Hero
实例顺便说一句,我真的建议你换个班&;方法名在Pep 8之后
在
Door.__init__
中,第一行:这里,您正在实例化一个新的
Hero
的实例。但是,在game.MakeMap
中,您正在调用self.hero.HeroLocation()
这个
self.hero
实例不一样,因为它是在game.__init__
中实例化的,而不是在Door.__init__
中实例化的我没有尝试,但请检查此更新的行为:
这样,您就可以调用
Door.__init__
中定义的实例,因此在game
中执行self.hero.HeroLocation()
和(self.hero.heroC-self.doorC [...]
时,您指向的是同一个实例最后一点,这个解决方案可能有效,但肯定不是您真正想要的,我认为门不应该存储英雄,英雄也不应该存储门,但是这里有一个关于模式的更复杂的问题
相关问题 更多 >
编程相关推荐