Implementacion de juego Gamblingº

This commit is contained in:
Kevin William Olarte Braun 2024-12-14 20:38:11 +01:00
parent 9e31b32664
commit 3b8fff8caa
8 changed files with 19899 additions and 56 deletions

View File

@ -4,6 +4,7 @@ from MainView import MainView
from models.NetworkingScanner import NetworkScanner from models.NetworkingScanner import NetworkScanner
from models.Sniffer import packet_callback, sniff from models.Sniffer import packet_callback, sniff
from models.MusicPlayer import MusicPlayerModel from models.MusicPlayer import MusicPlayerModel
from models.GamblingGameModel import GamblingGameModel
import tkinter as tk import tkinter as tk
import time import time
import datetime import datetime
@ -17,6 +18,9 @@ class MainController:
self.connect_events() self.connect_events()
self.start_system_updates() self.start_system_updates()
self.music_model = MusicPlayerModel() self.music_model = MusicPlayerModel()
self.game_model = GamblingGameModel()
self.roulette_running = False
self.roulette_thread = None
def connect_events(self): def connect_events(self):
"""Conecta los eventos de la vista con las funciones del controlador.""" """Conecta los eventos de la vista con las funciones del controlador."""
@ -29,6 +33,10 @@ class MainController:
self.view.button_stop_music.config(command=self.stop_song) self.view.button_stop_music.config(command=self.stop_song)
self.view.button_refresh_music.config(command=self.refresh_songs) self.view.button_refresh_music.config(command=self.refresh_songs)
"""Conecta los eventos de la vista con las funciones del controlador."""
self.view.button_start_roulette.config(command=self.start_roulette)
self.view.button_stop_roulette.config(command=self.stop_roulette)
def start_sniffer_thread(self): def start_sniffer_thread(self):
"""Inicia el sniffer en un hilo separado.""" """Inicia el sniffer en un hilo separado."""
@ -173,3 +181,73 @@ class MainController:
self.load_songs() self.load_songs()
print(self.message) print(self.message)
def start_roulette(self):
"""Inicia el giro de la ruleta en un hilo."""
if self.roulette_running:
return
try:
bet = int(self.view.bet_entry.get())
chosen_number = int(self.view.number_entry.get())
except ValueError:
self.view.result_label.config(text="Por favor, ingresa valores numéricos válidos.", foreground="red")
return
if bet <= 0 or chosen_number < 1 or chosen_number > 10:
self.view.result_label.config(
text="La apuesta debe ser mayor a 0 y elige un número entre 1 y 10.", foreground="red"
)
return
if bet > self.game_model.get_balance():
self.view.result_label.config(text="No tienes suficiente saldo para esta apuesta.", foreground="red")
return
self.game_model.set_bet(bet)
self.game_model.set_chosen_number(chosen_number)
self.roulette_running = True
self.view.button_start_roulette.config(state="disabled")
self.view.button_stop_roulette.config(state="normal")
# Inicia 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.game_model.spin_roulette()
roulette_number = self.game_model.get_roulette_number()
self.view.roulette_label.config(text=f"Ruleta: {roulette_number}")
time.sleep(0.1)
def stop_roulette(self):
"""Detiene la ruleta y evalúa el resultado."""
if not self.roulette_running:
return
self.roulette_running = False
self.view.button_start_roulette.config(state="normal")
self.view.button_stop_roulette.config(state="disabled")
# Evaluar el resultado del juego
won, amount = self.game_model.evaluate_result()
if won:
self.view.result_label.config(
text=f"¡Ganaste! Número: {self.game_model.get_roulette_number()}. Ganaste $ {amount}.", foreground="green"
)
else:
self.view.result_label.config(
text=f"Perdiste. Número: {self.game_model.get_roulette_number()}. Perdiste $ {amount}.", foreground="red"
)
# Actualizar saldo en la vista
self.view.balance_label.config(text=f"Saldo: ${self.game_model.get_balance()}")
# Verificar saldo
if self.game_model.get_balance() <= 0:
self.view.result_label.config(
text="¡Te quedaste sin saldo! Gracias por jugar.", foreground="red"
)
self.view.button_start_roulette.config(state="disabled")

