Python 除箭头键外的所有键都不';我死后不能用PyGame工作

Python 除箭头键外的所有键都不';我死后不能用PyGame工作,python,pygame,Python,Pygame,我当时正在用Python编写基本游戏“蛇”。当我在开始时四处走动并且还活着时,我的箭头键工作正常。当我死后,我不能使用任何键,也不能通过按下窗口右上角的X按钮来关闭窗口。终止它的唯一方法是在控制台中按Ctrl-x,这样它就不会关闭 当我调试它时,我的控制台显示我的q和c值是59,248,但这是pygameK_q和pygame.K_c有值113,99有人知道原因吗?我死后的代码如下: while game_close == True: self.di

我当时正在用Python编写基本游戏“蛇”。当我在开始时四处走动并且还活着时,我的箭头键工作正常。当我死后,我不能使用任何键,也不能通过按下窗口右上角的X按钮来关闭窗口。终止它的唯一方法是在控制台中按Ctrl-x,这样它就不会关闭

当我调试它时,我的控制台显示我的
q
c
值是
59
248
,但这是pygame
K_q
pygame.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()  
game\u over=False
game_close=False
x1=自分布宽度/2
y1=自分离高度/2
x1_变化=0
y1_变化=0
snake_List=[]
蛇的长度=1
foodx=圆形(随机.randrange(0,self.dis\u宽度-self.snake\u块)/10.0)*10.0
foody=round(random.randrange(0,self.dis\u高度-self.snake\u块)/10.0)*10.0
X=真
鞭毛=真
虽然游戏尚未结束:
游戏结束时:
self.dis.fill(colors.blue())
self.message(“你输了!再次按C-Play或Q-Quit”,colors.red())
赛尔夫。你的赛尔夫分数(赛尔夫蛇的长度-1)
pygame.display.update()
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
game_close=True
游戏结束=正确
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_q:
游戏结束=正确
game_close=False
elif event.key==pygame.K_c:
game_close=False
self.gameLoop()
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
游戏结束=正确
如果event.type==pygame.KEYUP:
如果event.key==pygame.K_LEFT且flagy==True:
鞭毛=假
X=真
x1_change=-self.snake_块
y1_变化=0
elif event.key==pygame.K_RIGHT和flagy==True:
鞭毛=假
X=真
x1\u更改=自蛇块
y1_变化=0
elif event.key==pygame.K_UP和flagex==True:
鞭毛=真
flagex=False
y1_change=-self.snake_块
x1_变化=0
elif event.key==pygame.K_DOWN和flagex==True:
鞭毛=真
flagex=False
y1_change=自蛇_块
x1_变化=0
如果x1>=self.disu宽度或x1<0或y1>=self.disu高度或y1<0:
game_close=True
x1+=x1_变化
y1+=y1_变化
self.dis.fill(colors.blue())
pygame.draw.rect(self.dis,colors.green(),[foodx,foody,self.snake\u block,self.snake\u block])
蛇头=[]
蛇头附加(x1)
蛇头附加(y1)
蛇头列表。追加(蛇头)
如果len(蛇列表)>蛇的长度:
del snake_列表[0]
对于snake_列表中的x[:-1]:
如果x==蛇头:
game_close=True
self.our_snake(self.snake_块,snake_列表)
赛尔夫。你的赛尔夫分数(蛇的长度-1,)
pygame.display.update()
如果x1==foodx和y1==foody:
foodx=圆形(随机.randrange(0,self.dis\u宽度-self.snake\u块)/10.0)*10.0
foody=round(random.randrange(0,self.dis\u高度-self.snake\u块)/10.0)*10.0
_蛇的长度_+=1
self.clock.tick(self.snake\u速度)
pygame.quit()
退出

尝试将其更改为

pygame.event.get()中事件的
:
如果event.type==pygame.KEYUP:
如果event.key==pygame.K_q:
游戏结束=正确
game_close=False
elif event.key==pygame.K_c:
game_close=False
self.gameLoop()

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

        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()

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

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

不要把它放在循环事件中

对不起,它不起作用。我仍然采用相同的值。谢谢您的尝试。您尝试过更改特定的键吗?例如,将它们更改为
pygame.K_空间
或类似的东西?出于某种原因,pygame.K_空间和箭头键工作正常。其他任何键都不起作用。是因为我在Ubuntu而不是Windows上工作吗?你有多少个事件循环?看,实现似乎是正确的。您必须显示更多代码。我非常确定您已经实现了不止一个事件循环。获取所有消息并将其从队列中删除。如果在多个事件循环中调用
pygame.event.get()
,则只有一个循环接收事件,但并非所有循环都接收所有事件。因此,一些活动似乎被错过了。非常感谢。这就是解决方案,但由于某些原因,keys[pygam.K_q]不起作用,但它与keys[pygame.K_q]==Fal一起起作用