class GameController: def __init__(self, client, tcp): self.client = client # create game board self.tcp = tcp self.rotate_params = { 0: [0, 1], 1: [0, 0], 2: [1, 1], 3: [1, 0], 4: [2, 1], 5: [2, 0], 6: [3, 1], 7: [3, 0] } self.trans_array = {"0" : " ", "1" : "X", "2" : "O"} # start new game def new_game_ind(self): # create GUI root = Tk() self.view = View(root) grid_btn_array = self.view.get_grid_btns() i = 0 for btn in grid_btn_array: btn.config(command=lambda x=i: self.callback(x)) i += 1 rotate_btn_array = self.view.get_rotate_btns() i=0 for btn in rotate_btn_array: btn.config(command=lambda x=i: self.rotate_callback(x)) i += 1 self.view.filemenu.add_command(label='Exit', command=lambda root=root:self.quit(root)) self.view.enable_grid() self.client.look_game_req() #Event handler for the Exit-event (user clicks 'x') root.protocol("WM_DELETE_WINDOW", lambda root=root:self.quit(root)) root.mainloop() def quit(self, root): self.tcp.req_close_connection() root.destroy() def start_game_ind(self): self.view.set_infotext("Game starting") # your turn notification def your_turn_ind(self): self.view.set_infotext("Your turn - place mark") # receive invalid move notification def invalid_move_ind(self): self.view.set_infotext("Invalid move") # receive game end result def game_end_ind(self, end_status): if end_status == 0: self.view.set_infotext("Game Over") self.view.popup("Draw!") else: self.view.set_infotext("Game Over") self.view.popup("Player {} won!".format(end_status)) # update board with data received from communication layer def update_board_ind(self, board_info): board = list() for row in board_info: board.extend(row) for i in range(len(board)): board[i] = self.trans_array[board[i]] self.view.update(board) # place marble and send the data to communication layer def callback(self, id): x = id % 6 y = int(id / 6) self.client.m_place_req(x, y) # click rotate button and send the data to communication layer def rotate_callback(self, id): print("Clicked btn {}".format(id)) self.client.rotate_board_req(*self.rotate_params[id])