Python 函数重写另一个函数?

Python 函数重写另一个函数?,python,pygame,Python,Pygame,我的程序有一个问题,基本上我们必须把机器人讨价还价作为一个项目,并在最后添加一个单独的功能。我的想法是增加一个选项来改变人工智能的模型(我知道这很简单,但我还是个新手)。有三个主文件,一个用于主菜单,一个用于精灵选择,一个用于实际游戏。我使用的是pygame,问题在于sprite选择GUI,您可以按1、2或3加载模型并启动游戏。问题是当按下1、2或3时,没有任何作用 class Environment(): def __init__(self): self.surfac

我的程序有一个问题,基本上我们必须把机器人讨价还价作为一个项目,并在最后添加一个单独的功能。我的想法是增加一个选项来改变人工智能的模型(我知道这很简单,但我还是个新手)。有三个主文件,一个用于主菜单,一个用于精灵选择,一个用于实际游戏。我使用的是pygame,问题在于sprite选择GUI,您可以按1、2或3加载模型并启动游戏。问题是当按下1、2或3时,没有任何作用

class Environment():

    def __init__(self):
        self.surface = graphics.SCREEN
        self.gui_group = pygame.sprite.Group()
        bckImg = pygame.image.load('map1.png') # loading an image of the map
        pygame.font.init()   # font initialisation
        myfont = pygame.font.Font('font1.ttf', 65)  # choosing the font
        myfont1 = pygame.font.Font('font1.ttf', 40)
        myfont2 = pygame.font.Font('font1.ttf', 30)
        myfont3 = pygame.font.Font('font1.ttf', 32)
        title = myfont.render("IT BELONGS IN THE MUSEUM !", 1, (0,0,0))
        startTheGame = myfont1.render("PRESS 'ENTER' TO START", 1, (0,200,0))
        closeTheMenu = myfont2.render("PRESS 'Q' TO QUIT", 1, (180,0,0))
        chooseTheSprite = myfont3.render("PRESS 'C' TO CHANGE THE AI MODEL", 1, (0,100,0))
        self.surface.blit(bckImg, (0,0))  #blitting the background
        self.surface.blit(title, (375,80)) #blitting the title
        self.surface.blit(startTheGame, ((500),700))
        self.surface.blit(closeTheMenu, ((635),885))
        self.surface.blit(chooseTheSprite, ((450,800)))


    def process_input(self):
        for event in pygame.event.get(): # Menu control
            if event.type == pygame.KEYDOWN: 
                if (event.key == K_RETURN):
                    print("START GAME")
                    main.start()
                elif (event.key == K_c):
                    spriteGUI.SpriteGui()

                elif (event.key == K_q): # Quit game
                    pygame.display.quit()
                    pygame.quit()
                    sys.exit()

    def update(self):
        pass

    def render(self):
        self.gui_group.draw(self.surface)
        pygame.display.flip()
这是主菜单键事件功能

class SpriteGui():

    def __init__(self):
        self.surface = graphics.SCREEN
        self.gui_group = pygame.sprite.Group()
        bckImg = pygame.image.load('map1.png') # loading an image of the map
        player1 = pygame.image.load('player1.png')
        player2 = pygame.image.load('player2.png')
        player3 = pygame.image.load('player3.png')
        pygame.font.init()   # font initialisation
        myfont = pygame.font.Font('font1.ttf', 65)  # choosing the font
        title = myfont.render("CHOOSE THE MODEL ", 1, (0,0,0))
        choosePlayer1 = myfont.render("[1]", 1, (0,51,0))
        choosePlayer2 = myfont.render("[2]", 1, (0,51,0))
        choosePlayer3 = myfont.render("[3]", 1, (0,51,0))
        self.surface.blit(bckImg, (0,0))  #blitting the background
        self.surface.blit(title, (375,80)) #blitting the title
        self.surface.blit(choosePlayer1, (315, 700))
        self.surface.blit(choosePlayer2, (745, 700))
        self.surface.blit(choosePlayer3,(1165, 700))
        self.surface.blit(player1, (270,400))
        self.surface.blit(player2, (700,400))
        self.surface.blit(player3, (1120, 400))


    def process_inputs(self):
        for event in pygame.event.get(): # Menu control
            if event.type == pygame.KEYDOWN:
                if (event.key == K_1):
                    config.playerCh = 'player1.1.png'
                    print("Yo")
                elif (event.key == K_2):
                    config.playerCh = 'player2.1.png'
                    print("Yo2")
                elif (event.key == K_3):
                    config.playerCh = 'player3.1.png'
                    print("yo3")
                elif (event.key == K_q):
                    pygame.display.quit()
                    pygame.quit()
                    sys.exit()

    def update(self):
        pass
    def render(self):
        self.gui_group.draw(self.surface)
        pygame.display.flip()
这是精灵选择键事件函数。 一旦进入“精灵选择”菜单,来自顶部功能的关键事件仍然有效,但来自第二个功能的关键事件由于某种原因不起作用。我的想法是,第一个函数以某种方式覆盖了第二个函数,但不确定如何修复它。这两个函数位于两个不同的类中,分别位于两个单独的文件中。我非常感谢您的帮助,正如我之前所说的,我是一名新手,所以我对编程的理解不是最好的

谢谢

pygame.event.get()将从事件队列中删除所有事件。这意味着,当您第一次调用它时,它将删除这些事件,然后您对它们进行迭代。如果事件类型不在If/elif部分,它将跳过它

随后,当您对pygame.event.get()执行第二次调用时,所有以前的事件(即使未对其执行操作)都已被删除,因此,只有自那时起发生的新事件才会出现在队列中

我建议使用可选的参数类型或类型列表来指定您当时想要解析的事件


请参阅:

在这些函数之前,您是否正在使用
@…
装饰器?是的,创建两个同名的函数(在类之外)会导致函数名被覆盖。正如
def sys():pass
将导致您无法执行
import sys
,因为
sys
已被替换。不,我没有在任何地方使用装饰程序。(在查找它们之前不知道它们是什么>。是的,最好在整个代码中包含一个,但可能在问题本身中提到它是一个类中基于的两个函数。编辑主要帖子,这是两个主要文件。所以在我的例子中,您的意思是:在pygame.event.get(KEYDOWN)中为事件?@Dave我认为您应该做的是将事件处理抽象到它自己的类中,然后在Environment和SpriteGUI中创建一个名为handle_event()的函数,该函数接受一个事件。然后您可以创建这些函数的数组,并在EventHandler中将事件传递给每个函数。