import tkinter as tk from tkinter import messagebox import threading import random import time class GamblingGameWithThreads: def __init__(self, root): self.root = root self.root.title("Juego de Azar - Ruleta con Hilos") self.root.geometry("400x400") # Variables del juego self.balance = 100 self.roulette_number = None self.roulette_running = False self.roulette_thread = None # Etiqueta de saldo self.balance_label = tk.Label(self.root, text=f"Saldo: $ {self.balance}", font=("Arial", 14)) self.balance_label.pack(pady=10) # Entrada para la apuesta tk.Label(self.root, text="Tu Apuesta ($):", font=("Arial", 12)).pack() self.bet_entry = tk.Entry(self.root, width=10, font=("Arial", 12)) self.bet_entry.pack(pady=5) # Entrada para elegir número tk.Label(self.root, text="Elige un número (1-10):", font=("Arial", 12)).pack() self.number_entry = tk.Entry(self.root, width=10, font=("Arial", 12)) self.number_entry.pack(pady=5) # Botones de control self.start_button = tk.Button(self.root, text="Iniciar Ruleta", font=("Arial", 12), command=self.start_roulette) self.start_button.pack(pady=10) self.stop_button = tk.Button(self.root, text="Detener Ruleta", font=("Arial", 12), state="disabled", command=self.stop_roulette) self.stop_button.pack(pady=5) # Resultado del juego self.result_label = tk.Label(self.root, text="", font=("Arial", 12), fg="blue") self.result_label.pack(pady=10) # Número de la ruleta en tiempo real self.roulette_label = tk.Label(self.root, text="Ruleta: ---", font=("Arial", 16), fg="red") self.roulette_label.pack(pady=10) def start_roulette(self): """Inicia el giro de la ruleta en un hilo.""" if self.roulette_running: messagebox.showwarning("Advertencia", "La ruleta ya está girando.") return try: bet = int(self.bet_entry.get()) chosen_number = int(self.number_entry.get()) except ValueError: messagebox.showerror("Error", "Por favor, ingresa valores numéricos válidos.") return if bet <= 0 or chosen_number < 1 or chosen_number > 10: messagebox.showwarning("Advertencia", "La apuesta debe ser mayor a $0 y elige un número entre 1 y 10.") return if bet > self.balance: messagebox.showwarning("Advertencia", "No tienes suficiente saldo para esta apuesta.") return self.bet = bet self.chosen_number = chosen_number self.roulette_running = True self.start_button.config(state="disabled") self.stop_button.config(state="normal") # Crear y arrancar el hilo de la ruleta self.roulette_thread = threading.Thread(target=self.spin_roulette) self.roulette_thread.start() def spin_roulette(self): """Simula el giro continuo de la ruleta.""" while self.roulette_running: self.roulette_number = random.randint(1, 10) self.roulette_label.config(text=f"Ruleta: {self.roulette_number}") time.sleep(0.1) def stop_roulette(self): """Detiene la ruleta y evalúa el resultado del juego.""" if not self.roulette_running: return self.roulette_running = False self.start_button.config(state="normal") self.stop_button.config(state="disabled") # Evaluar resultado if self.chosen_number == self.roulette_number: winnings = self.bet * 2 self.balance += winnings self.result_label.config( text=f"¡Ganaste! El número fue {self.roulette_number}. Ganaste $ {winnings}.", fg="green", ) else: self.balance -= self.bet self.result_label.config( text=f"Perdiste. El número fue {self.roulette_number}. Perdiste $ {self.bet}.", fg="red", ) # Actualizar saldo self.balance_label.config(text=f"Saldo: $ {self.balance}") # Revisar si el jugador se quedó sin saldo if self.balance <= 0: messagebox.showinfo("Juego Terminado", "¡Te quedaste sin saldo! Gracias por jugar.") if __name__ == "__main__": root = tk.Tk() app = GamblingGameWithThreads(root) root.mainloop()