Implemetacion de la tercra solapa que es el juego del tictactou
This commit is contained in:
		
							parent
							
								
									19b77c2349
								
							
						
					
					
						commit
						332d0465b6
					
				
							
								
								
									
										11
									
								
								app/main.py
								
								
								
								
							
							
						
						
									
										11
									
								
								app/main.py
								
								
								
								
							|  | @ -1,19 +1,19 @@ | ||||||
|  | import threading | ||||||
| import tkinter as tk | import tkinter as tk | ||||||
| from tkinter import Menu | from tkinter import Menu | ||||||
| from tkinter import ttk | from tkinter import ttk | ||||||
| import threading |  | ||||||
| 
 | 
 | ||||||
|  | from app.ConfigMgr import ConfigMgr | ||||||
| from app.chat_server.Server import Server | from app.chat_server.Server import Server | ||||||
| from app.widgets import ClockLabel | from app.widgets import ClockLabel | ||||||
| from app.ConfigMgr import ConfigMgr |  | ||||||
| from app.widgets.ChatTab import ChatTab | from app.widgets.ChatTab import ChatTab | ||||||
| from app.widgets.MusicDownloadTab import MusicDownloadTab | from app.widgets.MusicDownloadTab import MusicDownloadTab | ||||||
| from app.widgets.MusicPlayerTab import MusicPlayerTab | from app.widgets.MusicPlayerTab import MusicPlayerTab | ||||||
|  | from app.widgets.TicTacToeTab import TicTacToeTab | ||||||
| from app.widgets.TodoTab import TodoTab | from app.widgets.TodoTab import TodoTab | ||||||
| from app.widgets.UsageLabels import CPULabel, RAMLabel, BatteryLabel, NetworkLabel | from app.widgets.UsageLabels import CPULabel, RAMLabel, BatteryLabel, NetworkLabel | ||||||
| from app.widgets.WeatherTab import WeatherTab | from app.widgets.WeatherTab import WeatherTab | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| stop_event = threading.Event() | stop_event = threading.Event() | ||||||
| 
 | 
 | ||||||
| def on_closing(): | def on_closing(): | ||||||
|  | @ -128,6 +128,11 @@ todo_tab = TodoTab(notebook, stop_event=stop_event) | ||||||
| todo_tab.pack(fill="both", expand=True) | todo_tab.pack(fill="both", expand=True) | ||||||
| notebook.add(todo_tab, text="Todo List") | notebook.add(todo_tab, text="Todo List") | ||||||
| 
 | 
 | ||||||
|  | # Add the TodoTab to the notebook | ||||||
|  | tic_tac_toe_tab =   TicTacToeTab(notebook, stop_event=stop_event) | ||||||
|  | tic_tac_toe_tab.pack(fill="both", expand=True) | ||||||
|  | notebook.add(tic_tac_toe_tab, text="Tic Tac Toe") | ||||||
|  | 
 | ||||||
| # Create the chat and music player frames within the right frame | # Create the chat and music player frames within the right frame | ||||||
| frame_chat = tk.Frame(frame_right, bg="lightgreen") | frame_chat = tk.Frame(frame_right, bg="lightgreen") | ||||||
| frame_music_player = tk.Frame(frame_right) | frame_music_player = tk.Frame(frame_right) | ||||||
|  |  | ||||||
|  | @ -0,0 +1,83 @@ | ||||||
|  | import tkinter as tk | ||||||
|  | from tkinter import Frame, Button, Label, StringVar, messagebox | ||||||
|  | from app.widgets.abc import ThreadedTab | ||||||
|  | 
 | ||||||
|  | class TicTacToeTab(ThreadedTab): | ||||||
|  | 
 | ||||||
|  |     def __init__(self, root: Frame | tk.Tk, **kwargs): | ||||||
|  |         self.current_player = StringVar(value="X")  # Start with player X | ||||||
|  |         self.board = [[None for _ in range(3)] for _ in range(3)]  # 3x3 board | ||||||
|  |         super().__init__(root, **kwargs) | ||||||
|  | 
 | ||||||
