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 | ||||
| from tkinter import Menu | ||||
| from tkinter import ttk | ||||
| import threading | ||||
| 
 | ||||
| from app.ConfigMgr import ConfigMgr | ||||
| from app.chat_server.Server import Server | ||||
| from app.widgets import ClockLabel | ||||
| from app.ConfigMgr import ConfigMgr | ||||
| from app.widgets.ChatTab import ChatTab | ||||
| from app.widgets.MusicDownloadTab import MusicDownloadTab | ||||
| from app.widgets.MusicPlayerTab import MusicPlayerTab | ||||
| from app.widgets.TicTacToeTab import TicTacToeTab | ||||
| from app.widgets.TodoTab import TodoTab | ||||
| from app.widgets.UsageLabels import CPULabel, RAMLabel, BatteryLabel, NetworkLabel | ||||
| from app.widgets.WeatherTab import WeatherTab | ||||
| 
 | ||||
| 
 | ||||
| stop_event = threading.Event() | ||||
| 
 | ||||
| def on_closing(): | ||||
|  | @ -128,6 +128,11 @@ todo_tab = TodoTab(notebook, stop_event=stop_event) | |||
| todo_tab.pack(fill="both", expand=True) | ||||
| 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 | ||||
| frame_chat = tk.Frame(frame_right, bg="lightgreen") | ||||
| 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