class SudokuUI(Frame): def __init__(self, parent): Frame.__init__(self, parent) self.parent = parent self.__initUI() def __initUI(self): self.parent.title("AI: Sudoku Solver") self.pack(fill=BOTH) self.canvas = Canvas(self, width=WIDTH, height=HEIGHT + 10) self.easy_problem = Problem(self.canvas, 0, DELAY, random.randint(0, 1), setting = "easy") self.hard_problem = Problem(self.canvas, 0, DELAY, random.randint(0, 1), setting = "hard") self.problem = None # Set this by click button # Initialize each cell in the puzzle for i in range(1, 10): for j in range(1, 10): self.item = self.canvas.create_text( MARGIN + (j - 1) * SIDE + SIDE / 2, MARGIN + (i - 1) * SIDE + SIDE / 2, text='', tags="numbers", fill="black", font=("Helvetica", 12) ) self.item = self.canvas.create_text(40, 490, text='Count :', fill="black", font=("Helvetica", 13)) self.item = self.canvas.create_text(95, 490, text='', fill="black", font=("Helvetica", 13)) self.item = self.canvas.create_text(170, 490, text='Average :', fill="black", font=("Helvetica", 13)) self.item = self.canvas.create_text(225, 490, text='',fill="black", font=("Helvetica", 13)) self.item = self.canvas.create_text(320, 490, text='Ranking :',fill="black", font=("Helvetica", 13)) self.item = self.canvas.create_text(370, 490, text='', fill="black", font=("Helvetica", 13)) self.item = self.canvas.create_text(420, 490, text='Total :', fill="black", font=("Helvetica", 13)) self.item = self.canvas.create_text(460, 490, text='', fill="black", font=("Helvetica", 13)) self.canvas.pack(fill=BOTH, side=TOP) self.start_button1 = Button(self, text="__Hard__", command=self.__start_hard_solver) self.start_button2 = Button(self, text="__Easy__", command=self.__start_easy_solver) self.start_button2.pack(side=LEFT) self.start_button1.pack(side=RIGHT) #self.start_button2.config(state="disabled") self.__draw_grid() # Draws 9x9 grid def __draw_grid(self): for i in range(10): width = 3 if i % 3 == 0 else 1 x0 = MARGIN + i * SIDE y0 = MARGIN x1 = MARGIN + i * SIDE y1 = HEIGHT - MARGIN self.canvas.create_line(x0, y0, x1, y1, fill="black", width=width) x0 = MARGIN y0 = MARGIN + i * SIDE x1 = WIDTH - MARGIN y1 = MARGIN + i * SIDE self.canvas.create_line(x0, y0, x1, y1, fill="black", width=width) def __start_easy_solver(self): self.problem = self.easy_problem self.__start_solver() def __start_hard_solver(self): self.problem = self.hard_problem self.__start_solver() def __start_solver(self): self.start_button1.config(state="disabled") self.start_button2.config(state="disabled") for i in range(self.problem.problem_num): for m in range(1, 10): for n in range(1, 10): if(self.problem.given_number[m-1][n-1] != 0): self.canvas.itemconfig(9 * (m - 1) + n, text=self.problem.given_number[m-1][n-1], tags="numbers", fill="blue") else:self.canvas.itemconfig(9 * (m - 1) + n, text='', tags="numbers", fill="black") self.solver_class = solver_class(self.problem) self.solver_class.solver() if self.problem.finished==0: self.problem.fail() return self.canvas.update() if(i != self.problem.problem_num -1): self.problem = Problem(self.canvas, self.problem.tk, 0.0, self.problem.temp, setting = self.problem.setting) self.problem.update_a() #self.start_button2.config(state="active") #If the problem has finished, this function will display "Finished!" self.problem.is_done() def __submit(self): request=self.problem.submit(univ_id, "") message=request.split(',') if int(message[0]) == 100: self.problem.fail_10min() elif int(message[0]) == 101: self.canvas.update() self.canvas.itemconfig(87, text=int(message[1]), tags="numbers", fill="blue") self.canvas.itemconfig(89, text=int(message[2]), tags="numbers", fill="blue") self.problem.already_done() elif int(message[0]) == 102: self.canvas.update() self.canvas.itemconfig(87, text=int(message[1]), tags="numbers", fill="blue") self.canvas.itemconfig(89, text=int(message[2]), tags="numbers", fill="blue") self.problem.is_done() elif int(message[0]) == 501: # print "501" self.problem.wrong_id_pw()
class SudokuUI(Frame): def __init__(self, parent): Frame.__init__(self, parent) self.parent = parent self.__initUI() def __initUI(self): self.parent.title("AI: Sudoku Solver") self.pack(fill=BOTH) self.canvas = Canvas(self, width=WIDTH, height=HEIGHT + 10) self.problem = Problem(self.canvas, 0, DELAY) # Initialize each cell in the puzzle for i in range(1, 10): for j in range(1, 10): self.item = self.canvas.create_text( MARGIN + (j - 1) * SIDE + SIDE / 2, MARGIN + (i - 1) * SIDE + SIDE / 2, text='', tags="numbers", fill="black", font=("Helvetica", 12)) self.item = self.canvas.create_text(40, 490, text='Count :', fill="black", font=("Helvetica", 13)) self.item = self.canvas.create_text(95, 490, text='', fill="black", font=("Helvetica", 13)) self.item = self.canvas.create_text(170, 490, text='Average :', fill="black", font=("Helvetica", 13)) self.item = self.canvas.create_text(225, 490, text='', fill="black", font=("Helvetica", 13)) self.item = self.canvas.create_text(320, 490, text='Ranking :', fill="black", font=("Helvetica", 13)) self.item = self.canvas.create_text(370, 490, text='', fill="black", font=("Helvetica", 13)) self.item = self.canvas.create_text(420, 490, text='Total :', fill="black", font=("Helvetica", 13)) self.item = self.canvas.create_text(460, 490, text='', fill="black", font=("Helvetica", 13)) self.canvas.pack(fill=BOTH, side=TOP) self.start_button1 = Button(self, text="__Start__", command=self.__start_solver) self.start_button2 = Button(self, text="__Submit__", command=self.__submit) self.start_button2.pack(side=LEFT) self.start_button1.pack(side=RIGHT) self.start_button2.config(state="disabled") self.__draw_grid() # Draws 9x9 grid def __draw_grid(self): for i in range(10): width = 3 if i % 3 == 0 else 1 x0 = MARGIN + i * SIDE y0 = MARGIN x1 = MARGIN + i * SIDE y1 = HEIGHT - MARGIN self.canvas.create_line(x0, y0, x1, y1, fill="black", width=width) x0 = MARGIN y0 = MARGIN + i * SIDE x1 = WIDTH - MARGIN y1 = MARGIN + i * SIDE self.canvas.create_line(x0, y0, x1, y1, fill="black", width=width) def __start_solver(self): self.start_button1.config(state="disabled") for i in range(100): for m in range(1, 10): for n in range(1, 10): self.canvas.itemconfig(9 * (m - 1) + n, text='', tags="numbers", fill="black") self.SudokuSolver = SudokuSolver(self.problem) self.SudokuSolver.solver() if self.problem.finished == 0: self.problem.fail() break self.canvas.update() self.problem = Problem(self.canvas, self.problem.tk, 0) self.problem.update_a() self.start_button2.config(state="active") def __submit(self): request = self.problem.submit(univ_id, password) message = request.split(',') if int(message[0]) == 100: self.problem.fail_10min() elif int(message[0]) == 101: self.canvas.update() self.canvas.itemconfig(87, text=int(message[1]), tags="numbers", fill="blue") self.canvas.itemconfig(89, text=int(message[2]), tags="numbers", fill="blue") self.problem.already_done() elif int(message[0]) == 102: self.canvas.update() self.canvas.itemconfig(87, text=int(message[1]), tags="numbers", fill="blue") self.canvas.itemconfig(89, text=int(message[2]), tags="numbers", fill="blue") self.problem.is_done() elif int(message[0]) == 501: print("501") self.problem.wrong_id_pw()