diff --git a/astar.py b/astar.py index 96258d7..4c66812 100644 --- a/astar.py +++ b/astar.py @@ -42,15 +42,17 @@ def astar(obiekty, start, cel): continue elif 6 <= sasiad[0] <= 7 and 10 <= sasiad[1] <= 11: continue - tentative_h_score = heurystyka(obiekty, sasiad, cel) + heurystyka(obiekty, current, sasiad) + tentative_g_score = gscore[current] + \ + heurystyka(obiekty, current, sasiad) - if sasiad in [i[1] for i in oheap] and tentative_h_score > hscore.get(current, 0): + if sasiad in close_set and tentative_g_score >= gscore.get(sasiad, 0): continue if sasiad not in close_set and sasiad not in [i[1] for i in oheap]: came_from[sasiad] = current hscore[sasiad] = tentative_h_score fscore[sasiad] = tentative_h_score + gscore[current] - gscore[sasiad] = gscore[current] + heurystyka(obiekty, current, sasiad) + gscore[sasiad] = gscore[current] + \ + heurystyka(obiekty, current, sasiad) heapq.heappush(oheap, (fscore[sasiad], sasiad)) obiekty["plansza"][sasiad[0], sasiad[1]].setKolor((0, 255, 0)) return False diff --git a/modele.py b/modele.py index 71f0b62..10f48c1 100644 --- a/modele.py +++ b/modele.py @@ -54,15 +54,16 @@ class Smieciarka(pygame.sprite.Sprite): sciezka = astar.astar(obiekty, self.pozycja, (random.randrange(15), random.randrange(15))) print(sciezka) - for koord in sciezka: - if koord[0] == self.x - 1 and koord[1] == self.y: - self.w_lewo() - elif koord[0] == self.x + 1 and koord[1] == self.y: - self.w_prawo() - elif koord[0] == self.x and koord[1] + 1 == self.y: - self.w_gore() - elif koord[0] == self.x and koord[1] - 1 == self.y: - self.w_dol() + if sciezka: + for koord in sciezka: + if koord[0] == self.x - 1 and koord[1] == self.y: + self.w_lewo() + elif koord[0] == self.x + 1 and koord[1] == self.y: + self.w_prawo() + elif koord[0] == self.x and koord[1] + 1 == self.y: + self.w_gore() + elif koord[0] == self.x and koord[1] - 1 == self.y: + self.w_dol() print("skonczylem") def w_lewo(self):