Python Pygame数独:使空单元格可编辑
一些同事编写了一个数独生成器Python Pygame数独:使空单元格可编辑,python,numpy,pygame,Python,Numpy,Pygame,一些同事编写了一个数独生成器 生成器使用蛮力创建完全解决的解决方案 方法 数独存储在一个9x9 numpy数组中 然后,基于 难度级别,某些单元格设置为零 然后使用pygame绘制网格 最后,数组中的所有单元格都有一个值!=0填充到网格中 下面是代码的一部分,网格中填充了未删除的值 def placeNumbers(sudoku_array): font = pygame.font.Font(None, 36) for row in range(9): for col in rang
- 生成器使用蛮力创建完全解决的解决方案 方法李>
- 数独存储在一个9x9 numpy数组中李>
- 然后,基于 难度级别,某些单元格设置为零李>
- 然后使用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网站()中的forms.py,我成功地将一个文本框添加到空单元格中。但是,还有一些问题:
- 我可以在文本框中写字。但如果我点击backspace,什么也不会发生(即,我不能删除数字)。一个数字(例如“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)
PyGame没有小部件,所以你必须自己做所有事情-绘制、处理按键等。顺便说一句:你不必在每次
blit
之后都翻转blit
-只做一次blit
Hello@furas,谢谢你的回答。我找到了部分解决方案并编辑了我的问题。也许你可以看一看——那太好了!:-)似乎您只能创建一个表单
。也许你必须创建一个表单,并将所有输入(和其他元素)放在该表单中。PyGame的其他GUI元素-但没有开发很长时间-PyGame没有小部件,所以你必须自己做所有事情-绘制、处理键,顺便说一句:你不必在每次blit
后都翻转flip
-毕竟只翻转一次blit
Hello@furas,谢谢你的回答。我找到了部分解决方案并编辑了我的问题。也许你可以看一看——那太好了!:-)似乎您只能创建一个表单
。也许你必须创建一个表单,并将所有输入(和其他元素)放在该表单中。PyGame的其他GUI元素-但很久没有开发-