Как обработать перемещение курсора на другую клетку в клетчатом поле?
уважаемые знатоки.
Я рисую клетчатое поле в Pygame, клетки которого должны изменяться при взаимодействии отдельных его квадратиков с курсором мыши. Само поле при запуске кода изначально окрашивается в красный цвет, который клетки поля меняют на желтый как только я наведу на них курсором мыши. Проще говоря, "подсвечивают" отдельную клетку. Но мне также хотелось бы, чтобы как только я смещаю курсор на любую другую клетку, та, на которой я только что был, уже окрашенная в желтый, вновь возвращалась к исходному красному цвету. Изучая документацию мне удалось реализовать и окраску клетки по нажатию, и по движению, но во втором случае весь "путь" курсора остается желтым, а я до сих пор ломаю голову как решить мой вопрос
Это мой первый вопрос на сайте и я заранее извиняюсь за возможные ошибки в оформлении, как и был бы очень благодарен, если бы вы мне подсказали как, наконец, прописать эту головоломку :)
# ОБЫЧНЫЙ ЦВЕТ И ЦВЕТ ВЫБОРА КЛЕТКИ КУРСОРОМ
YELLOW = (204, 250, 35)
RED = (255, 0, 0)
# ШИРИНА И ВЫСОТА КЛЕТОК СЕТКИ
WIDTH = 80
HEIGHT = 80
# ГРАНИЦА МЕЖДУ КЛЕТКАМИ
MARGIN = 1
SG = True # Переменная цикла
# Create a 2 dimensional array. A two dimensional
# array is simply a list of lists.
grid = []
for row in range(10):
# Add an empty array that will hold each cell
# in this row
grid.append([])
for column in range(20):
grid[row].append(0) # Append a cell
# --------ИГРА НАЧИНАЕТСЯ-----------
while SG:
# ===ОБРАБОТКА ПЕРЕТАСКИВАНИЯ ИГРЫ И ВЫКЛЮЧЕНИЙ===
for i in pygame.event.get():
if i.type == pygame.QUIT:
SG = False
if i.type == pygame.MOUSEMOTION:
pos = pygame.mouse.get_pos()
# Change the x/y screen coordinates to grid coordinates
column = pos[0] // (WIDTH)
row = pos[1] // (HEIGHT)
# Set that location to one
grid[row][column] = 1
print("Click ", pos, "Grid coordinates: ", row, column)
# ОТРИСОВКА ПОЛЯ
for row in range(8):
for column in range(15):
color = RED
if grid[row][column] == 1:
color = YELLOW
x = column *(WIDTH) + (column + 1)
y = row * (HEIGHT) + (row + 1)
pygame.draw.rect(Wokno, color, (x, y, WIDTH, HEIGHT), 1)
Ответы (2 шт):
Сохранять координаты последней измененной клетки и при изменении новой клетки возврщать старой клетке значение 0:
# Set that location to one
grid[row][column] = 1
grid[prev_row][prev_column] = 0
Разобрался, решение оказалось куда изящнее:
while SG:
for i in pygame.event.get():
if i.type == pygame.QUIT:
SG = False
for row in range(8):
for column in range(15):
pos = pygame.mouse.get_pos()
mouse_column = pos[0] // (WIDTH + 1)
mouse_row = pos[1] // (HEIGHT + 1)
color = RED
if row == mouse_row and column == mouse_column:
color = YELLOW
x = column * WIDTH + (column + 1)
y = row * HEIGHT + (row + 1)
pygame.draw.rect(screen, color, (x, y, WIDTH, HEIGHT), 1)
pygame.display.flip()