pelny ruch smieciarki astarem
This commit is contained in:
parent
d758feeda2
commit
090eb268e6
10
astar.py
10
astar.py
@ -5,6 +5,10 @@ def heurystyka(obiekty, a, b):
|
||||
heur = abs((b[0] - a[0])) + abs((b[1] - a[1]))
|
||||
if obiekty["plansza"][b[0], b[1]].jestDomem is True:
|
||||
heur += 2
|
||||
if obiekty["plansza"][b[0], b[1]].jestWysypiskiem is True:
|
||||
heur += 1
|
||||
if obiekty["plansza"][b[0], b[1]].jestKontenerem is True:
|
||||
heur += 2
|
||||
return heur
|
||||
|
||||
|
||||
@ -22,7 +26,7 @@ def astar(obiekty, start, cel):
|
||||
while oheap:
|
||||
current = heapq.heappop(oheap)[1]
|
||||
if current == cel:
|
||||
obiekty["plansza"][current[0], current[1]].setKolor((255, 0, 0))
|
||||
#obiekty["plansza"][current[0], current[1]].setKolor((255, 0, 0))
|
||||
data = []
|
||||
while current in came_from:
|
||||
|
||||
@ -30,7 +34,7 @@ def astar(obiekty, start, cel):
|
||||
current = came_from[current]
|
||||
return data[::-1]
|
||||
close_set.add(current)
|
||||
obiekty["plansza"][current[0], current[1]].setKolor((255, 0, 0))
|
||||
#obiekty["plansza"][current[0], current[1]].setKolor((255, 0, 0))
|
||||
for i, j in sasiedzi:
|
||||
sasiad = current[0] + i, current[1] + j
|
||||
|
||||
@ -50,5 +54,5 @@ def astar(obiekty, start, cel):
|
||||
fscore[sasiad] = tentative_h_score + gscore[current]
|
||||
gscore[sasiad] = gscore[current] + heurystyka(obiekty, current, sasiad)
|
||||
heapq.heappush(oheap, (fscore[sasiad], sasiad))
|
||||
obiekty["plansza"][sasiad[0], sasiad[1]].setKolor((0, 255, 0))
|
||||
#obiekty["plansza"][sasiad[0], sasiad[1]].setKolor((0, 255, 0))
|
||||
return False
|
||||
|
19
game.py
19
game.py
@ -70,9 +70,24 @@ def game():
|
||||
obiekty["smieciarka"].w_dol()
|
||||
|
||||
rysowaniePlanszy(obiekty)
|
||||
while(temp):
|
||||
obiekty["smieciarka"].astar_move(obiekty)
|
||||
while temp:
|
||||
nieodwiedzone_domy = obiekty["wspolrzedne_domow"]
|
||||
nieodwiedzone_kontenery = [(obiekty["kontener_szklo"].x, obiekty["kontener_szklo"].y),
|
||||
(obiekty["kontener_papier"].x, obiekty["kontener_papier"].y),
|
||||
(obiekty["kontener_metal"].x, obiekty["kontener_metal"].y),
|
||||
(obiekty["kontener_plastik"].x, obiekty["kontener_plastik"].y),
|
||||
(obiekty["kontener_organiczne"].x, obiekty["kontener_organiczne"].y)]
|
||||
temp = False
|
||||
while nieodwiedzone_domy:
|
||||
nieodwiedzone_domy.sort(key=lambda x: astar.heurystyka(obiekty, (obiekty["smieciarka"].x, obiekty["smieciarka"].y), x))
|
||||
cel = nieodwiedzone_domy.pop(0)
|
||||
obiekty["smieciarka"].astar_move(obiekty, (obiekty["smieciarka"].x, obiekty["smieciarka"].y), cel)
|
||||
|
||||
while nieodwiedzone_kontenery:
|
||||
nieodwiedzone_kontenery.sort(key=lambda x: astar.heurystyka(obiekty, (obiekty["smieciarka"].x, obiekty["smieciarka"].y), x))
|
||||
cel = nieodwiedzone_kontenery.pop(0)
|
||||
obiekty["smieciarka"].astar_move(obiekty, (obiekty["smieciarka"].x, obiekty["smieciarka"].y), cel)
|
||||
|
||||
clock.tick(7)
|
||||
#start = obiekty["plansza"][0, 14]
|
||||
#koniec = obiekty["plansza"][14, 0]
|
||||
|
@ -56,8 +56,9 @@ class Smieciarka(pygame.sprite.Sprite):
|
||||
elif rand_int == 3:
|
||||
self.w_dol()
|
||||
|
||||
def astar_move(self, obiekty):
|
||||
sciezka = astar.astar(obiekty, self.pozycja, (random.randrange(15), random.randrange(15)))
|
||||
def astar_move(self, obiekty, start, cel):
|
||||
|
||||
sciezka = astar.astar(obiekty, start, (cel[0], cel[1]))
|
||||
print(sciezka)
|
||||
if sciezka:
|
||||
for koord in sciezka:
|
||||
@ -166,6 +167,7 @@ class Dom(pygame.sprite.Sprite):
|
||||
def __init__(self, x, y):
|
||||
self.x = x
|
||||
self.y = y
|
||||
self.pozycja = (self.x, self.y)
|
||||
pygame.sprite.Sprite.__init__(self)
|
||||
self.image = pygame.image.__class__
|
||||
self.rect = pygame.Rect(self.x * WIDTH + MARGIN * self.x + MARGIN, self.y * HEIGHT + MARGIN * self.y + MARGIN,
|
||||
|
Loading…
Reference in New Issue
Block a user