ТЕМА: «КРЕСТИКИ-НОЛИКИ» Задание 1. В Приложении (Урок 4) приведен код игры «Крестики нолики». Создайте диалоговое окно, где пользователь сможет выбрать тип игры: один игрок / два игрока. 2. Создайте диалоговое окно simpledialog, в которое пользователь сможет ввести свое имя. В информационном окне необходимо вывести имя победителя.
import tkinter as tk from tkinter import simpledialog from tkinter import messagebox
class TicTacToe: def init(self, master): self.master = master self.master.title("Крестики-нолики")
self.turn = 'X' self.board = [' ' for _ in range(9)] self.create_board() def create_board(self): self.buttons = [] for i in range(3): for j in range(3): button = tk.Button(self.master, text='', width=10, height=3, command=lambda i=i, j=j: self.make_move(i, j)) button.grid(row=i, column=j) self.buttons.append(button) def make_move(self, i, j): if self.board[3*i + j] == ' ': self.board[3*i + j] = self.turn self.buttons[3*i + j].config(text=self.turn) if self.check_win(): winner = 'Игрок 1' if self.turn == 'X' else 'Игрок 2' messagebox.showinfo("Победитель", f"Победил {winner}") self.reset_board() elif ' ' not in self.board: messagebox.showinfo("Победитель", "Ничья") self.reset_board() else: self.turn = 'O' if self.turn == 'X' else 'X' def check_win(self): lines = [[0, 1, 2], [3, 4, 5], [6, 7, 8], [0, 3, 6], [1, 4, 7], [2, 5, 8], [0, 4, 8], [2, 4, 6]] for line in lines: if self.board[line[0]] == self.board[line[1]] == self.board[line[2]] != ' ': return True return False def reset_board(self): self.board = [' ' for _ in range(9)] for button in self.buttons: button.config(text='')
def get_game_mode(): result = simpledialog.askstring("Выбор режима игры", "Выберите режим игры (1 игрок / 2 игрока):") if result == '1': root = tk.Tk() game = TicTacToe(root) root.mainloop() elif result == '2': messagebox.showinfo("Информация", "Режим игры для двух игроков еще не реализован") else: messagebox.showinfo("Ошибка", "Некорректный выбор режима игры")
if name == 'main': root = tk.Tk() get_game_mode() root.mainloop()
import tkinter as tk
from tkinter import simpledialog
from tkinter import messagebox
class TicTacToe:
self.turn = 'X'def init(self, master):
self.master = master
self.master.title("Крестики-нолики")
self.board = [' ' for _ in range(9)]
self.create_board()
def create_board(self):
self.buttons = []
for i in range(3):
for j in range(3):
button = tk.Button(self.master, text='', width=10, height=3,
command=lambda i=i, j=j: self.make_move(i, j))
button.grid(row=i, column=j)
self.buttons.append(button)
def make_move(self, i, j):
if self.board[3*i + j] == ' ':
self.board[3*i + j] = self.turn
self.buttons[3*i + j].config(text=self.turn)
if self.check_win():
winner = 'Игрок 1' if self.turn == 'X' else 'Игрок 2'
messagebox.showinfo("Победитель", f"Победил {winner}")
self.reset_board()
elif ' ' not in self.board:
messagebox.showinfo("Победитель", "Ничья")
self.reset_board()
else:
self.turn = 'O' if self.turn == 'X' else 'X'
def check_win(self):
lines = [[0, 1, 2], [3, 4, 5], [6, 7, 8],
[0, 3, 6], [1, 4, 7], [2, 5, 8],
[0, 4, 8], [2, 4, 6]]
for line in lines:
if self.board[line[0]] == self.board[line[1]] == self.board[line[2]] != ' ':
return True
return False
def reset_board(self):
self.board = [' ' for _ in range(9)]
for button in self.buttons:
button.config(text='')
def get_game_mode():
result = simpledialog.askstring("Выбор режима игры", "Выберите режим игры (1 игрок / 2 игрока):")
if result == '1':
root = tk.Tk()
game = TicTacToe(root)
root.mainloop()
elif result == '2':
messagebox.showinfo("Информация", "Режим игры для двух игроков еще не реализован")
else:
messagebox.showinfo("Ошибка", "Некорректный выбор режима игры")
if name == 'main':
root = tk.Tk()
get_game_mode()
root.mainloop()