首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Pygame上创建用户输入?

如何在Pygame上创建用户输入?
EN

Stack Overflow用户
提问于 2020-03-14 01:10:26
回答 1查看 94关注 0票数 0

我正在尝试为python制作的数独解算器创建一个用户界面。到目前为止,我可以显示一个9x9的网格,我希望用户能够单击一个块,输入一个数字,然后对网格中的所有起始数字执行此操作。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-16 06:03:01

您的代码需要一个事件循环,在那里它等待鼠标单击。当接收到鼠标点击时,代码需要确定81个子矩形中的哪一个被单击。

将窗口尺寸和网格大小存储在变量中:

代码语言:javascript
运行
复制
# 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进行编号。

代码语言:javascript
运行
复制
    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 ) )

然后可以编辑、更新该位置等。

完整的源代码:

代码语言:javascript
运行
复制
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()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60674654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档