Игнорирование событий клавиш на время движения куба
Куб двигается по полю, тем самым он должен закрашивать пустые поля, но есть недочёт, если во время движения куба нажать на другую клавишу, например куб двигается вниз, и во время движения нажать вправо, то он изменит свой курс.
from cube import Cube
class Board:
# создание поля
def __init__(self, side, left, top):
self.board = [[0] * 9 for _ in range(9)]
# значения по умолчанию
self.side_cell = side
self.left = left
self.top = top
def render(self, surface):
for rol in range(len(self.board)):
for col in range(len(self.board[rol])):
pygame.draw.rect(surface, 'white',
((self.left + col * self.side_cell),
(self.top + rol * self.side_cell),
self.side_cell, self.side_cell))
if __name__ == '__main__':
pygame.init()
key = None
clock = pygame.time.Clock()
FPS = 60
side = 70
left = 1000 // 2 - (side * 9) // 2
top = 700 // 2 - (side * 9) // 2
cube = Cube(left, top, 'img.png')
screen = pygame.display.set_mode((1000, 700))
pygame.display.set_caption('Paint Cube')
pygame.display.set_icon(pygame.image.load('img.png'))
screen.fill('#3FC1C9')
board = Board(side, left, top)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_DOWN:
key = 'down'
elif event.key == pygame.K_UP:
key = 'up'
elif event.key == pygame.K_LEFT:
key = 'left'
elif event.key == pygame.K_RIGHT:
key = 'right'
if key:
cube.move(key)
board.render(screen)
screen.blit(cube.image, cube.rect)
pygame.display.update()
clock.tick(FPS)
class Cube(pygame.sprite.Sprite):
def __init__(self, x, y, filename):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load(filename)
self.rect = self.image.get_rect(left=x, top=y)
def move(self, key):
if key == 'down':
if self.rect.y < 595:
self.rect.y += 70
elif key == 'up':
if self.rect.y > 35:
self.rect.y -= 70
elif key == 'left':
if self.rect.x > 185:
self.rect.x -= 70
elif key == 'right':
if self.rect.x < 745:
self.rect.x += 70
def get_coords_cube(self):
x = self.rect.x
y = self.rect.y
coords = (x, y)
return coords