我正在制作一款基本的RPG风格游戏。我为代码的各个部分制作了不同的类,每个主要项目一个(英雄,门,怪物等)。
对于英雄和门,我给他们分配随机位置,如下面的代码所示,但对于门,我运行一个while循环,确保门与英雄一定距离(使用pythagorus)。
然而,门类中的while循环不起作用,因为它始终对heroC和heroR(英雄的行和列)使用值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)
注意,还有更多的代码,但我只发布了我觉得相关的东西,如果你需要更多来破解拼图消息我!
答案 0 :(得分:1)
您没有在Hero
中调用好Door.DoorLocation
个实例。
顺便说一下,我真的建议你改变班级和班级。方法名称Pep 8。
在Door.__init__
,第一行:
self.hero = Hero()
在这里,您要实例化新 Hero
的实例。但是,在game.MakeMap
中,您正在调用self.hero.HeroLocation()
。
此self.hero
实例不相同,因为它已在game.__init__
中实例化,而不在Door.__init__
中实例化。
我没有尝试过,但请检查一下此更新的行为:
class game:
def __init__(self, parent):
self.door = Door()
self.hero = self.door.hero
通过此操作,您现在正在调用Door.__init__
中定义的实例,因此在self.hero.HeroLocation()
中执行game
和(self.hero.heroC-self.doorC [...]
中的Door
时,您指的是相同的实例
最后一点,这个解决方案可能有效,但肯定不是你真正想要的,我认为门不应该存储英雄,英雄不应该存储门,但这里有关于模式的更复杂的问题。