2016-12-07 2 views
0

지금 코드는 computer_move 함수 * 아래에서 다음 if 문을 실행합니다. 플레이어가 다른 버튼을 클릭 할 때까지 기다리 길 원합니다. 지금 코드는 플레이어가 버튼을 클릭하여 "o"를 배치하기 전에 x를 배치합니다.파이썬이 그것의 차례를 기다리는 법 (tkinter)

import tkinter as tk 

board = tk.Tk() 

def player_move(widget): 
    if widget["o"] not in ("o", "x"): 
     widget["text"] = "o" 
     widget["state"] = "disabled" 
     computer_move() 

def computer_move(): 
    if i["text"] == "Open Space": 
     i["text"] = "x" 
     i["state"] = "disabled" 
    else: 
     c["text"] = "x" 
     c["state"] = "disabled" 
    if a["text"] and c["text"] == "x" or "o": # * 
     b["text"] = "x" 
     b["state"] = "disabled" 

board.geometry("400x500") 
board.title("Board") 

buttons = [] 

a = tk.Button(board, text="x", state = "disabled") 
a["command"] = lambda x=a:player_move(x) 
a.grid(row=0, column = 0) 
buttons.append(a) 

board.mainloop() 
+0

코드들'if' statemante을 실행하지 않습니다 - 당신은''버튼을 사용하여 x' 및 비활성화 단추 세트 (보드, 텍스트 = 'x'를, 상태 = "비활성화") '프로그램은'수 버튼을 클릭하면 이벤트'computer_move()'가 실행됩니다. – furas

+0

[텍스트 "] 및 c ["텍스트 "] =="x "또는"o "인 경우'# *'에서 무엇을하려고합니까? – furas

+0

위젯 [ "o"]'으로 무엇을하려고합니까?'("["텍스트 "])와 (c ["text "] =="x " ? 'widget'은 속성 "o"를 가지고 있지 않습니다. 속성 "text"- widget [ "text"]'- 값 ""o "'또는" "x"'(또는 기타)를 가질 수 있습니다 – furas

답변

1

코드 x를 설정하지 않습니다하지만 당신이 그렇게 text="x", state="disabled"


BTW 제거 라인

a = tk.Button(board, text="x", state= "disabled") 

에서 할 :

widget["o"]하는 것은 잘못된 것입니다 - 버튼을하지 않습니다 이름이 "o" 인 속성이 있어야합니다. widget["text"] - -
그것은 재산을 "text"을 가지고 "o" 또는

if a["text"] and c["text"] == "x" or "o":"x" 오히려 incorrent입니다 값을 가질 수있다. 특히

c["text"] == "x" or "o" 

이 있어야한다

c["text"] == "x" or c["text"] == "o" 

또는

나는 당신이이 목록에 버튼을 계속하는 것이 좋습니다

if a["text"] in ("x", "o") and c["text"] in ("x", "o"): 

을하려고 생각

c["text"] in ("x", "o") 

- 당신 for 루프를 사용하여 모든 버튼을 확인할 수 있음 computer_move

import tkinter as tk 

# --- functions --- 

def player_move(btn): 
    # if button is empty 
    if btn["text"] not in ("o", "x"): 
     # then set `o` and disable button 
     btn["text"] = "o" 
     btn["state"] = "disabled" 
     # and make comuter move 
     computer_move() 

def computer_move(): 
    # check all buttons 
    for btn in buttons: 
     # if button is empty 
     if btn["text"] not in ("o", "x"): 
      # then set `x` and disable button 
      btn["text"] = "x" 
      btn["state"] = "disabled" 
      # and skip checking other buttons 
      break 

# --- main --- 

board = tk.Tk() 

board.geometry("400x500") 
board.title("Board") 

buttons = [] 

for row in range(3): 
    for col in range(3): 
     btn = tk.Button(board, width=1) 
     btn["command"] = lambda x=btn:player_move(x) 
     btn.grid(row=row, column=col) 
     buttons.append(btn) 

board.mainloop()