View File

@ -59,12 +59,16 @@ class MainView:
self.notebook.add(tab3, text="Sniffer") self.notebook.add(tab3, text="Sniffer")
self.create_sniffer_ui(tab3) self.create_sniffer_ui(tab3)
# Solapas 4-5: Vacías # Solapa 4: Juego de Azar
for i in range(4, 6): tab4 = ttk.Frame(self.notebook)
tab = ttk.Frame(self.notebook) self.notebook.add(tab4, text="Juego de Azar")
self.notebook.add(tab, text=f"Solapa {i}") self.create_gambling_game_ui(tab4)
label = ttk.Label(tab, text=f"Contenido de la Solapa {i}")
label.pack(pady=10) # Solapa 5 vacía
tab5 = ttk.Frame(self.notebook)
self.notebook.add(tab5, text="Solapa 5")
label = ttk.Label(tab5, text="Contenido de la Solapa 5")
label.pack(pady=10)
def create_tracker_ui(self, tab): def create_tracker_ui(self, tab):
"""Crea la interfaz de usuario para el rastreador de IP en la solapa 1.""" """Crea la interfaz de usuario para el rastreador de IP en la solapa 1."""
@ -151,3 +155,37 @@ class MainView:
if songs: if songs:
for song in songs: for song in songs:
self.music_listbox.insert(tk.END, song) self.music_listbox.insert(tk.END, song)
def create_gambling_game_ui(self, tab):
"""Crea la interfaz de usuario para el juego de azar en la Solapa 4."""
label = ttk.Label(tab, text="Juego de Azar - Ruleta", font=("Arial", 16))
label.pack(pady=10)
# Saldo actual
self.balance_label = ttk.Label(tab, text="Saldo: $100", font=("Arial", 12))
self.balance_label.pack(pady=5)
# Entrada para la apuesta
ttk.Label(tab, text="Apuesta ($):").pack(pady=5)
self.bet_entry = ttk.Entry(tab, width=20)
self.bet_entry.pack(pady=5)
# Entrada para el número
ttk.Label(tab, text="Elige un número (1-10):").pack(pady=5)
self.number_entry = ttk.Entry(tab, width=20)
self.number_entry.pack(pady=5)
# Botones
self.button_start_roulette = ttk.Button(tab, text="Iniciar Ruleta")
self.button_start_roulette.pack(pady=10)
self.button_stop_roulette = ttk.Button(tab, text="Detener Ruleta", state="disabled")
self.button_stop_roulette.pack(pady=5)
# Resultado del juego
self.roulette_label = ttk.Label(tab, text="Ruleta: ---", font=("Arial", 14), foreground="red")
self.roulette_label.pack(pady=10)
self.result_label = ttk.Label(tab, text="", font=("Arial", 12), foreground="blue")
self.result_label.pack(pady=10)

Binary file not shown.

View File

