Как реализовать мигание

Хочу сделать шахматы, и при нажатии на какою-либо клетку выделять ее миганием, однако не понимаю как сделать мигающее выделение (как собственно и временное). Тк клетка просто остается обведенной.

import pygame,time

fpsClock = pygame.time.Clock()

pygame.init()
FPS = 30

gameScreen = pygame.display.set_mode((400, 300))
BLACK = (0, 0, 0)
YELLOW = (255, 255, 150)
RED = (255, 0, 0)
w, h = 8, 8
field = [[0 for x in range(w)] for y in range(h)]

for y in range(0, 8):
    for x in range(0, 8):
        if (x + y) % 2 == 0:
            field[y][x] = 1

print(field)

size = [800, 800]
screen = pygame.display.set_mode(size)
pygame.display.set_caption("TBS")
gameScreen.fill((YELLOW))

for y in range(0, 8):
    for x in range(0, 8):
        if field[y][x] == 1:
            pygame.draw.rect(gameScreen, BLACK,
                             (x * 100, y * 100, 100, 100))

pygame.display.flip()

runGame = True
while runGame:
    fpsClock.tick(FPS)

    for event in pygame.event.get():
        if event.type == pygame.QUIT: runGame = False
        if event.type == pygame.MOUSEBUTTONDOWN:
            if event.button == 1:
                x, y = pygame.mouse.get_pos()
                print(x, y)
                pygame.draw.line(gameScreen, RED,
                                 [x // 100 * 100, y // 100 * 100], [x // 100 * 100 + 100, y // 100 * 100], 5)
                pygame.draw.line(gameScreen, RED,
                                 [x // 100 * 100, y // 100 * 100], [x // 100 * 100, y // 100 * 100 + 100], 5)
                pygame.draw.line(gameScreen, RED,
                                 [x // 100 * 100, y // 100 * 100 + 100], [x // 100 * 100 + 100, y // 100 * 100 + 100],
                                 5)
                pygame.draw.line(gameScreen, RED,
                                 [x // 100 * 100 + 100, y // 100 * 100], [x // 100 * 100 + 100, y // 100 * 100 + 100],
                                 5)

                pygame.display.flip()
            if event.button == 3:
                pass

pygame.quit()

Ответы (1 шт):

Автор решения: Александр

Так попробуйте

import time
from threading import Thread
import pygame


class XThread(Thread):
    flag = True
    def __init__(self, function):
        super().__init__()
        self.function = function
    def stop(self):
        self.flag = False
    def run(self):
        while self.flag:
            self.function()

runGame = True

fpsClock = pygame.time.Clock()

pygame.init()
FPS = 30

gameScreen = pygame.display.set_mode((800, 800))
BLACK = (0, 0, 0)
YELLOW = (255, 255, 150)
RED = (255, 0, 0)
w, h = 8, 8


field = [[0 for x in range(w)] for y in range(h)]

for y in range(0, 8):
    for x in range(0, 8):
        if (x + y) % 2 == 0:
            field[y][x] = 1

print(field)

def drawBoard():
    size = [800, 800]
    screen = pygame.display.set_mode(size)
    pygame.display.set_caption("TBS")
    gameScreen.fill((YELLOW))

    for y in range(0, 8):
        for x in range(0, 8):
            if field[y][x] == 1:
                pygame.draw.rect(gameScreen, BLACK,
                    (x * 100, y * 100, 100, 100))

    pygame.display.flip()

def drawFlashingSquare():
    while 1:
        pygame.draw.line(gameScreen, RED,
            [x // 100 * 100, y // 100 * 100], [x // 100 * 100 + 100, y // 100 * 100], 5)
        pygame.draw.line(gameScreen, RED,
            [x // 100 * 100, y // 100 * 100], [x // 100 * 100, y // 100 * 100 + 100], 5)
        pygame.draw.line(gameScreen, RED,
            [x // 100 * 100, y // 100 * 100 + 100], [x // 100 * 100 + 100, y // 100 * 100 + 100],
                             5)
        pygame.draw.line(gameScreen, RED,
            [x // 100 * 100 + 100, y // 100 * 100], [x // 100 * 100 + 100, y // 100 * 100 + 100],
                             5)
        pygame.display.flip()
        pygame.time.wait(300)
        pygame.draw.line(gameScreen, YELLOW,
            [x // 100 * 100, y // 100 * 100], [x // 100 * 100 + 100, y // 100 * 100], 5)
        pygame.draw.line(gameScreen, YELLOW,
            [x // 100 * 100, y // 100 * 100], [x // 100 * 100, y // 100 * 100 + 100], 5)
        pygame.draw.line(gameScreen, YELLOW,
            [x // 100 * 100, y // 100 * 100 + 100], [x // 100 * 100 + 100, y // 100 * 100 + 100],
                             5)
        pygame.draw.line(gameScreen, YELLOW,
            [x // 100 * 100 + 100, y // 100 * 100], [x // 100 * 100 + 100, y // 100 * 100 + 100],
                             5)
        pygame.display.flip()

drawBoard()

xthread = None

while runGame:
    fpsClock.tick(FPS)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            runGame = False
            if xthread is None:
                pass
            else:
                xthread.stop()
        if event.type == pygame.MOUSEBUTTONDOWN:
            if event.button == 1:
                drawBoard()
                x, y = pygame.mouse.get_pos()
                print(x, y)
                if xthread == None:
                    xthread = XThread(drawFlashingSquare)
                    xthread.start()
                elif xthread.isAlive() == True:
                    xthread.stop()
            if event.button == 3:
                pass
pygame.quit()
→ Ссылка