|  |     def build(self): | ||||||
|  |         # Create the main frame for the Tic Tac Toe interface | ||||||
|  |         self.game_frame = Frame(self) | ||||||
|  |         self.game_frame.pack(fill="both", expand=True) | ||||||
|  | 
 | ||||||
|  |         # Create the label to display the current player | ||||||
|  |         self.player_label = Label(self.game_frame, textvariable=self.current_player, font=("Arial", 16)) | ||||||
|  |         self.player_label.pack(padx=5, pady=5) | ||||||
|  | 
 | ||||||
|  |         # Create the grid for the Tic Tac Toe board | ||||||
|  |         self.board_frame = Frame(self.game_frame) | ||||||
|  |         self.board_frame.pack(expand=True) | ||||||
|  | 
 | ||||||
|  |         for row in range(3): | ||||||
|  |             for col in range(3): | ||||||
|  |                 button = Button( | ||||||
|  |                     self.board_frame, | ||||||
|  |                     text="", | ||||||
|  |                     font=("Arial", 24), | ||||||
|  |                     width=5, | ||||||
|  |                     height=2, | ||||||
|  |                     command=lambda r=row, c=col: self.make_move(r, c) | ||||||
|  |                 ) | ||||||
|  |                 button.grid(row=row, column=col, padx=5, pady=5) | ||||||
|  |                 self.board[row][col] = button | ||||||
|  | 
 | ||||||
|  |     def make_move(self, row, col): | ||||||
|  |         button = self.board[row][col] | ||||||
|  |         # Check if the cell is already occupied | ||||||
|  |         if button["text"] == "": | ||||||
|  |             button["text"] = self.current_player.get() | ||||||
|  |             if self.check_winner(): | ||||||
|  |                 messagebox.showinfo("Game Over", f"Player {self.current_player.get()} wins!") | ||||||
|  |                 self.reset_board() | ||||||
|  |             elif self.is_draw(): | ||||||
|  |                 messagebox.showinfo("Game Over", "It's a draw!") | ||||||
|  |                 self.reset_board() | ||||||
|  |             else: | ||||||
|  |                 self.switch_player() | ||||||
|  |         else: | ||||||
|  |             messagebox.showwarning("Invalid Move", "This cell is already taken!") | ||||||
|  | 
 | ||||||
|  |     def switch_player(self): | ||||||
|  |         self.current_player.set("O" if self.current_player.get() == "X" else "X") | ||||||
|  | 
 | ||||||
|  |     def check_winner(self): | ||||||
|  |         # Check rows, columns, and diagonals | ||||||
|  |         for i in range(3): | ||||||
|  |             if self.board[i][0]["text"] == self.board[i][1]["text"] == self.board[i][2]["text"] != "": | ||||||
|  |                 return True | ||||||
|  |             if self.board[0][i]["text"] == self.board[1][i]["text"] == self.board[2][i]["text"] != "": | ||||||
|  |                 return True | ||||||
|  |         if self.board[0][0]["text"] == self.board[1][1]["text"] == self.board[2][2]["text"] != "": | ||||||
|  |             return True | ||||||
|  |         if self.board[0][2]["text"] == self.board[1][1]["text"] == self.board[2][0]["text"] != "": | ||||||
|  |             return True | ||||||
|  |         return False | ||||||
|  | 
 | ||||||
|  |     def is_draw(self): | ||||||
|  |         # Check if all cells are filled | ||||||
|  |         return all(self.board[row][col]["text"] != "" for row in range(3) for col in range(3)) | ||||||
|  | 
 | ||||||
|  |     def reset_board(self): | ||||||
|  |         # Clear the board | ||||||
|  |         for row in range(3): | ||||||
|  |             for col in range(3): | ||||||
|  |                 self.board[row][col]["text"] = "" | ||||||
|  |         self.current_player.set("X") | ||||||
|  | 
 | ||||||
|  |     def task(self): | ||||||
|  |         # Placeholder for threaded behavior if needed | ||||||
|  |         pass | ||||||
										
											Binary file not shown.
										
									
								
							
		Loading…
	
		Reference in New Issue