如何在pygame中使用鼠标和键盘检测编辑数独网格?

问题描述 投票:1回答:1

我想在数独网格中插入数值,使用pygame编辑一个内部矩阵。如果用户点击一个空单元格,我希望他们能够选择一个键盘数字,然后内部矩阵就会更新,这个数字就会出现在相应的单元格中。现在,我的循环代码是这样的。

while custom:
    pygame.display.flip()
    screen.blit(bgCustom, (0, 0))
    for event in pygame.event.get():
        if (event.type == pygame.MOUSEBUTTONDOWN):
            setGrid(board)

setGrid是这样的

def setGrid(board):
    position = pygame.mouse.get_pos()
    x = position[0]
    y = position[1]
    #print(y, x)
    line = x // 92
    col = y // 80
    #print(col, line)
    #print(board)

    for event in pygame.event.get():
        if event.type == pygame.KEYUP   :
            if event.key == pygame.K_1:
                board[line][col] = 1
                print(board)
            elif event.key == pygame.K_2:
                board[line][col] = 2
            elif event.key == pygame.K_3:
                board[line][col] = 3
            elif event.key == pygame.K_4:
                board[line][col] = 4
            elif event.key == pygame.K_5:
                board[line][col] = 5
            elif event.key == pygame.K_6:
                board[line][col] = 6
            elif event.key == pygame.K_7:
                board[line][col] = 7
            elif event.key == pygame.K_8:
                board[line][col] = 8
            elif event.key == pygame.K_9:
                board[line][col] = 9

没有语法错误,但板子仍然没有被编辑。我的猜测是,当用户激活setGrid时,计算机会立即尝试检测键盘输入,但用户的速度不够 "快",无法使函数发挥作用。我想过做一些等待函数,以等待键盘输入,但我不想让用户卡在setGrid中。有什么想法吗?

先谢谢你

python-3.x pygame keyboard grid mouse
1个回答
1
投票

你必须设置一个变量(clicked_cell),其初始化为 None. 当单元格被点击时,将带有行和列的元组分配给它。在按钮被按下后重置变量。

clicked_cell = None

while custom:
    # [...]

    for event in pygame.event.get():

        if event.type == pygame.MOUSEBUTTONDOWN:

            line = event.pos[0] // 92
            col = event.pos[1] // 80
            clicked_cell = (line, col)

        if event.type == pygame.KEYUP:

            if clicked_cell != None:
                if pygame.K_1 <= event.key <= pygame.K_9:

                    line, col = clicked_cell
                    clicked_cell = None

                    number = int(event.unicode)
                    board[line][col] = number

    # [...]
© www.soinside.com 2019 - 2024. All rights reserved.