如何解决当我使用PyGame死亡时,除箭头键之外的所有键均不起作用
我正在使用“ pygame”开发Python基本游戏“ Snake”。当我刚开始走动时还活着,我的箭头键工作正常。当我死后,我无法使用任何键并且我无法关闭窗口,方法是按右上角的 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()
解决方法
我将无法完全回答您的问题,因为很高兴看到整个代码,但我会最终将其更改为:
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
也不要将其放入循环事件
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。