ProjectKevin/pruebas.py

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()