import pygame import math from queue import PriorityQueue WIDTH=800 WIN=pygame.display.set_mode((WIDTH,WIDTH)) pygame.display.set_caption("Path Finding") RED=(255,0,0) GREEN=(0,255,0) BLUE=(0,0,255) WHITE=(255,255,255) YELLOW=(255,255,0) BLACK=(0,0,0) PURPLE=(128,0,128) ORANGE=(255,165,0) GREY=(128,128,128) TURQUIOSE=(64,224,208) class Spot: def __init__(self,row,col,width,total_rows): self.row = row self.col = col self.x= row*width self.y= col*width self.color=WHITE self.neighbors=[] self.width=width self.total_rows=total_rows def get_pos(self): return self.row,self.col def is_closed(self): return self.color == RED def is_opened(self): return self.color == GREEN def is_barrier(self): return self.color == BLACK def is_start(self): return self.color == ORANGE def is_end(self): return self.color == TURQUIOSE def reset(self): self.color=WHITE def make_closed(self): self.color=RED def make_start(self): self.color=ORANGE def make_open(self): self.color=GREEN def make_barrier(self): self.color=BLACK def make_end(self): self.color=TURQUIOSE def make_path(self): self.color=PURPLE def draw(self,win): pygame.draw.rect(win,self.color,(self.x,self.y,self.width,self.width)) def update_neighbours(self,grid): self.neighbors=[] if self.row < self.total_rows-1 and not grid[self.row+1][self.col].is_barrier(): self.neighbors.append(grid[self.row+1][self.col]) if self.row > 0 and not grid[self.row-1][self.col].is_barrier(): self.neighbors.append(grid[self.row-1][self.col]) if self.col < self.total_rows-1 and not grid[self.row][self.col+1].is_barrier(): self.neighbors.append(grid[self.row][self.col+1]) if self.col > 0 and not grid[self.row][self.col-1].is_barrier(): self.neighbors.append(grid[self.row][self.col-1]) def __lt__(self,other): return False def h(p1,p2): x1,y1=p1 x2,y2=p2 return abs(x1-x2)+abs(y1-y2) def reconstruct_path(came_from,current,draw): while current in came_from: current=came_from[current] current.make_path() draw() def algoritham(draw,grid,start,end): c=0 open_set=PriorityQueue() open_set.put((0,c,start)) came_from={} g_score={spot:float("inf") for row in grid for spot in row} g_score[start]=0 f_score={spot:float("inf") for row in grid for spot in row} f_score[start]=h(start.get_pos(),end.get_pos()) open_set_hash={start} while not open_set.empty(): for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() current =open_set.get()[2] open_set_hash.remove(current) if(current == end): reconstruct_path(came_from,end,draw) start.make_start() end.make_end() return True for neighbor in current.neighbors: temp_g_score = g_score[current]+1 if temp_g_score