def StartVisualization(self): self.grid() AddClock = ExtraWidgits.Clock(self.win, 850, 100, 25) AddClock.start() AddMainMenuButton = ExtraWidgits.MainMenuButton(self.win, 700, 300) AddMainMenuButton.start() AddExitText = ExtraWidgits.ExitText(self.win, 725, 250) AddExitText.start() StartSolving = Thread(target=self.solve) StartSolving.start() self.CheckActions()
def StartVisualization(self): self.print_maze() pygame.font.init() font = pygame.font.SysFont('Comic Sans MS', 23) self.win.blit(font.render("Click on cells to create wall.", False, (255, 255, 255)), (670,50)) self.win.blit(font.render("Press Space to START", False, (255, 255, 255)),(700,80)) AddMainMenuButton = ExtraWidgits.MainMenuButton(self.win,700,300) AddMainMenuButton.start() AddExitText = ExtraWidgits.ExitText(self.win,725,250) AddExitText.start() self.CheckActions()
def solve(self): self.visited[0][0]=1 if(self.find_way(0,0)): ExtraWidgits.OperationsDone(self.operations-1,self.win,700,400,"MAZE is Solved") elif(not self.running): self.WaitForEndProcess=False Rat_In_The_Maze.RunClock=False return 0 else: ExtraWidgits.OperationsDone(self.operations-1,self.win,700,400,"MAZE cannot be Solved") font = pygame.font.SysFont('Comic Sans MS', 28) self.win.blit(font.render("Press Enter to Restart.", False, (255, 255, 255)), (680,500)) self.WaitForEndProcess=False Rat_In_The_Maze.RunClock=False
def StartVisualization(self): self.board() self.initial_state(randint(40,60)) AddClock =ExtraWidgits.Clock(self.win, 800, 100, 25) AddClock.start() AddMainMenuButton =ExtraWidgits.MainMenuButton(self.win,650,300) AddMainMenuButton.start() AddExitText = ExtraWidgits.ExitText(self.win,675,250) AddExitText.start() StartSolving=Thread(target=self.solve) StartSolving.start() #self.solve() self.CheckActions()
def solve(self): chk = 1 if (not self.running): return 0 for i in range(9): if not self.running: chk = 0 break for j in range(9): self.operations += 1 if not self.running: chk = 0 break if (self.to_solve[i][j] == 0): for k in range(1, 10): if not self.running: chk = 0 break self.print_Number(j, i, str(k), (255, 0, 0), (0, 255, 0)) if (self.chk(i, j, k)): self.to_solve[i][j] = k self.print_Number(j, i, str(k), (255, 0, 0)) if not self.running: chk = 0 break if (not self.solve()): if not self.running: chk = 0 break self.print_Number(j, i, str(" "), (255, 0, 0)) self.to_solve[i][j] = 0 else: if self.running: ExtraWidgits.OperationsDone( self.operations, self.win, 650, 400, "SUDOKU Solved.") SUDOKU.RunClock = False self.WaitForEndProcess = False return 1 else: if (not self.running): chk = 0 break self.print_Number(j, i, str(" "), (255, 0, 0)) if (not self.running): break if (self.to_solve[i][j] == 0): return False if (not self.running): break self.WaitForEndProcess = False return True
def solve(self): kx = random.randint(0, self.n - 1) ky = random.randint(0, self.n - 1) dx = [-2, -1, 1, 2, -2, -1, 1, 2] dy = [1, 2, 2, 1, -1, -2, -2, -1] for k in range(self.n**2): if not self.running: break self.operations += 1 self.cb[ky][kx] = k + 1 self.ans.append([kx, ky]) self.show() if not self.running: break time.sleep(1 / self.speed) pq = [] for i in range(8): self.operations += 1 if not self.running: break nx = kx + dx[i] ny = ky + dy[i] if 0 <= nx < self.n and 0 <= ny < self.n: if self.cb[ny][nx] == 0: ctr = 0 for j in range(8): self.operations += 1 if not self.running: break ex = nx + dx[j] ey = ny + dy[j] if 0 <= ex < self.n and 0 <= ey < self.n: if self.cb[ey][ex] == 0: ctr += 1 heappush(pq, (ctr, i)) if len(pq) > 0: (p, m) = heappop(pq) kx += dx[m] ky += dy[m] else: break if self.running: ExtraWidgits.OperationsDoneKnight(self.operations, self.win, 700, 400, "Knight's Tour Completed.") Knight_Tour.RunClock = False self.WaitForEndProcess = False return True
def CheckActions(self): self.X = 700 self.Y = 300 SOLVE = Thread(target=self.solve) while (self.running): try: self.pos = pygame.mouse.get_pos() except: pass if (not self.running): break for event in pygame.event.get(): if event.type == pygame.QUIT: self.running = False pygame.quit() if event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: self.running = False pygame.quit() if event.key == pygame.K_RETURN and not Rat_In_The_Maze.RunClock: self.operations = 0 self.win.fill((0, 0, 0)) self.solving = False self.make_maze = True self.WaitForEndProcess = True Rat_In_The_Maze.RunClock = True self.operation = 0 self.rat_pos = [[0, 0]] self.visited = [[0] * self.n for i in range(self.n)] self.StartVisualization() if (not self.solving): if (not self.running): break if event.type == pygame.MOUSEBUTTONDOWN: if (0 <= self.pos[0] <= 600 and 0 <= self.pos[1] <= 600) and self.make_maze: self.make_Wall(self.pos[0], self.pos[1]) if event.type == pygame.KEYDOWN: if (not self.running): break if event.key == pygame.K_SPACE and not self.solving: self.solving = True self.WaitForEndProcess = True self.make_maze = False AddClock = ExtraWidgits.Clock( self.win, 850, 180, 25) AddClock.start() SOLVE = Thread(target=self.solve) SOLVE.start() pass if self.pos[0] > self.X and self.pos[ 0] < self.X + 240 and self.pos[ 1] > self.Y and self.pos[1] < self.Y + 35: if event.type == pygame.MOUSEBUTTONDOWN: try: self.running = False pygame.quit() while (self.WaitForEndProcess): pass Process = StartProcess.START() Process.start() Rat_In_The_Maze.RunClock = True except: pass