当我使用PyGame死亡时,除箭头键之外的所有键均不起作用

问题描述

我正在使用“ pygame”开发Python基本游戏“ Snake”。当我刚开始走动时还活着,我的箭头键工作正常。当我死后,我无法使用任何键并且我无法关闭窗口方法是按右上角的 X 按钮窗户的终止它的唯一方法是在控制台中按Ctrl-x,并且它不会关闭

当我调试它时,控制台会说我的qc的值分别是59248,但是是pygame。 K_qpygame.K_c的值分别为113,99 .。有人知道原因吗?我死后的代码如下:

            while game_close == True:
            self.dis.fill(colors("blue"))
            self.message("You Lost! Press C-Play Again or Q-Quit",colors("red"))
            self.Your_score(Length_of_snake - 1)
            pygame.display.update()
            for event in pygame.event.get():
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_q:
                        game_over = True
                        game_close = False
                    elif event.key == pygame.K_c:
                        game_close = False
                        self.gameLoop()
           

如果有人知道为什么会发生,将很有用。 这是我第一次写任何任务,很抱歉没有最好的描述,或者有任何重复(我搜索并没有找到对我有用的东西)

编辑:这是整个脚本:

    game_over = False
    game_close = False
    x1 = self.dis_width / 2
    y1 = self.dis_height / 2

    x1_change = 0
    y1_change = 0

    snake_List = []
    Length_of_snake = 1

    foodx = round(random.randrange(0,self.dis_width - self.snake_block) / 10.0) * 10.0
    foody = round(random.randrange(0,self.dis_height - self.snake_block) / 10.0) * 10.0
    
    flagex=True
    flagey=True

    while not game_over:

        while game_close :
            self.dis.fill(colors.blue())
            self.message("You Lost! Press C-Play Again or Q-Quit",colors.red())
            self.Your_score(Length_of_snake - 1)
            pygame.display.update()

            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    game_close = True
                    game_over = True
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_q:
                        game_over = True
                        game_close = False
                    elif event.key == pygame.K_c:
                         game_close = False
                         self.gameLoop()
                    
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                game_over = True
            if event.type == pygame.KEYUP:
                if event.key == pygame.K_LEFT and flagey==True:
                    flagey = False
                    flagex = True
                    x1_change = -self.snake_block
                    y1_change = 0
                elif event.key == pygame.K_RIGHT and flagey==True: 
                    flagey = False
                    flagex = True
                    x1_change = self.snake_block
                    y1_change = 0
                elif event.key == pygame.K_UP and flagex==True:
                    flagey = True
                    flagex = False
                    y1_change = -self.snake_block
                    x1_change = 0
                elif event.key == pygame.K_DOWN and flagex==True:
                    flagey = True
                    flagex = False
                    y1_change = self.snake_block
                    x1_change = 0

        if x1 >= self.dis_width or x1 < 0 or y1 >= self.dis_height or y1 < 0:
            game_close = True
        x1 += x1_change
        y1 += y1_change
        self.dis.fill(colors.blue())
        pygame.draw.rect(self.dis,colors.green(),[foodx,foody,self.snake_block,self.snake_block])
        snake_Head = []
        snake_Head.append(x1)
        snake_Head.append(y1)
        snake_List.append(snake_Head)
        if len(snake_List) > Length_of_snake:
            del snake_List[0]

        for x in snake_List[:-1]:
            if x == snake_Head:
                game_close = True

        self.our_snake(self.snake_block,snake_List)
        self.Your_score(Length_of_snake - 1,)

        pygame.display.update()

        if x1 == foodx and y1 == foody:
            foodx = round(random.randrange(0,self.dis_width - self.snake_block) / 10.0) * 10.0
            foody = round(random.randrange(0,self.dis_height - self.snake_block) / 10.0) * 10.0
            Length_of_snake += 1

        self.clock.tick(self.snake_speed)

    pygame.quit()
    quit()  

解决方法

我将无法完全回答您的问题,因为很高兴看到整个代码,但我会最终将其更改为:

        while game_close:
            self.dis.fill(colors("blue"))
            self.message("You Lost! Press C-Play Again or Q-Quit",colors("red"))
            self.Your_score(Length_of_snake - 1)
            pygame.display.update()
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    game_close = True
                    game_over = True
                    # exit()
            keys = pygame.key.get_pressed()
            if keys[pygame.K_q]:
                game_over = True
                game_close = False
            if keys[pygame.K_c]:
                game_close = False
                self.gameLoop()
,

尝试将其更改为此

           for event in pygame.event.get():
                if event.type == pygame.KEYUP:
                    if event.key == pygame.K_q:
                        game_over = True
                        game_close = False
                    elif event.key == pygame.K_c:
                        game_close = False
                        self.gameLoop()
,

不包括整个代码,缺少类并且未定义某些方法。但首先,我建议将所有按键更改为此:

keys = pygame.key.get_pressed()
if keys[pygame.K_yourkey]:
    # do something
if keys[pygame.K_yourotherkey]:
    # do something
# and so on

也不要将其放入循环事件