在python中使用游戏状态枚举

在python中使用游戏状态枚举,python,data-structures,enums,pygame,Python,Data Structures,Enums,Pygame,我目前正在用pyGame开发一个python游戏,希望在游戏中为不同的状态GameState、levelstate等使用枚举 我从Enum类继承了自己的GameState类,如下面的代码所示。 我有枚举成员设置主菜单,inGame等。。。然后将它们放入名为allGameStates的列表中 我在尝试遍历setter函数中包含所有游戏状态的列表时遇到了一个问题 我得到-> AttributeError:“GameState”对象没有属性“allGameStates” 另外,当鼠标悬停在列表变量al

我目前正在用pyGame开发一个python游戏,希望在游戏中为不同的状态GameState、levelstate等使用枚举

我从Enum类继承了自己的GameState类,如下面的代码所示。 我有枚举成员设置主菜单,inGame等。。。然后将它们放入名为allGameStates的列表中

我在尝试遍历setter函数中包含所有游戏状态的列表时遇到了一个问题

我得到-> AttributeError:“GameState”对象没有属性“allGameStates”

另外,当鼠标悬停在列表变量allGameStates上时,它会显示->

推断类型:配子状态

它不应该是列表类型吗

任何建议都会很好

class GameState(Enum):

    mainMenu = 'MainMenu'
    inGame = 'InGame'
    pause = 'Pause'
    exit = 'Exit'

    allGameStates = list([mainMenu, inGame, pause, exit])
    curgamestate = allGameStates[0]

    def __init__(self, newgamestate, *args):
        super().__init__(*args)

        self.gamestate = newgamestate

    @property
    def gamestate(self):
        """Gets the current game state"""
        return self.curgamestate

    @gamestate.setter
    def gamestate(self, state):
        """Sets the current game state to another"""
        try:
            for gamestates in self.allGameStates:
                if gamestates.name == state:
                    self.curgamestate = state

        except ValueError as err:
            print(err.args)

看来你的问题在于时机和理解1:

枚举成员名称“mainMenu”、“pause”等直到类完成后才实际转换为枚举成员;这意味着任何类级别都引用“allGameStates”=。。。是指字符串

self.curgamestate=…-这是在枚举成员的实例上设置当前游戏状态,而不是在类上设置当前游戏状态-因此当前游戏状态可以而且将是什么!这是一片混乱。你需要的是自我

最后,是转换为枚举的经验法则——任何简单的名称分配。因此,不仅mainMenu、inGame、pause和exit被转换为枚举,allGameStates和curgamestate2也被转换为枚举

一些提示:

一旦游戏状态建立,listGameState将为您提供正确的成员列表

self.gamestate与self.name相同

self.allGameStates应该是self。_类_与普通类不同,枚举类是可移植的

-

有关如何使用枚举的一些想法,请参见


2有关使简单名称分配不转换为枚举成员的方法,请参见

识别问题-如果要实现有限状态机在场景之间切换,请修复您的问题,然后再看一看。谢谢您给出了非常清晰的答案!看起来枚举比其他语言(例如C语言)中的枚举要复杂一些。