尝试用蟒蛇编写基本的贪吃蛇游戏(保持"crashing")

  • 本文关键字:游戏 保持 crashing python
  • 更新时间 :
  • 英文 :


所以我试着教自己一点python的乐趣遵循这个教程:https://www.youtube.com/watch?v=8dfePlONtls

我让圆点自动移动(向左,向右,向上或向下),这取决于我最后按下哪个箭头键。但出于某种原因,它在几秒钟后就停止了,除非我一直输入随机的键,或者只是把鼠标悬停在窗口上就可以了。如果我停止做任何事情,程序就会"停止"。

我还注意到,当我停止做任何事情时,程序的CPU使用率会上升到22%,但当我开始输入键或再次移动鼠标时,CPU使用率又会下降。

我试着完全按照视频中所做的,但我找不到任何错误,pycharm没有检测到我的代码中有任何明显的错误。

到目前为止我写的是:

import pygame
from pygame.locals import *
import time

class Snake:
def __init__(self, parent_screen):
self.parent_screen = parent_screen
self.block = pygame.image.load("resources/block.jpg").convert()
self.x = 100
self.y = 100
self.direction = 'down'
def move_left(self):
self.direction = 'left'
def move_right(self):
self.direction = 'right'
def move_up(self):
self.direction = 'up'
def move_down(self):
self.direction = 'down'
def draw(self):
self.parent_screen.fill((117, 17, 8))
self.parent_screen.blit(self.block, (self.x, self.y))
pygame.display.update()
def walk(self):
if self.direction == 'left':
self.x -= 10
if self.direction == 'right':
self.x += 10
if self.direction == 'up':
self.y -= 10
if self.direction == 'down':
self.y += 10
self.draw()

class Game:
def __init__(self):
pygame.init()
self.surface = pygame.display.set_mode((500, 500))
self.surface.fill((117, 17, 8))
self.snake = Snake(self.surface)
self.snake.draw()
def run(self):
running = True
while running:
for event in pygame.event.get():
if event.type == KEYDOWN:
if event.key == K_ESCAPE:
running = False
if event.key == K_UP:
self.snake.move_up()
if event.key == K_DOWN:
self.snake.move_down()
if event.key == K_LEFT:
self.snake.move_left()
if event.key == K_RIGHT:
self.snake.move_right()
elif event.type == QUIT:
running = False
self.snake.walk()
time.sleep(0.2)

if __name__ == "__main__":
game = Game()
game.run()

提前感谢!

while running:
for event in pygame.event.get():
if event.type == KEYDOWN:
if event.key == K_ESCAPE:
running = False
if event.key == K_UP:
self.snake.move_up()
if event.key == K_DOWN:
self.snake.move_down()
if event.key == K_LEFT:
self.snake.move_left()
if event.key == K_RIGHT:
self.snake.move_right()
elif event.type == QUIT:
running = False
self.snake.walk()
time.sleep(0.2)

你原来的代码缩进意味着你处理每个pygame事件的按键,但也更新你的蛇每个pygame事件。删除最后两行移动蛇的缩进意味着它们将在外部while循环中执行,而不是在事件循环中执行。这意味着蛇将在每次循环运行时更新其位置,而不是仅在事件发生时更新。

最新更新