ТЕМА: «КРЕСТИКИ-НОЛИКИ» Задание 1. В Приложении (Урок 4) приведен код игры «Крестики нолики». Создайте диалоговое окно, где пользователь сможет выбрать тип игры: один игрок / два игрока. 2. Создайте диалоговое окно simpledialog, в которое пользователь сможет ввести свое имя. В информационном окне необходимо вывести имя победителя.
import tkinter as tk from tkinter import simpledialog from tkinter import messagebox
class TicTacToe: def initself,masterself, masterself,master: self.master = master self.master.title("Крестики-нолики")
self.turn = 'X' self.board = [' ' for _ in range(9)] self.create_board def create_boardselfselfself: self.buttons =
for i in range333: for j in range333: button = tk.Buttonself.master,text=′′,width=10,height=3,command=lambdai=i,j=j:self.makemove(i,j)self.master, text='', width=10, height=3, command=lambda i=i, j=j: self.make_move(i, j)self.master,text=′′,width=10,height=3,command=lambdai=i,j=j:self.makemove(i,j)
button.gridrow=i,column=jrow=i, column=jrow=i,column=j
self.buttons.appendbuttonbuttonbutton def make_moveself,i,jself, i, jself,i,j: if self.board3∗i+j3*i + j3∗i+j == ' ': self.board3∗i+j3*i + j3∗i+j = self.turn self.buttons3∗i+j3*i + j3∗i+j.configtext=self.turntext=self.turntext=self.turn
if self.check_win: winner = 'Игрок 1' if self.turn == 'X' else 'Игрок 2' messagebox.showinfo"Победитель",f"Победилwinner""Победитель", f"Победил {winner}""Победитель",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_winselfselfself: 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][0, 1, 2], [3, 4, 5], [6, 7, 8], [0, 3, 6], [1, 4, 7], [2, 5, 8], [0, 4, 8], [2, 4, 6][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.boardline[0]line[0]line[0] == self.boardline[1]line[1]line[1] == self.boardline[2]line[2]line[2] != ' ': return True return False def reset_boardselfselfself: self.board = [' ' for _ in range(9)] for button in self.buttons: button.configtext=′′text=''text=′′
def get_game_mode: result = simpledialog.askstring("Выбор режима игры", "Выберите режим игры (1 игрок / 2 игрока):") if result == '1': root = tk.Tk
game = TicTacToerootrootroot
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 initself,masterself, masterself,master:
self.master = master
self.master.title("Крестики-нолики")
self.board = [' ' for _ in range(9)]
self.create_board
def create_boardselfselfself:
self.buttons = for i in range333:
for j in range333:
button = tk.Buttonself.master,text=′′,width=10,height=3,command=lambdai=i,j=j:self.makemove(i,j)self.master, text='', width=10, height=3,
command=lambda i=i, j=j: self.make_move(i, j)self.master,text=′′,width=10,height=3,command=lambdai=i,j=j:self.makem ove(i,j) button.gridrow=i,column=jrow=i, column=jrow=i,column=j self.buttons.appendbuttonbuttonbutton
def make_moveself,i,jself, i, jself,i,j:
if self.board3∗i+j3*i + j3∗i+j == ' ':
self.board3∗i+j3*i + j3∗i+j = self.turn
self.buttons3∗i+j3*i + j3∗i+j.configtext=self.turntext=self.turntext=self.turn if self.check_win:
winner = 'Игрок 1' if self.turn == 'X' else 'Игрок 2'
messagebox.showinfo"Победитель",f"Победилwinner""Победитель", f"Победил {winner}""Победитель",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_winselfselfself:
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][0, 1, 2], [3, 4, 5], [6, 7, 8],
[0, 3, 6], [1, 4, 7], [2, 5, 8],
[0, 4, 8], [2, 4, 6][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.boardline[0]line[0]line[0] == self.boardline[1]line[1]line[1] == self.boardline[2]line[2]line[2] != ' ':
return True
return False
def reset_boardselfselfself:
self.board = [' ' for _ in range(9)]
for button in self.buttons:
button.configtext=′′text=''text=′′
def get_game_mode:
result = simpledialog.askstring("Выбор режима игры", "Выберите режим игры (1 игрок / 2 игрока):")
if result == '1':
root = tk.Tk game = TicTacToerootrootroot root.mainloop elif result == '2':
messagebox.showinfo("Информация", "Режим игры для двух игроков еще не реализован")
else:
messagebox.showinfo("Ошибка", "Некорректный выбор режима игры")
if name == 'main':
root = tk.Tk get_game_mode root.mainloop