agent finding the way to multiple chests, stopping after there are none on the board
This commit is contained in:
parent
99ca90e29a
commit
97e762fd08
31
hero.py
31
hero.py
@ -20,7 +20,8 @@ class Player(Creature):
|
||||
self.directions = [[0, 1], [1, 0], [0, -1], [-1, 0]]
|
||||
self.direction = 0
|
||||
self.queue=[]
|
||||
self.goalchest=False
|
||||
self.hasgoalchest=False
|
||||
self.openedchests=0
|
||||
|
||||
def rotate(self, clockwise=True):
|
||||
if clockwise:
|
||||
@ -128,6 +129,10 @@ class Player(Creature):
|
||||
self.gold = self.gold + chest.gold
|
||||
print("Chest opened. Gold inside:", chest.gold)
|
||||
chest.gold = 0
|
||||
self.openedchests+=1
|
||||
self.hasgoalchest=False
|
||||
chest.model.grid.remove_agent(chest)
|
||||
self.direction=0 #po osiągnięciu jednego celu 'restartuje sie' na szukanie ścieżki do kolejnego
|
||||
# if isinstance(chest.loot,Armor):
|
||||
# buffer = self.armor
|
||||
# self.armor = chest.loot
|
||||
@ -159,7 +164,7 @@ class Player(Creature):
|
||||
cell_contents = self.model.grid.get_cell_list_contents([cur_pos])
|
||||
if cell_contents and any([isinstance(thing, Box) for thing in cell_contents]):
|
||||
found_target = cur_pos
|
||||
self.goalchest=True
|
||||
self.hasgoalchest=True
|
||||
break
|
||||
|
||||
#enqueue safe unvisited neighbours
|
||||
@ -184,7 +189,7 @@ class Player(Creature):
|
||||
path.insert(0, precedessor)
|
||||
return path
|
||||
|
||||
return False
|
||||
return "no chests left"
|
||||
|
||||
# Funkcja konwertujaca wspolrzedne nastepnego pola do odwiedzenia
|
||||
# na kolejke akcji do wykonania
|
||||
@ -273,18 +278,20 @@ class Player(Creature):
|
||||
|
||||
def step(self):
|
||||
if self.health > 0:
|
||||
# self.moveFwd()
|
||||
# self.rotate(False)
|
||||
print("position: ", self.pos)
|
||||
#print("direction: ", self.direction)
|
||||
if not self.goalchest: #jeśli nie ma wyznaczonej skrzynki do której idzie to robi bfs żeby ją wyznaczyć
|
||||
if not self.hasgoalchest: #jeśli nie ma wyznaczonej skrzynki do której idzie to robi bfs żeby ją wyznaczyć
|
||||
self.path=self.findShortestPathToTarget()
|
||||
print("the player should follow this path:", self.path)
|
||||
for i in range(len(self.path)-1): #iteruje po kolejnych krotkach ze współrzędnymi pól
|
||||
#actionPlanner ma się wykonać i-1 razy, bo dla ostatniego pola już nie
|
||||
self.actionPlanner(self.path[i], self.path[i+1]) #dla każdego pola dodaje do kolejki kilka akcji potrzebnych żeby do niego dojść
|
||||
print(self.queue)
|
||||
self.direction=0 # bo po obrotach w wyznaczaniu ścieżki trzeba wrócić do orientacji takiej, jaka była na starcie wyznaczania
|
||||
if self.path=="no chests left":
|
||||
print("no chests left, life has lost meaning")
|
||||
else:
|
||||
print("the player should follow this path:", self.path)
|
||||
for i in range(len(self.path)-1): #iteruje po kolejnych krotkach ze współrzędnymi pól
|
||||
#actionPlanner ma się wykonać i-1 razy, bo dla ostatniego pola już nie
|
||||
self.actionPlanner(self.path[i], self.path[i+1]) #dla każdego pola dodaje do kolejki kilka akcji potrzebnych żeby do niego dojść
|
||||
print(self.queue)
|
||||
self.direction=0 # bo po obrotach w wyznaczaniu ścieżki trzeba wrócić do orientacji takiej, jaka była na starcie wyznaczania
|
||||
#to znaczy, że po otwarciu skrzynki też się zeruje żeby zacząć wyznaczanie i chodzenie od takiej samej
|
||||
while len(self.queue)!=0:
|
||||
self.action=self.queue.pop(0)
|
||||
if self.action=="tr":
|
||||
|
Loading…
Reference in New Issue
Block a user