Вашему коду необходимо событие l oop, где он ожидает щелчков мышью. Когда получен щелчок мыши, код должен определить, в каком из 81 под-прямоугольника был нажат.
С размерами окна и размером сетки, сохраненными в переменных:
# Window stuff
WINDOW_WIDTH = 600
WINDOW_HEIGHT = 600
GRID_SIZE = 9
GRID_WIDTH_X = WINDOW_WIDTH // GRID_SIZE
GRID_HEIGHT_Y = WINDOW_HEIGHT // GRID_SIZE
Когда событие щелчка мыши получено, простое деление координаты на соответствующий размер сетки даст индекс ячейки, в котором она была нажата. X для X-ширины и Y для Y-высоты. Очевидно, что это дает смещение на основе 0, нумерация ячеек от [0,0] до [8,8].
elif ( event.type == pygame.MOUSEBUTTONUP ):
# Where was the click on the screen?
mouse_x, mouse_y = pygame.mouse.get_pos()
cell_x = mouse_x // GRID_WIDTH_X
cell_y = mouse_y // GRID_HEIGHT_Y
print( "Click in cell [%d,%d]" % ( cell_x, cell_y ) )
Это местоположение затем можно редактировать, обновлять и т. Д. c.
Полный источник:
import pygame
# Window stuff
WINDOW_WIDTH = 600
WINDOW_HEIGHT = 600
GRID_SIZE = 9
GRID_WIDTH_X = WINDOW_WIDTH // GRID_SIZE
GRID_HEIGHT_Y = WINDOW_HEIGHT // GRID_SIZE
BACKGROUND_COLOUR = ( 200, 200, 200 )
GRID_COLOUR = ( 200, 10, 10 )
pygame.init()
window = pygame.display.set_mode( ( WINDOW_WIDTH, WINDOW_HEIGHT ) )
pygame.display.set_caption( "Suduko Solver Question" )
clock = pygame.time.Clock()
exiting = False
# Main Loop
while not exiting:
# Handle User Input
for event in pygame.event.get():
if ( event.type == pygame.QUIT ):
exiting = True
elif ( event.type == pygame.MOUSEBUTTONUP ):
# Where was the click on the screen?
mouse_x, mouse_y = pygame.mouse.get_pos()
cell_x = mouse_x // GRID_WIDTH_X
cell_y = mouse_y // GRID_HEIGHT_Y
print( "Click in cell [%d,%d]" % ( cell_x, cell_y ) )
# Draw the screen
window.fill( BACKGROUND_COLOUR )
for i in range( GRID_SIZE ):
x_coord = i * GRID_WIDTH_X
y_coord = i * GRID_HEIGHT_Y
pygame.draw.line( window, GRID_COLOUR, ( x_coord, 0 ), ( x_coord, WINDOW_WIDTH-1 ) )
pygame.draw.line( window, GRID_COLOUR, ( 0, y_coord ), ( WINDOW_WIDTH-1, y_coord ) )
pygame.display.flip()
clock.tick(60) # limit FPS
pygame.quit()