import json from tkinter import * from ShipField import ShipField my_field = ShipField() enemy_field = ShipField() active_field = my_field def draw_field(window, field, col_offset): buttons = [] for r in range(0, field.field_size): for c in range(0, field.field_size): index = r * field.field_size + c btn = Button(window, text='', width=5, height=2) btn.grid(column=c + col_offset, row=r) btn.bind('', lambda e, x=r, y=c: left_button_click(buttons, x, y)) btn.bind('', right_button_click) btn.bind('', lambda e, x=r, y=c: button_enter(buttons, x, y)) buttons.append(btn) colorize(field, buttons) return buttons def colorize(field, buttons): for i in range(len(field.field)): bg = "white" if field.field[i] == "1": bg = 'pink' if field.field[i] == "\\": bg = 'red' if field.field[i] == "0": bg = 'black' if field.field[i] == "p": bg = 'blue' if '+' in field[i]: bg = 'orange' if 'r' in field[i]: bg = 'red' buttons[i].configure(bg=bg) def keypress_handler(e): global active_field if e.keysym.isnumeric(): active_field.set_ship_size(int(e.keysym)) else: if e.keysym == 'm': active_field.toggle_field_mode() def left_button_click(buttons, row, col): global active_field active_field.action(row, col) colorize(active_field, buttons) def right_button_click(d): global active_field active_field.toggle_field_mode() def button_enter(buttons, row, col): global active_field if buttons == my_buttons: active_field = my_field enemy_field.clear_marker() my_field.target(row, col) elif buttons == enemy_buttons: active_field = enemy_field my_field.clear_marker() enemy_field.target(row, col) colorize(my_field, my_buttons) colorize(enemy_field, enemy_buttons) def savebutton_click(event): with open('test.json', 'w') as f: json.dump(f, default=ShipField.convert_to_json) window = Tk() window.title("Ship Craft!") window.geometry('940x410') window.bind_all('', keypress_handler) my_buttons = draw_field(window, my_field, 0) enemy_buttons = draw_field(window, enemy_field, 11) lbl = Label(window, text='', width=5, height=2) lbl.grid(column=10, row=0) savebutton = Button(window, text='Save', width=20, height=2) savebutton.bind('', savebutton_click) savebutton.grid(column=0, row=11, columnspan=4) window.mainloop()