From 4ee1e5af4f7eae98bac4ea91b09aeeb40936f261 Mon Sep 17 00:00:00 2001 From: Maciej Sobkowiak Date: Thu, 25 Apr 2019 20:56:02 +0200 Subject: [PATCH] A* chages --- UI/Apath.py | 36 ++++++++++++++++-------------------- UI/window.py | 24 +++++++++++++++++++++--- 2 files changed, 37 insertions(+), 23 deletions(-) diff --git a/UI/Apath.py b/UI/Apath.py index 26c1c80..3cd2094 100644 --- a/UI/Apath.py +++ b/UI/Apath.py @@ -1,33 +1,28 @@ -import numpy +import numpy as np from heapq import * # pylint: disable=unused-wildcard-import -def heuristic(a, b, pathing): +def heuristic(a, b): x = abs(a[0]-b[0]) y = abs(a[1]-b[1]) - if pathing == '*': - - if x > y: - return 14*y + 10*(x - y) - else: - return 14*x + 10*(y - x) + if x > y: + return 14*y + 10*(x - y) else: - return 10*(x + y) + return 14*x + 10*(y - x) + -def astar(array, start, goal, pathing): +def Astar(array, start, goal): - if pathing == '+': - neighbors = [(0, 1), (0, -1), (1, 0), (-1, 0)] - else: - neighbors = [(0, 1), (0, -1), (1, 0), (-1, 0), (1, 1), (1, -1), (-1, 1), (-1, -1)] - neighbors = [(i, j)for i in range(-1, 2, 1) for j in range(2)] + + neighbors = [(0, 1), (0, -1), (1, 0), (-1, 0), (1, 1), (1, -1), (-1, 1), (-1, -1)] + came_from = {} gscore = {start: 0} - fscore = {start: heuristic(start, goal, pathing)} + fscore = {start: heuristic(start, goal)} oheap = [] checked = [] @@ -45,13 +40,14 @@ def astar(array, start, goal, pathing): current = came_from[current] return list(reversed(data)), checked - - array[current[0], current[1]] = 2 + print("array current",array[current[0],current[1]]) + array[current[0], current[1]]=2 + for i, j in neighbors: neighbor = current[0] + i, current[1] + j - tentative_g_score = gscore[current] + heuristic(current, neighbor, pathing) + tentative_g_score = gscore[current] + heuristic(current, neighbor) if 0 <= neighbor[0] < array.shape[0]: if 0 <= neighbor[1] < array.shape[1]: @@ -70,6 +66,6 @@ def astar(array, start, goal, pathing): if tentative_g_score < gscore.get(neighbor, 0) or neighbor not in [i[1]for i in oheap]: came_from[neighbor] = current gscore[neighbor] = tentative_g_score - fscore[neighbor] = tentative_g_score + heuristic(neighbor, goal, pathing) + fscore[neighbor] = tentative_g_score + heuristic(neighbor, goal) heappush(oheap, (fscore[neighbor], neighbor)) return False \ No newline at end of file diff --git a/UI/window.py b/UI/window.py index eec8cdc..cfe9897 100644 --- a/UI/window.py +++ b/UI/window.py @@ -1,6 +1,9 @@ import pygame as pg +import numpy as np import random from UI.grid import Grid, Node +from UI.Apath import Astar + class Window(): @@ -29,15 +32,26 @@ class Window(): grid.change_field(19, 19, 2) #random obsticle - for x in range(25): + for x in range(40): grid.change_field(random.randint(1,18),random.randint(1,18),3) - + #path path = [(i, i) for i in range(1, 20, 1)] self.grid.draw_map(self.screen) + #convert table to support Apath algoritm + array = [[self.grid.table[col][row] for row in range(cols)] for col in range(rows)] + for i,x in enumerate(array): + for j,y in enumerate(x): + if y.field_type == 3: + array[i][j] = None + + nodes_array = np.array(array) - + #Run A star + + path, check = Astar(nodes_array, (0,0), (19, 19)) + print(path,"\n\n",check,"\n\n") for t in path: @@ -48,3 +62,7 @@ class Window(): self.grid.draw_node(self.screen, x, y) pg.time.delay(500) pg.quit() # pylint: disable=no-member + + + +