Вот начало моего кода для игры со змейкой. Между нажатием клавиши со стрелкой и фактическим поворотом змейки есть досадная задержка.
Трудно точно повернуть и схватить «яблоко».
Я бы хотел, чтобы это было более отзывчивым. Как я могу настроить свой код, чтобы сделать поворот более отзывчивым?
import random
import pygame
pygame.init()
#----------------------------
# CONSTANTS
#----------------------------
window_width = 800
window_height = 800
segment_size = 24
win = pygame.display.set_mode((window_width, window_height))
pygame.display.set_caption('Snake Game')
#----------------------------
# CLASSES
#----------------------------
class Segment:
def __init__(self, x, y):
self.x = x
self.y = y
self.width = segment_size
self.height = segment_size
self.vel = segment_size
self.dir = 'right'
def move(self):
if self.dir == 'right':
self.x += self.vel
elif self.dir == 'left':
self.x -= self.vel
elif self.dir == 'up':
self.y -= self.vel
else:
self.y += self.vel
class Apple:
def __init__(self):
self.x = (random.randint(0, window_width//segment_size)) * segment_size
self.y = (random.randint(0, window_height//segment_size)) * segment_size
self.width = segment_size
self.height = segment_size
self.vel = segment_size
#----------------------------
# FUNCTIONS
#----------------------------
def draw_grid(win):
for x in range (0, window_width, segment_size):
pygame.draw.line(win, (75, 75, 75), (x, 0), (x, window_height), 1)
for y in range (0, window_height, segment_size):
pygame.draw.line(win, (75, 75, 75), (0, y), (window_width, y), 1)
#----------------------------
# REDRAW WINDOW
#----------------------------
def redraw_window(win):
win.fill((0, 0, 0)) # fill screen with black
draw_grid(win) # draw grid
pygame.draw.rect(win, (255, 255, 255), (s.x, s.y, s.width, s.height)) # draw snake
pygame.draw.rect(win, (255, 0, 0), (a.x, a.y, a.width, a.height)) # draw apple
s.move() # move snake
pygame.display.update()
#----------------------------
# MAIN GAME LOOP
#----------------------------
clock = pygame.time.Clock()
segments = []
s = Segment(48, 48)
a = Apple()
running = True
while running:
clock.tick(30)
# listen for window closure
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# listen for key presses
keys = pygame.key.get_pressed()
for key in keys:
if keys[pygame.K_LEFT]:
s.dir = 'left'
if keys[pygame.K_RIGHT]:
s.dir = 'right'
if keys[pygame.K_UP]:
s.dir = 'up'
if keys[pygame.K_DOWN]:
s.dir = 'down'
redraw_window(win)
pygame.quit()
Есть ли что-нибудь еще, что вы могли бы сделать здесь, чтобы оптимизировать код на этом этапе. Спасибо!