Untitled
unknown
plain_text
3 years ago
7.8 kB
7
Indexable
# from asyncio.windows_events import NULL # import sys # from MapNode import MapNode # class PlannerNode: # stack = [] # def __init__(self): # self.current_obj=MapNode() # # Since we know that the first step the bot will take will be down, we can simply do it here # self.current_obj.direction_callback("down") # example 1 # self.current_obj.direction_callback("down") # notDir = None # self.stack = [] # self.wall_callback(notDir) # def wall_callback(self, notDir): # print(self.current_obj.current) # # current_obj has all the attributes to help you in in your path planning ! # current_coords = self.current_obj.current # self.stack.append(current_coords) # tileNum = self.current_obj.array[current_coords[0]][current_coords[1]] # print(tileNum) # #tileNum is being accessed for the current coord only, which is inline with the practical scenario # #that only the current tile can be seen # #to identify dead ends # pop_intersec = True # if (tileNum == 14 or tileNum == 7 or tileNum == 11 or tileNum == 13): # pop_intersec = False # if (tileNum == 14): # notDir = 'right' # if (tileNum == 7): # notDir = 'up' # if (tileNum == 11): # notDir = 'left' # if (tileNum == 13): # notDir = 'down' # directions = ['down', 'up', 'left', 'right'] # if (notDir != directions[0] and not self.current_obj.map.check_bottom_wall(current_coords) and not (current_coords[0]+1, current_coords[1]) in self.stack): # self.current_obj.direction_callback(directions[0]) # notDir = directions[1] # self.wall_callback(notDir) # elif (notDir != directions[1] and not self.current_obj.map.check_top_wall(current_coords) and not (current_coords[0]-1, current_coords[1]) in self.stack): # self.current_obj.direction_callback(directions[1]) # notDir = directions[0] # self.wall_callback(notDir) # elif (notDir != directions[2] and not self.current_obj.map.check_left_wall(current_coords) and not (current_coords[0], current_coords[1]-1) in self.stack): # self.current_obj.direction_callback(directions[2]) # notDir = directions[3] # self.wall_callback(notDir) # elif (notDir != directions[3] and not self.current_obj.map.check_right_wall(current_coords) and not (current_coords[0], current_coords[1]+1) in self.stack): # self.current_obj.direction_callback(directions[3]) # notDir = directions[2] # self.wall_callback(notDir) # else: # self.current_obj.direction_callback(notDir) # while(not pop_intersec): # print('execute') # self.current_obj.direction_callback(notDir) # if (self.current_obj.array[current_coords[0]][current_coords[1]] == 5 and notDir != 'left'): # notDir = 'left' # elif (self.current_obj.array[current_coords[0]][current_coords[1]] == 5 and notDir != 'down'): # notDir = 'down' # elif (self.current_obj.array[current_coords[0]][current_coords[1]] == 3 and notDir != 'down'): # notDir = 'down' # elif (self.current_obj.array[current_coords[0]][current_coords[1]] == 3 and notDir != 'right'): # notDir = 'right' # elif (self.current_obj.array[current_coords[0]][current_coords[1]] == 12 and notDir != 'left'): # notDir = 'left' # elif (self.current_obj.array[current_coords[0]][current_coords[1]] == 12 and notDir != 'up'): # notDir = 'up' # elif (self.current_obj.array[current_coords[0]][current_coords[1]] == 10 and notDir != 'up'): # notDir = 'up' # elif (self.current_obj.array[current_coords[0]][current_coords[1]] == 10 and notDir != 'right'): # notDir = 'right' # elif (self.current_obj.array[current_coords[0]][current_coords[1]] == 8 or self.current_obj.array[current_coords[0]][current_coords[1]] == 4 or self.current_obj.array[current_coords[0]][current_coords[1]] == 2 or self.current_obj.array[current_coords[0]][current_coords[1]] == 1 or self.current_obj.array[current_coords[0]][current_coords[1]] ==0): # pop_intersec = True # self.wall_callback(notDir) # if __name__ == '__main__': # start_obj=PlannerNode() # start_obj.current_obj.print_root.mainloop() from asyncio.windows_events import NULL import sys from MapNode import MapNode class PlannerNode: dead = [] stack = [] def __init__(self): self.current_obj=MapNode() # Since we know that the first step the bot will take will be down, we can simply do it here self.current_obj.direction_callback("down") # example 1 notDir = 'up' self.stack = [] self.directions = ['up', 'down', 'left', 'right'] self.found = False self.wall_callback(notDir) def wall_callback(self, notDir): current_coords = self.current_obj.current tileNum = self.current_obj.array[current_coords[0]][current_coords[1]] print(self.current_obj.current) # current_obj has all the attributes to help you in in your path planning ! self.stack.append(current_coords) if(current_coords == self.current_obj.map.end): self.found = True return if (notDir != self.directions[0] and not self.current_obj.map.check_top_wall(current_coords) and ((current_coords[0] - 1, current_coords[1]) not in (self.stack and self.dead))): self.current_obj.direction_callback(self.directions[0]) self.wall_callback(self.directions[1]) if(self.found): return if (notDir != self.directions[1] and not self.current_obj.map.check_bottom_wall(current_coords) and ((current_coords[0] + 1, current_coords[1]) not in (self.stack and self.dead))): self.current_obj.direction_callback(self.directions[1]) self.wall_callback(self.directions[0]) if(self.found): return if (notDir != self.directions[2] and not self.current_obj.map.check_left_wall(current_coords) and ((current_coords[0], current_coords[1] - 1) not in (self.stack and self.dead))): self.current_obj.direction_callback(self.directions[2]) self.wall_callback(self.directions[3]) if(self.found): return if (notDir != self.directions[3] and not self.current_obj.map.check_right_wall(current_coords) and ((current_coords[0], current_coords[1] + 1) not in (self.stack and self.dead))): self.current_obj.direction_callback(self.directions[3]) self.wall_callback(self.directions[2]) if(self.found): return self.stack.pop() if (tileNum == 14 or tileNum == 7 or tileNum == 11 or tileNum == 13): self.dead.append(current_coords) self.current_obj.direction_callback(notDir) if __name__ == '__main__': start_obj=PlannerNode() start_obj.current_obj.print_root.mainloop()
Editor is loading...