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]))
|
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
19
game.py
@ -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]
|
||||||
|
@ -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,
|
||||||
|
Loading…
Reference in New Issue
Block a user