From 63645f3b24344d41dce0e84aedb1a9713e7dc6b9 Mon Sep 17 00:00:00 2001 From: Darek Golomski Date: Mon, 12 Apr 2021 16:02:10 +0200 Subject: [PATCH] Repair agent --- images/sapper_idle/agent0.png | Bin 13153 -> 5710 bytes images/sapper_idle/agent2.png | Bin 5710 -> 13153 bytes src/BFS.py | 18 ++++++++++-------- src/const.py | 10 +++++++++- src/game_ui.py | 2 +- src/main.py | 19 +++++++++++++------ 6 files changed, 33 insertions(+), 16 deletions(-) diff --git a/images/sapper_idle/agent0.png b/images/sapper_idle/agent0.png index c3e84ad7b0d218f6f799df70ded644afe52a708f..8869cc55f583e76f91f0e29c4048f4072037f4a9 100644 GIT binary patch delta 5645 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 delta 13146 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 diff --git a/images/sapper_idle/agent2.png b/images/sapper_idle/agent2.png index 8869cc55f583e76f91f0e29c4048f4072037f4a9..c3e84ad7b0d218f6f799df70ded644afe52a708f 100644 GIT binary patch delta 13146 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 delta 5645 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 diff --git a/src/BFS.py b/src/BFS.py index 0a2573f..3036c03 100644 --- a/src/BFS.py +++ b/src/BFS.py @@ -11,9 +11,12 @@ def successor(x: int, y: int, direction: int): for i in range(4): # TODO # naprawić by zaczął od prawej i szedł zgodnie z zegarem + # prawo -> góra -> lewo -> dół + # chcemy: prawo -> dół -> lewo -> góra neighbour_x = x + DIRECTIONS_X[i] neighbour_y = y + DIRECTIONS_Y[i] neighbour_side = DIRECTIONS_SIDE[i] + # print(neighbour_x, neighbour_y, neighbour_side) if 0 <= neighbour_x <= 9 and 0 <= neighbour_y <= 9: # TODO @@ -26,10 +29,10 @@ def successor(x: int, y: int, direction: int): # d 100 # w 119 # 1 direction -> prawo - # neighbour side 1 -> po prawej 1-1 =0 -> W - # neighbour side 2 -> na gorze 2-1 =1 -> D + W - # neighbour side 3 -> po lewej 3-1 =2 -> D + D + W - # neighbour side 0 -> na dole 0-1 =-1 -> A + W + # neighbour side 1 -> po prawej 1-1 = 0 -> W + # neighbour side 2 -> na gorze 2-1 = 1 -> D + W + # neighbour side 3 -> po lewej 3-1 = 2 -> D + D + W + # neighbour side 0 -> na dole 0-1 = -1 -> A + W def breadth_first_search(field: List[List[Tile]], start_x: int, start_y: int, start_direction: int): @@ -43,12 +46,11 @@ def breadth_first_search(field: List[List[Tile]], start_x: int, start_y: int, st if field[node.y][node.x].mine: path = [] actions = [] - print(explored) while node.parent: path.append((node.x, node.y)) - actions.extend(node.actions) + actions.append(node.actions) node = node.parent - return path, actions + return path[::-1], sum(actions[::-1], []) for x, y, direction, actions in successor(node.x, node.y, node.direction): if field[y][x].number in (2, 3): @@ -59,4 +61,4 @@ def breadth_first_search(field: List[List[Tile]], start_x: int, start_y: int, st neighbour_node = Node(x, y, direction, node, actions) node_queue.put(neighbour_node) - return False + return False, False diff --git a/src/const.py b/src/const.py index d912b8e..b50f30f 100644 --- a/src/const.py +++ b/src/const.py @@ -63,6 +63,14 @@ DEFAULT_FIELD = [ ] # TODO # to poprawić + +# -1 -> prawo, ruch +# 0 -> ruch +# 1 -> lewo, ruch +# -2 -> prawo, prawo, ruch +# 2 -> lewo, lewo, ruch +# -3 -> lewo, ruch +# 3 -> prawo, ruch ACTIONS = { -1: [pg.K_d, pg.K_w], 0: [pg.K_w], @@ -74,5 +82,5 @@ ACTIONS = { } # TODO DIRECTIONS_X = (1, 0, -1, 0) -DIRECTIONS_Y = (0, -1, 0, 1) +DIRECTIONS_Y = (0, 1, 0, -1) DIRECTIONS_SIDE = (1, 2, 3, 0) diff --git a/src/game_ui.py b/src/game_ui.py index e9b2aa9..a3f4ae4 100644 --- a/src/game_ui.py +++ b/src/game_ui.py @@ -14,7 +14,7 @@ class GameUi: def move(self): coord = 'x' if self.agent.direction in (1, 3) else 'y' - shift = -1 if self.agent.direction in (2, 3) else 1 + shift = -1 if self.agent.direction in (0, 3) else 1 if coord == 'x': if self.env.field[self.agent.y][self.agent.x+shift].number in (2, 3): diff --git a/src/main.py b/src/main.py index cd897fd..1ec8d80 100644 --- a/src/main.py +++ b/src/main.py @@ -25,10 +25,10 @@ def main(): # TODO # poprawić numeracje stron agenta by szło zgodnie z zegarem # ruchy agenta: - # 1 - right - # 2 - up - # 3 - left - # 0 - down + # 1 - right -> 1 + # 0 - up -> 0 + # 3 - left -> 3 + # 2 - down -> 2 while running: for event in pg.event.get(): @@ -42,11 +42,12 @@ def main(): elif (event.key == pg.K_w or event.key == pg.K_UP) \ and ((agent.direction == 1 and agent.x * 80 < 700) or (agent.direction == 3 and agent.x * 80 > 5) - or (agent.direction == 2 and agent.y * 80 > 0) - or (agent.direction == 0 and agent.y * 80 < 700)): + or (agent.direction == 0 and agent.y * 80 > 0) + or (agent.direction == 2 and agent.y * 80 < 700)): game_ui.move() elif event.key == pg.K_SPACE: if env.field[agent.y][agent.x].mine: + env.mine_count -= 1 env.field[agent.y][agent.x] = factory.create_tile( IMAGES[env.field[agent.y][agent.x].number].parent ) @@ -55,9 +56,15 @@ def main(): # TODO # petla while dopóki env.mine_count != 0 # uwzglednienie czy bfs zwraca False i wtedy break + # for i in range(1): + pg.time.delay(50) path, actions = breadth_first_search(env.field, agent.x, agent.y, agent.direction) print(path, actions) + if not path: + print("CHUJA") + break for action in actions: + print(action) pg.event.post(pg.event.Event(pg.KEYDOWN, {'key': action})) pg.event.post(pg.event.Event(pg.KEYDOWN, {'key': pg.K_SPACE}))