import time import tkinter as tk from tkinter import messagebox import threading import random class TicTacToe: def __init__(self, parent): """ Inicializa el juego de Tic Tac Toe. Args: parent (tk.Frame): Frame donde se colocará el juego. """ self.parent = parent self.board = [""] * 9 # Representación del tablero 3x3 self.current_player = "X" # Jugador que inicia la partida self.vs_computer = False # Modo jugador vs máquina # Título del juego title = tk.Label(self.parent, text="Tic Tac Toe", font=("Helvetica", 16, "bold")) title.pack(pady=10) # Botón para alternar entre modos de juego self.mode_button = tk.Button(self.parent, text="Modo: Jugador vs Jugador", command=self.toggle_mode) self.mode_button.pack(pady=5) # Crear la cuadrícula del tablero self.buttons = [] self.board_frame = tk.Frame(self.parent) self.board_frame.pack() for i in range(9): button = tk.Button( self.board_frame, text="", font=("Helvetica", 20), width=5, height=2, command=self.create_button_command(i) ) button.grid(row=i // 3, column=i % 3) self.buttons.append(button) # Mensaje que indica el turno del jugador self.status_label = tk.Label(self.parent, text="Turno: X", font=("Helvetica", 12)) self.status_label.pack(pady=5) def toggle_mode(self): """Alterna entre los modos Jugador vs Jugador y Jugador vs Máquina.""" self.vs_computer = not self.vs_computer mode_text = "Modo: Jugador vs Máquina" if self.vs_computer else "Modo: Jugador vs Jugador" self.mode_button.config(text=mode_text) self.reset_game() def reset_game(self): """Reinicia el juego a su estado inicial.""" self.board = [""] * 9 self.current_player = "X" for button in self.buttons: button.config(text="", state=tk.NORMAL) self.status_label.config(text="Turno: X") def make_move(self, index): """Registra un movimiento y actualiza el tablero.""" if self.board[index] == "": self.board[index] = self.current_player self.buttons[index].config(text=self.current_player) winner = self.check_winner() if winner: self.end_game(f"¡Ganador: {winner}!") return elif "" not in self.board: self.end_game("¡Empate!") return self.current_player = "O" if self.current_player == "X" else "X" self.status_label.config(text=f"Turno: {self.current_player}") def check_winner(self): """Verifica si hay un ganador en el juego.""" winning_combinations = [ (0, 1, 2), (3, 4, 5), (6, 7, 8), # Filas (0, 3, 6), (1, 4, 7), (2, 5, 8), # Columnas (0, 4, 8), (2, 4, 6) # Diagonales ] for a, b, c in winning_combinations: if self.board[a] == self.board[b] == self.board[c] and self.board[a] != "": return self.board[a] return None