124 lines
4.4 KiB
Python
124 lines
4.4 KiB
Python
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()
|