import tkinter as tk

class TicTacToeApp:
    def __init__(self, root):
        self.root = root
        self.root.title("Крестики-нолики")
        self.board = ['' for _ in range(9)]
        self.player_wins = 0
        self.computer_wins = 0
        self.draws = 0
        self.game_over = False
        self.buttons = []
        self.create_widgets()
        self.new_game()

    def create_widgets(self):
        self.result_label = tk.Label(self.root, text='', font=('Arial', 16))
        self.result_label.grid(row=0, column=0, columnspan=3, pady=10)

        board_frame = tk.Frame(self.root)
        board_frame.grid(row=1, column=0, columnspan=3)

        for i in range(9):
            btn = tk.Button(board_frame, text='', font=('Arial', 20), width=5, height=2,
                            command=lambda idx=i: self.on_click(idx))
            btn.grid(row=i//3, column=i%3, padx=2, pady=2)
            self.buttons.append(btn)

        self.new_game_button = tk.Button(self.root, text='Новая игра', command=self.new_game, font=('Arial', 12))
        self.new_game_button.grid(row=2, column=0, columnspan=3, pady=10)

        self.score_label = tk.Label(self.root, text='', font=('Arial', 12))
        self.score_label.grid(row=3, column=0, columnspan=3, pady=5)
        self.update_score()

    def new_game(self):
        self.board = ['' for _ in range(9)]
        self.game_over = False
        self.result_label.config(text='')
        for btn in self.buttons:
            btn.config(text='', bg='SystemButtonFace', state=tk.NORMAL)
        self.update_score()

    def on_click(self, idx):
        if self.game_over or self.board[idx] != '':
            return
        self.make_move(idx, 'X')
        if not self.game_over:
            self.computer_move()

    def make_move(self, idx, player):
        self.board[idx] = player
        self.buttons[idx].config(text=player)
        winner, line = self.check_winner(self.board)
        if winner:
            self.end_game(winner, line)
        elif all(cell != '' for cell in self.board):
            self.end_game(None, [])

    def computer_move(self):
        idx = self.get_computer_move()
        if idx is not None:
            self.make_move(idx, 'O')

    def get_computer_move(self):
        empty_cells = [i for i in range(9) if self.board[i] == '']
        if not empty_cells:
            return None

        for player in ['O', 'X']:
            for cell in empty_cells:
                board_copy = self.board.copy()
                board_copy[cell] = player
                winner, _ = self.check_winner(board_copy)
                if winner == player:
                    return cell

        if 4 in empty_cells:
            return 4

        corners = [0, 2, 6, 8]
        empty_corners = [c for c in corners if c in empty_cells]
        if empty_corners:
            return empty_corners[0]

        return empty_cells[0]

    def check_winner(self, board):
        win_combinations = [
            (0, 1, 2), (3, 4, 5), (6, 7, 8),
            (0, 3, 6), (1, 4, 7), (2, 5, 8),
            (0, 4, 8), (2, 4, 6)
        ]
        for combo in win_combinations:
            if board[combo[0]] == board[combo[1]] == board[combo[2]] != '':
                return board[combo[0]], list(combo)
        return None, []

    def end_game(self, winner, line):
        self.game_over = True
        for btn in self.buttons:
            btn.config(state=tk.DISABLED)
        if winner == 'X':
            self.result_label.config(text='Вы победили')
            self.player_wins += 1
        elif winner == 'O':
            self.result_label.config(text='Победил компьютер')
            self.computer_wins += 1
        else:
            self.result_label.config(text='Ничья')
            self.draws += 1
        if line:
            for idx in line:
                self.buttons[idx].config(bg='#90EE90')
        self.update_score()

    def update_score(self):
        self.score_label.config(text=f'Победы: {self.player_wins}   Поражения: {self.computer_wins}   Ничьи: {self.draws}')

def main():
    root = tk.Tk()
    app = TicTacToeApp(root)
    root.mainloop()

if __name__ == '__main__':
    main()