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()
Esempio n. 2
0
 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()
Esempio n. 3
0
 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
Esempio n. 4
0
    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
Esempio n. 6
0
 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