变量不会在类之间更新为新值

2024-06-28 11:18:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个基本的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有更多的代码,但我只张贴了我觉得是相关的东西,如果你需要更多的破解拼图信息我


Tags: 代码imageselfinitdefrandomherowhile
1条回答
网友
1楼 · 发布于 2024-06-28 11:18:55

您没有在Door.DoorLocation中调用好的Hero实例

顺便说一句,我真的建议你换个班&;方法名在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__中定义的实例,因此在game中执行self.hero.HeroLocation()(self.hero.heroC-self.doorC [...]时,您指向的是同一个实例

最后一点,这个解决方案可能有效,但肯定不是您真正想要的,我认为门不应该存储英雄,英雄也不应该存储门,但是这里有一个关于模式的更复杂的问题

相关问题 更多 >