@ -0,0 +1,40 @@
import random
class GamblingGameModel:
def __init__(self):
"""Inicializa el modelo con un saldo inicial."""
self.balance = 100
self.bet = 0
self.chosen_number = 0
self.roulette_number = None
def set_bet(self, bet):
"""Establece la apuesta."""
self.bet = bet
def set_chosen_number(self, number):
"""Establece el número elegido."""
self.chosen_number = number
def spin_roulette(self):
"""Genera un número aleatorio para la ruleta."""
self.roulette_number = random.randint(1, 10)
def evaluate_result(self):
"""Evalúa si el jugador gana o pierde."""
if self.chosen_number == self.roulette_number:
winnings = self.bet * 2
self.balance += winnings
return True, winnings
else:
self.balance -= self.bet
return False, self.bet
def get_balance(self):
"""Retorna el saldo actual."""
return self.balance
def get_roulette_number(self):
"""Retorna el número actual de la ruleta."""
return self.roulette_number

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@ -1,60 +1,123 @@
import tkinter as tk import tkinter as tk
from tkinter import messagebox, Listbox from tkinter import messagebox
from models.MusicPlayer import MusicPlayerModel import threading
import random
import time
class MusicPlayerApp:
class GamblingGameWithThreads:
def __init__(self, root): def __init__(self, root):
self.root = root self.root = root
self.root.title("Reproductor de Música") self.root.title("Juego de Azar - Ruleta con Hilos")
self.root.geometry("400x300") self.root.geometry("400x400")
self.player = MusicPlayerModel() # Variables del juego
self.songs, self.message = self.player.load_songs() self.balance = 100
self.roulette_number = None
self.roulette_running = False
self.roulette_thread = None
# Lista de canciones # Etiqueta de saldo
self.song_listbox = Listbox(self.root, bg="white", fg="black", font=("Arial", 12)) self.balance_label = tk.Label(self.root, text=f"Saldo: $ {self.balance}", font=("Arial", 14))
self.song_listbox.pack(fill=tk.BOTH, expand=True, padx=10, pady=10) self.balance_label.pack(pady=10)
self.refresh_song_list()
# Botones # Entrada para la apuesta
self.button_frame = tk.Frame(self.root) tk.Label(self.root, text="Tu Apuesta ($):", font=("Arial", 12)).pack()
self.button_frame.pack(pady=10) self.bet_entry = tk.Entry(self.root, width=10, font=("Arial", 12))
self.bet_entry.pack(pady=5)
self.play_button = tk.Button(self.button_frame, text="Reproducir", command=self.play_song, width=12) # Entrada para elegir número
self.play_button.grid(row=0, column=0, padx=5) 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)
self.stop_button = tk.Button(self.button_frame, text="Detener", command=self.stop_song, width=12) # Botones de control
self.stop_button.grid(row=0, column=1, padx=5) self.start_button = tk.Button(self.root, text="Iniciar Ruleta", font=("Arial", 12), command=self.start_roulette)
self.start_button.pack(pady=10)
self.refresh_button = tk.Button(self.button_frame, text="Actualizar", command=self.refresh_song_list, width=12) self.stop_button = tk.Button(self.root, text="Detener Ruleta", font=("Arial", 12), state="disabled", command=self.stop_roulette)
self.refresh_button.grid(row=0, column=2, padx=5) self.stop_button.pack(pady=5)
def refresh_song_list(self): # Resultado del juego
"""Carga las canciones en el Listbox desde la carpeta resources.""" self.result_label = tk.Label(self.root, text="", font=("Arial", 12), fg="blue")
self.songs, self.message = self.player.load_songs() self.result_label.pack(pady=10)
self.song_listbox.delete(0, tk.END)
if self.songs:
for song in self.songs:
self.song_listbox.insert(tk.END, song)
else:
messagebox.showinfo("Información", self.message)
def play_song(self): # Número de la ruleta en tiempo real
"""Reproduce la canción seleccionada.""" self.roulette_label = tk.Label(self.root, text="Ruleta: ---", font=("Arial", 16), fg="red")
selected = self.song_listbox.curselection() self.roulette_label.pack(pady=10)
if not selected:
messagebox.showwarning("Advertencia", "Selecciona una canción para reproducir.") 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 return
song_name = self.song_listbox.get(selected)
message = self.player.play_song(song_name)
messagebox.showinfo("Reproduciendo", message)
def stop_song(self): try:
"""Detiene la reproducción.""" bet = int(self.bet_entry.get())
message = self.player.stop_song() chosen_number = int(self.number_entry.get())
messagebox.showinfo("Detenido", message) 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__": if __name__ == "__main__":
root = tk.Tk() root = tk.Tk()
app = MusicPlayerApp(root) app = GamblingGameWithThreads(root)
root.mainloop() root.mainloop()