Zadanie projektowe 1 - gra kółko krzyżyk
unknown
python
a year ago
4.0 kB
6
Indexable
import tkinter as tk from tkinter import messagebox import random import math class TicTacToe: def __init__(self, root): self.root = root self.root.title("Kółko i krzyżyk") self.current_player = "X" self.is_computer_player = False self.board = [""] * 9 self.buttons = [] for i in range(3): row_buttons = [] for j in range(3): button = tk.Button(root, text="", font=("Helvetica", 24), width=5, height=2, command=lambda i=i, j=j: self.make_move(i, j)) button.grid(row=i, column=j) row_buttons.append(button) self.buttons.append(row_buttons) reset_button = tk.Button(root, text="Nowa gra", command=self.reset_game) reset_button.grid(row=3, columnspan=3) mode_button = tk.Button(root, text="Zmien tryb gry", command=self.toggle_mode) mode_button.grid(row=4, columnspan=3) self.info_label = tk.Label(root, text=f"Ruch gracza {self.current_player}", font=("Helvetica", 14)) self.info_label.grid(row=5, columnspan=3) def make_move(self, row, col): if self.board[row * 3 + col] == "": self.board[row * 3 + col] = self.current_player self.buttons[row][col].config(text=self.current_player, state="disabled") winner = self.check_winner() if winner: messagebox.showinfo("Koniec gry", f"Gracz {winner} wygrywa!") self.reset_game() elif "" not in self.board: messagebox.showinfo("Koniec gry", "Remis!") self.reset_game() else: if self.is_computer_player and self.current_player == "X": self.make_computer_move() else: self.current_player = "O" if self.current_player == "X" else "X" self.info_label.config(text=f"Ruch gracza {self.current_player}") def make_computer_move(self): available_list = [] for i in range(0,9): if (self.board[i] != 'X') and (self.board[i] != 'O'): available_list.append(i) print(available_list) pc_board_index = random.choice(available_list) wiersz = math.floor(pc_board_index/3) kolumna = pc_board_index%3 print(wiersz) print(kolumna) self.board[pc_board_index] = "O" self.buttons[wiersz][kolumna].config(text="O", state="disabled") winner = self.check_winner() if winner=='O': messagebox.showinfo("Koniec gry", f"Komputer wygrywa!") self.reset_game() def check_winner(self): for i in range(3): if self.board[i] == self.board[i + 3] == self.board[i + 6] != "": return self.board[i] if self.board[3 * i] == self.board[3 * i + 1] == self.board[3 * i + 2] != "": return self.board[3 * i] if self.board[0] == self.board[4] == self.board[8] != "": return self.board[0] if self.board[2] == self.board[4] == self.board[6] != "": return self.board[2] return None def reset_game(self): self.board = [""] * 9 for row_buttons in self.buttons: for button in row_buttons: button.config(text="", state="normal") self.current_player = "X" self.info_label.config(text="Ruch gracza X") def toggle_mode(self): self.is_computer_player = not self.is_computer_player mode_text = "Gra z komputerem" if self.is_computer_player else "Gra z drugim graczem" messagebox.showinfo("Zmiana trybu gry", f"Aktualny tryb gry: {mode_text}") self.reset_game() root = tk.Tk() game = TicTacToe(root) root.mainloop()
Editor is loading...
Leave a Comment