我想通过输入的按键在我的棋盘上(在游戏十五中)翻转牌。它适用于上/下/右/左,但不适用于数字键1 ... 9,即使它们的坐标在我的play()函数中正确更新,它仍然无法移动到板。我的完整代码是:http://pastebin.com/KvL2JF1G任何提示??
这是我的重要事件:
def key(event):
if event.char.isdigit():
for j, row in enumerate(board):
for i, char in enumerate(row):
if char.get() == event.char:
print "pressed", repr(event.char),i, j
play(i,j)
现在主要部分在play()中,它改变了每个标签中的string_vars,这些标签用空标签进行交换(blankx,y是空白空间的坐标):
def play(i,j):
global blankx, blanky, game_running
if game_running:
# update vars if tile can be moved
if (blankx, blanky) in [(i+1,j),(i-1,j),(i,j+1),(i,j-1)]:
board[blanky][blankx].set(board[j][i].get())
board[j][i].set(' ')
blanky = j
blankx = i
这适用于所有可视化和事件:
for j, row in enumerate(board):
for i, string_var in enumerate(row):
b = Label(frame, textvariable=string_var, bg='pink', width=2, height=1, font=("Times", 30, 'bold'), relief=RAISED)
b.grid(row=j, column=i, sticky="nsew", ipadx=8, padx=4, pady=4)
b.bind('<Button-1>',lambda e, i=i,j=j:play(i,j))
b.bind('<Key>', key)
b.bind('<Right>', right_Key)
# ... same function for left/up/down
b.focus_set()
答案 0 :(得分:0)
在key()
中,你必须在移动时停止检查棋盘。
现在key()
将磁贴移动到新位置,然后它仍在搜索,并在新位置找到相同的磁贴,并将其移动到旧位置。
顺便说一句:看到在控制台中打印的文字 - 你看到"pressed"
两次。
您需要return
停止搜索。
def key(event):
print(event.widget)
if event.char.isdigit():
for j, row in enumerate(board):
for i, char in enumerate(row):
if char.get() == event.char:
print "pressed", repr(event.char),i, j, blankx,blanky
play(i,j)
return # stop searching