Нет реакции, когда я нажимаю кнопку - PullRequest
0 голосов
/ 03 августа 2020
from tkinter import *
import random

def player_turn():
    if buttons['text'] == ' ':
        buttons['text'] = 'O'

def cpu_turn():
    if buttons['text'] == ' ':
        x = random.randint(1,9)
        btn_list[x]['text'] = 'X'
        
def game():
    while turns < 10 and not win:
        if turns % 2 == 1:
            player_turn()
        else:
            cpu_turn()


            
def click(buttons):
    global clicked
    global player_score
    global cpu_score
    global win
    if (btn1['text'] == 'O' and btn2['text'] == 'O' and btn3['text'] == 'O' or
        btn4['text'] == 'O' and btn5['text'] == 'O' and btn6['text'] == 'O' or
        btn7['text'] == 'O' and btn8['text'] == 'O' and btn9['text'] == 'O' or
        btn1['text'] == 'O' and btn5['text'] == 'O' and btn9['text'] == 'O' or
        btn3['text'] == 'O' and btn5['text'] == 'O' and btn7['text'] == 'O' or
        btn1['text'] == 'O' and btn4['text'] == 'O' and btn7['text'] == 'O' or
        btn2['text'] == 'O' and btn5['text'] == 'O' and btn8['text'] == 'O' or
        btn3['text'] == 'O' and btn6['text'] == 'O' and btn9['text'] == 'O'):
            player_score += 1
            win = True
    elif (btn1['text'] == 'X' and btn2['text'] == 'X' and btn3['text'] == 'X' or
        btn4['text'] == 'X' and btn5['text'] == 'X' and btn6['text'] == 'X' or
        btn7['text'] == 'X' and btn8['text'] == 'X' and btn9['text'] == 'X' or
        btn1['text'] == 'X' and btn5['text'] == 'X' and btn9['text'] == 'X' or
        btn3['text'] == 'X' and btn5['text'] == 'X' and btn7['text'] == 'X' or
        btn1['text'] == 'X' and btn4['text'] == 'X' and btn7['text'] == 'X' or
        btn2['text'] == 'X' and btn5['text'] == 'X' and btn8['text'] == 'X' or
        btn3['text'] == 'X' and btn6['text'] == 'X' and btn9['text'] == 'X'):
            cpu_score += 1
            win = True



window = Tk()
window.title('Tic Tac Toe')


buttons = StringVar()

btn1 = Button(window,text=' ',bg='red',height=4,width=8,command=lambda:click(btn1))
btn1.grid(row=1,column=0)

btn2 = Button(window,text=' ',bg='blue',height=4,width=8,command=lambda:click(btn2))
btn2.grid(row=1,column=1)

btn3 = Button(window,text=' ',bg='red',height=4,width=8,command=lambda:click(btn3))
btn3.grid(row=1,column=2)

btn4 = Button(window,text=' ',bg='blue',height=4,width=8,command=lambda:click(btn4))
btn4.grid(row=2,column=0)

btn5 = Button(window,text=' ',bg='red',height=4,width=8,command=lambda:click(btn5))
btn5.grid(row=2,column=1)

btn6 = Button(window,text=' ',bg='blue',height=4,width=8,command=lambda:click(btn6))
btn6.grid(row=2,column=2)

btn7 = Button(window,text=' ',bg='red',height=4,width=8,command=lambda:click(btn7))
btn7.grid(row=3,column=0)

btn8 = Button(window,text=' ',bg='blue',height=4,width=8,command=lambda:click(btn8))
btn8.grid(row=3,column=1)

btn9 = Button(window,text=' ',bg='red',height=4,width=8,command=lambda:click(btn9))
btn9.grid(row=3,column=2)

btn_list = [btn1,btn2,btn3,btn4,btn5,btn6,btn7,btn8,btn9]

player_score = 0
cpu_score = 0
turn = 1
win = False

Когда я нажимаю кнопку, ошибки нет, но нет никаких эффектов. Здесь я хотел бы установить while l oop при смене ходов между проигрывателем и процессором, но я не знаю, как лучше всего создать такой эффект, так может ли кто-нибудь меня научить? Также как я могу установить, если на кнопке уже есть текст, а затем ее нельзя щелкнуть? Я хотел бы спросить, в чем польза лямбда-функции, потому что я не знаю, когда использовать

1 Ответ

0 голосов
/ 03 августа 2020

Приведенный выше код не будет запущен, поскольку фрейм tkinter виден только в том случае, если скрипт содержит функцию mainl oop (), которая продолжает работать до закрытия окна.

Поэтому добавьте следующую строку в конце:

window.mainloop()

Кроме того, поскольку вы вызываете функцию click () вместе с переданной кнопкой, это будет единственная функция для получения выполнен. Он не содержит вызова какой-либо из трех функций, а именно:

game()
cpu_turn()
player_turn()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...