2016-12-07 2 views
0

В настоящий момент код выполняет следующий оператор if if под функцией computer_move *. Я хочу, чтобы он подождал, пока игрок нажмет другую кнопку. Прямо сейчас, код помещает x, прежде чем игрок нажимает кнопку, чтобы поместить «o».Как заставить python ждать своего поворота (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' и кнопка отключения с помощью 'Button (доска, текст = "х", состояние = "отключено")' и программа может» t запускает событие 'computer_move()' при нажатии кнопки. – furas

+0

Что вы пытаетесь сделать в 'if [" text "] и c [" text "] ==" x "или" o ": # *'? Он проверяет 'if (a [" text "]) и (c [" text "] ==" x ") или (" o "):' – furas

+0

что вы пытаетесь сделать с 'widget [" o "]' ? 'widget' не имеет свойства« o », у него есть свойство« text »-' widget ["text"] '- который может иметь значение' 'o" или '" x "(или другое) – furas

ответ

1

код не установлен x но вы делаете это в строке

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

так удалить text="x", state="disabled"


КСТАТИ:

widget["o"] неверен - кнопка не имеют имущество с именем "o".
Он имеет свойство "text" - widget["text"] - которые могут иметь значение "o" или "x"

if a["text"] and c["text"] == "x" or "o": довольно incorrent. Особенно

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

Он должен быть

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

или

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

Я думаю, что вы пытаетесь сделать

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

Лучше держать кнопку в списке - вы может использовать for цикл, чтобы проверить все кнопки s в 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() 
Смежные вопросы