Pygame Sudoku:使空单元格可编辑

时间:2015-12-01 18:33:41

标签: python numpy pygame

有些同事写了一个数独生成器。

  • 发电机用强力产生完全解决的解决方案 方法。
  • 数独存储在9x9 numpy数组中。
  • 然后,基于a 难度级别,某些单元格设置为零。
  • 然后使用pygame绘制网格。
  • 最后,数组!= 0的所有数组都填充到网格中。

这是代码中用未删除的值填充网格的部分。

def placeNumbers(sudoku_array):
font = pygame.font.Font(None, 36)
for row in range(9):
    for col in range(9):
        if sudoku_array[row, col] != 0:
            integer = font.render(str(sudoku_array[row, col]), 1, black)
            display.blit(integer, (15 + col * 45, 10 + row * 45))
            pygame.display.flip()

现在我们想让清空的单元格(包含零的单元格)可编辑,即将它们转换为文本字段。我们真的不知道该怎么做;任何想法?

看起来像这样:

elif sudoku_array[row, col] == 0:
    #create editable text field
    #at every position where a zero occurs

以下是数组的示例:

[[7 6 0 0 0 4 2 3 5]
 [0 4 8 0 3 5 0 7 6]
 [3 9 5 0 0 2 1 0 4]
 [1 2 0 5 0 0 3 6 7]
 [0 0 9 0 1 6 8 4 2]
 [6 0 3 4 2 0 0 9 1]
 [0 0 6 8 5 3 0 2 9]
 [8 0 2 0 6 9 4 1 0]
 [9 3 7 2 4 0 0 5 0]]

编辑:

我找到了部分有效的解决方案。使用pygame网站(http://www.pygame.org/project-Pygame+Forms-1042-.html)中的forms.py,我设法将一个文本框添加到空单元格中。但是,还有一些问题:

  • 我可以写入文本框。但如果我按退格键,则没有任何反应(即我无法删除数字)。数字(例如“2”或“3”)只是写在“下面”的其他数字上。
  • 我只能通过点击pygame窗口右上角的关闭按钮进入下一个文本字段。

以下是代码的下一部分:

if sudoku_array[row,col] == 0:
    f = Form(False)
    f.add_object('input', Input(' ', ' ', position = 'absolute', top= row*45, left = col * 45, input_bg_color=(0,0,0,0)))
    r = f.run(display)

0 个答案:

没有答案