如何在Python中的while True循环中接受键盘输入,该循环会导致仍在运行的操作



我正在开发一款迷你游戏,请耐心听我的代码。我刚刚启动了python,如果屏幕上有某个图像(韩国符号(,用户在相应的美国键盘上按下该键,那么该图像将消失,并在屏幕上创建一个新的图像。我该如何注册关键标记,并确保它们以最简单的方式与正确的图像相对应?

这被放在一个类中:

korean_characters = [a, e, i, o, u, eo, eu, ae,
ya, ye, yo, yu, yeo, yae,
g, kk, n, d, tt, l, m, b, pp, s, ss, ng, j, jj, ch, k, t, p, h]

每个字母对应一个矩阵,如下所示:

a = [[1, 0],
[1, 0],
[1, 1],
[1, 0],
[1, 0]
]

然后将这些绘制到占据窗口的大网格上。它们根据以下循环移动和注册:

while True:
wn.update()
end_game = False
for i in symbol_list:
if i.y == 48 - i.height + 1:
i.erase_symbol(grid)
symbol_list.remove(i)
end_game = True
elif i.can_move(grid) and i.check_grid(grid):
# Erase current shape
i.erase_symbol(grid)
i.y += 1
i.draw_symbol(grid)
else:
i.erase_symbol(grid)
symbol_list.remove(i)
symbol_list.append(Korean())

draw_grid(pen, grid)
draw_redline()
time.sleep(delay)
if end_game:
break
print("GAME OVER")

符号列表只是一个包含3到9个类对象(矩阵(的列表

因此,在我给出的例子中,屏幕上的"a"矩阵对应于美国键盘上的"k"。我如何使它在按下k时被注册,并可以与korean_characters列表进行比较。它应该能够接受任何按键,甚至像"shift+e"这样的组合。如果我能在这方面得到帮助,我知道如何让它们消失。

经过一些考验和磨难,我实际上找到了一个使用turtle onkeypress((和一些自定义函数的解决方案。

对于每个符号,都有一个与之相关的函数:

def check_a():
for c in symbol_list:
if c.symbol_name == dict_symbol_index['k']:
c.erase_symbol(grid)
symbol_list.remove(c)
symbol_list.append(Korean())

然后使用海龟模块和功能,将其与各自的密钥进行比较:

wn.onkeypress(check_a, 'k')
...
wn.listen()

最新更新