我正在尝试为python制作的数独解算器创建一个用户界面。到目前为止,我可以显示一个9x9的网格,我希望用户能够单击一个块,输入一个数字,然后对网格中的所有起始数字执行此操作。任何帮助都将不胜感激。
发布于 2020-03-16 06:03:01
您的代码需要一个事件循环,在那里它等待鼠标单击。当接收到鼠标点击时,代码需要确定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 ) )
然后可以编辑、更新该位置等。
完整的源代码:
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()
https://stackoverflow.com/questions/60674654
复制相似问题