diff --git a/src/services/__pycache__/system_monitor.cpython-313.pyc b/src/services/__pycache__/system_monitor.cpython-313.pyc index ce33be4..0953971 100644 Binary files a/src/services/__pycache__/system_monitor.cpython-313.pyc and b/src/services/__pycache__/system_monitor.cpython-313.pyc differ diff --git a/src/services/__pycache__/tetris_game.cpython-313.pyc b/src/services/__pycache__/tetris_game.cpython-313.pyc index 23cc510..f8b964b 100644 Binary files a/src/services/__pycache__/tetris_game.cpython-313.pyc and b/src/services/__pycache__/tetris_game.cpython-313.pyc differ diff --git a/src/services/__pycache__/threaden_task.cpython-313.pyc b/src/services/__pycache__/threaden_task.cpython-313.pyc index eb9c2f7..eddb8e9 100644 Binary files a/src/services/__pycache__/threaden_task.cpython-313.pyc and b/src/services/__pycache__/threaden_task.cpython-313.pyc differ diff --git a/src/services/__pycache__/threads_manager.cpython-313.pyc b/src/services/__pycache__/threads_manager.cpython-313.pyc index 8162fb8..70d9f2d 100644 Binary files a/src/services/__pycache__/threads_manager.cpython-313.pyc and b/src/services/__pycache__/threads_manager.cpython-313.pyc differ diff --git a/src/services/tetris_game.py b/src/services/tetris_game.py index 318e45f..8c48ee0 100644 --- a/src/services/tetris_game.py +++ b/src/services/tetris_game.py @@ -10,13 +10,13 @@ class TetrisGame(tk.Canvas): self.grid = [[0] * self.cols for _ in range(self.rows)] self.current_piece = None - self.running = True + self.running = False self.init_game() def init_game(self): self.bind_all("", self.handle_keypress) self.spawn_piece() - self.update_game() + #self.update_game() def spawn_piece(self): shapes = [ @@ -106,7 +106,7 @@ class TetrisGame(tk.Canvas): self.rotate_piece() def update_game(self): - if self.running: + if self.running and self.winfo_exists(): if not self.can_move(1, 0): self.place_piece() else: diff --git a/src/services/threaden_task.py b/src/services/threaden_task.py index 30c88d3..d0fea81 100644 --- a/src/services/threaden_task.py +++ b/src/services/threaden_task.py @@ -19,4 +19,5 @@ class ThreadenTask: """Detiene el hilo""" self.running = False if self.thread: - self.thread.join() \ No newline at end of file + self.thread.join(timeout=1) + self.thread = None \ No newline at end of file diff --git a/src/services/threads_manager.py b/src/services/threads_manager.py index 0035300..8db2c52 100644 --- a/src/services/threads_manager.py +++ b/src/services/threads_manager.py @@ -5,6 +5,7 @@ import random from services.threaden_task import ThreadenTask from services.system_monitor import SystemMonitor +from services.tetris_game import TetrisGame class ThreadsManager: """Constructor""" @@ -15,6 +16,7 @@ class ThreadsManager: "time": ThreadenTask(), "temperature": ThreadenTask(), "emails":ThreadenTask(), + "tetris_game":ThreadenTask(), } self.system_monitor_tasks = {} @@ -41,20 +43,40 @@ class ThreadsManager: metric ) + if hasattr(self.ui_instance, "tetris_game"): + self.tasks["tetris_game"].start(self.update_tetris_game) + def stop_threads(self): """Recorre tasks y para los hilos""" - for task in self.tasks.values(): + for name, task in self.tasks.items(): task.stop() + print(f"Hilo '{name}' detenido") - for task in self.system_monitor_tasks.values(): + for name, task in self.system_monitor_tasks.items(): task.stop() + print(f"Hilo de monitor del sistema '{name}' detenido.") if self.system_monitor: self.system_monitor.running = False + def update_tetris_game(self): + """Ciclo de actualizacion del tetris game""" + while self.tasks["tetris_game"].running: + try: + if self.ui_instance.tetris_game.running and self.ui_instance.tetris_game.winfo_exists(): + self.ui_instance.tetris_game.update_game() + time.sleep(0.5) + except Exception as e: + print(f"Error en update_tetris_game: {e}") + break + + + + + def update_system_metric(self, metric): """Actualiza una métrica específica del monitor del sistema.""" diff --git a/src/ui/__pycache__/centered_window.cpython-313.pyc b/src/ui/__pycache__/centered_window.cpython-313.pyc index 3bdf8ae..d8115cf 100644 Binary files a/src/ui/__pycache__/centered_window.cpython-313.pyc and b/src/ui/__pycache__/centered_window.cpython-313.pyc differ diff --git a/src/ui/centered_window.py b/src/ui/centered_window.py index 315dd4f..1bb970d 100644 --- a/src/ui/centered_window.py +++ b/src/ui/centered_window.py @@ -56,6 +56,13 @@ class CenteredWindow(ctk.CTk): def on_close(self): """Maneja el cierre de la ventana""" self.thread_manager.stop_threads() + + if hasattr(self, "tetris_game") and self.tetris_game.running: + self.tetris_game.stop_game() + + if "tetris_game" in self.thread_manager.tasks: + self.thread_manager.tasks["tetris_game"].stop() + self.destroy() @@ -141,7 +148,7 @@ class CenteredWindow(ctk.CTk): """Método para iniciar el juego.""" if not self.tetris_game.running: self.tetris_game.running = True - self.tetris_game.update_game() + #self.tetris_game.update_game()