Python 游戏中移动的蛇

Python 游戏中移动的蛇,python,pygame,Python,Pygame,我刚开始学习pygame,我正在做一个蛇游戏。然而,我似乎无法扭转局面,也找不到问题所在。我认为问题出在snake类中的“move\u snake”方法中,但我确实找不到问题所在。我通常对python和面向对象编程都是新手,所以这可能就是原因 import pygame, sys import random pygame.init() clock = pygame.time.Clock() screen_width = 600 screen_height = 600 screen = py

我刚开始学习pygame,我正在做一个蛇游戏。然而,我似乎无法扭转局面,也找不到问题所在。我认为问题出在snake类中的“move\u snake”方法中,但我确实找不到问题所在。我通常对python和面向对象编程都是新手,所以这可能就是原因

import pygame, sys
import random
pygame.init()

clock = pygame.time.Clock()

screen_width = 600
screen_height = 600

screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("Snake Game")

bgColor = "grey12"
lightGrey = (200, 200, 200)

random_x = random.randint(0, screen_width - 20)
random_y = random.randint(0, screen_height - 20)

class FOOD:
    def __init__(self):
        self.food_x = random_x
        self.food_y = random_y
        self.food_width = 20
        self.food_height = 20
        self.food_rect = pygame.Rect(self.food_x, self.food_y, self.food_width, self.food_height)
    def draw_food(self):
        pygame.draw.rect(screen, lightGrey, self.food_rect)

food = FOOD()

class SNAKE(FOOD):
    def __init__(self):
        super().__init__()
        self.snake_width = 20
        self.snake_height = 20
        self.snake_x = screen_width/2 - self.snake_width
        self.snake_y = screen_height/2 - self.snake_height
        self.snake_rect = pygame.Rect(self.snake_x, self.snake_y, self.snake_width, self.snake_height)
        self.move = [0, -1]
        self.snake_speed = 5
    def draw_snake(self):
        pygame.draw.rect(screen, lightGrey, self.snake_rect)
    def move_snake(self):
        for e in pygame.event.get():
            if e.type == pygame.KEYDOWN:
                if e.key == pygame.K_UP:
                    self.move = [0, -1]
                if e.key == pygame.K_DOWN:
                    self.move = [0, 1]
                if e.key == pygame.K_LEFT:
                    self.move = [-1, 0]
                if e.key == pygame.K_RIGHT:
                    self.move = [1, 0]
        self.snake_x += self.move[0] * self.snake_speed
        self.snake_y += self.move[1] * self.snake_speed
        self.snake_rect.topleft = (self.snake_x, self.snake_y)

snake = SNAKE()

while True:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    screen.fill(bgColor)
    food.draw_food()
    snake.draw_snake()

    snake.move_snake()

    pygame.display.flip()

    clock.tick(60)

问题是对
pygame.event.get()
的多次调用

获取所有消息并将其从队列中删除:

这将获取所有消息并将它们从队列中删除。[……]

如果在多个事件循环中调用了
pygame.event.get()
,则只有一个循环接收事件,但并非所有循环都接收所有事件。因此,一些活动似乎被错过了

获取一次事件并在多个循环中使用它们,或者将列表或事件传递给处理它们的函数和方法:

蛇类(食物):
# [...]
def move_snake(自身、事件列表):
对于事件列表中的e:
如果e.type==pygame.KEYDOWN:
# [...]
为True时:
event_list=pygame.event.get()
对于事件列表中的事件:
如果event.type==pygame.QUIT:
pygame.quit()
sys.exit()
# [...]
蛇。移动蛇(事件列表)