pelny ruch smieciarki astarem

This commit is contained in:
s444349 2020-04-26 16:13:54 +02:00
parent d758feeda2
commit 090eb268e6
3 changed files with 28 additions and 7 deletions

View File

@ -5,6 +5,10 @@ def heurystyka(obiekty, a, b):
heur = abs((b[0] - a[0])) + abs((b[1] - a[1])) heur = abs((b[0] - a[0])) + abs((b[1] - a[1]))
if obiekty["plansza"][b[0], b[1]].jestDomem is True: if obiekty["plansza"][b[0], b[1]].jestDomem is True:
heur += 2 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 return heur
@ -22,7 +26,7 @@ def astar(obiekty, start, cel):
while oheap: while oheap:
current = heapq.heappop(oheap)[1] current = heapq.heappop(oheap)[1]
if current == cel: if current == cel:
obiekty["plansza"][current[0], current[1]].setKolor((255, 0, 0)) #obiekty["plansza"][current[0], current[1]].setKolor((255, 0, 0))
data = [] data = []
while current in came_from: while current in came_from:
@ -30,7 +34,7 @@ def astar(obiekty, start, cel):
current = came_from[current] current = came_from[current]
return data[::-1] return data[::-1]
close_set.add(current) 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: for i, j in sasiedzi:
sasiad = current[0] + i, current[1] + j sasiad = current[0] + i, current[1] + j
@ -50,5 +54,5 @@ def astar(obiekty, start, cel):
fscore[sasiad] = tentative_h_score + gscore[current] 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)) 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 return False

19
game.py
View File

@ -70,9 +70,24 @@ def game():
obiekty["smieciarka"].w_dol() obiekty["smieciarka"].w_dol()
rysowaniePlanszy(obiekty) rysowaniePlanszy(obiekty)
while(temp): while temp:
obiekty["smieciarka"].astar_move(obiekty) 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 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) clock.tick(7)
#start = obiekty["plansza"][0, 14] #start = obiekty["plansza"][0, 14]
#koniec = obiekty["plansza"][14, 0] #koniec = obiekty["plansza"][14, 0]

View File

@ -56,8 +56,9 @@ class Smieciarka(pygame.sprite.Sprite):
elif rand_int == 3: elif rand_int == 3:
self.w_dol() self.w_dol()
def astar_move(self, obiekty): def astar_move(self, obiekty, start, cel):
sciezka = astar.astar(obiekty, self.pozycja, (random.randrange(15), random.randrange(15)))
sciezka = astar.astar(obiekty, start, (cel[0], cel[1]))
print(sciezka) print(sciezka)
if sciezka: if sciezka:
for koord in sciezka: for koord in sciezka:
@ -166,6 +167,7 @@ class Dom(pygame.sprite.Sprite):
def __init__(self, x, y): def __init__(self, x, y):
self.x = x self.x = x
self.y = y self.y = y
self.pozycja = (self.x, self.y)
pygame.sprite.Sprite.__init__(self) pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.__class__ self.image = pygame.image.__class__
self.rect = pygame.Rect(self.x * WIDTH + MARGIN * self.x + MARGIN, self.y * HEIGHT + MARGIN * self.y + MARGIN, self.rect = pygame.Rect(self.x * WIDTH + MARGIN * self.x + MARGIN, self.y * HEIGHT + MARGIN * self.y + MARGIN,