from tkinter import * # имортирую модуль from tkinter import messagebox # сообщение для закрытия нашей игры import time # импортируем модуль тайм tk = Tk() # создаю обьект app_running = True # создаю переменную которая будет отслеживать что наше приложение работает size_canvas_x = 600 # создаю стороны нашего окна size_canvas_y = 600 s_x = s_y = 10 # размер игрового поля step_x = size_canvas_x // s_x # шаг отрисовки наших лини по горизонтали step_y = size_canvas_y // s_y # тоже самое по вертикили size_canvas_x = step_x * s_x # коректирую поля челочисленным делением size_canvas_y = step_y * s_y # коректирую поля челочисленным делением menu_x = 200 # сделал пополнитнльное меню для кнопок def on_closing(): # создаю функцию на момент закрытия global app_running # передаем значение if messagebox.askokcancel('Выход из игры', 'Хотите выйти из игры?'): # задаем вопрос на закрытие окна (если ДА тогда окно закрываеться) app_running = False # тогда наша переменная получает новое булевое значение tk.destroy() # закрываем приложение tk.protocol('WM_DELETE_WINDOW', on_closing) # определяю что я делаю на момент закрытия окна и какую функцию она будет выполнять tk.title('Игра Морской Бой') # определяю параметры нашего окна tk.resizable(0, 0) # делаю так чтобы окно нельзя было менять tk.wm_attributes('-topmost', 1) # создаю атребут чтобы наше окно было по верх всех окон canvas = Canvas(tk, width=size_canvas_x + menu_x, height=size_canvas_y, bd=0, highlightthickness=0) # создаю общию картину приложения - задаю ширину и высоту canvas.create_rectangle(0, 0, size_canvas_x, size_canvas_y, fill='white') # задаю прямоугольную форму окна и цвет - (белый) но в данном случае это квадрат так как стороны одинаковы!) canvas.pack() # за пакуем наше оконо для игры tk.update() # обновляем наше окно def draw_tabel(): # создаю фукцию которая будет рисовать нам поле for i in range(0, s_x + 1): # создаю цилк который отрисует нашу линию по х canvas.create_line(step_x * i, 0, step_x * i, size_canvas_y) for i in range(0, s_y + 1): # содаю цикл который отрисует нашу линию по y canvas.create_line(0, step_y * i, size_canvas_x, step_y * i) draw_tabel() def button_show_again(): pass def button_begin_again(): pass b0 = Button(tk, text='Показать корабли противника', command=button_show_again) b0.place(x=size_canvas_x + 20, y=30) b1 = Button(tk, text='Начать игру заново!!!', command=button_begin_again) b1.place(x=size_canvas_x + 20, y=70) def add_to_all(event): _type = 0 # ЛКМ if event.num == 3: _type = 1 # ПКМ #print(_type) mouse_x = canvas.winfo_pointerx() - canvas.winfo_rootx() mouse_y = canvas.winfo_pointery() - canvas.winfo_rooty() #print(mouse_x, mouse_y) ip_x = mouse_x // step_x ip_y = mouse_y // step_y print(ip_x, ip_y, '-type', _type) canvas.bind_all('', add_to_all)# ЛКМ canvas.bind_all('', add_to_all)# ПКМ while app_running: # создем цикл для нашей игры if app_running: # если наша переменная еще запущена tk.update_idletasks() # тогда мы будем обновлять наш window tk.update() time.sleep(0.005)