From 77afd5cc159121e7d1c6b605391c910cba2895e7 Mon Sep 17 00:00:00 2001 From: matixezor Date: Sun, 25 Apr 2021 22:28:44 +0200 Subject: [PATCH] fix some stuff --- src/environment.py | 2 +- src/main.py | 28 ++++++++++++++-------------- src/search_algoritms/a_star.py | 11 ++++++----- src/tilesFactory.py | 4 ++-- 4 files changed, 23 insertions(+), 22 deletions(-) diff --git a/src/environment.py b/src/environment.py index 1e2db69..df881f4 100644 --- a/src/environment.py +++ b/src/environment.py @@ -8,7 +8,7 @@ from tilesFactory import TilesFactory def generate_field() -> List[List[Tile]]: tiles_factory = TilesFactory() tiles_list = tiles_factory.get_tiles_list() - return [choices(tiles_list, weights=[10, 10, 4, 4, 4, 4, 4, 4, 4, 4, 4,2,2], k=12) for _ in range(12)] + return [choices(tiles_list, weights=[10, 10, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2], k=10) for _ in range(10)] class Environment: diff --git a/src/main.py b/src/main.py index f555f21..28d4a23 100644 --- a/src/main.py +++ b/src/main.py @@ -64,21 +64,21 @@ def main(): elif event.type == pg.KEYDOWN: if event.key == pg.K_t: print('Starting to clear the sector') - while env.mine_count: - print('-'*20) - path, actions = breadth_first_search(env.field, agent.x, agent.y, agent.direction) - #xd: Tuple[int,int] = Tuple[agent.x, agent.y] - # path, actions = a_star(env.field, agent.x, agent.y, agent.direction, nearest_bomb((agent.x, agent.y), env.field)) - if not path and not env.field[agent.y][agent.x].mine: - print('Unable to find path, rocks are in the way') - break - print(f'Path{path}') - print(f'Actions:{actions}') - for action in actions: - pg.fastevent.post(pg.event.Event(pg.KEYDOWN, {'key': action})) + #while env.mine_count: + print('-'*20) + #path, actions = breadth_first_search(env.field, agent.x, agent.y, agent.direction) + #xd: Tuple[int,int] = Tuple[agent.x, agent.y] + path, actions = a_star(env.field, agent.x, agent.y, agent.direction, nearest_bomb((agent.x, agent.y), env.field)) + if not path and not env.field[agent.y][agent.x].mine: + print('Unable to find path, rocks are in the way') + break + print(f'Path{path}') + print(f'Actions:{actions}') + for action in actions: + pg.fastevent.post(pg.event.Event(pg.KEYDOWN, {'key': action})) - pg.fastevent.post(pg.event.Event(pg.KEYDOWN, {'key': pg.K_SPACE})) - handle_keys(env, agent, game_ui, factory) + pg.fastevent.post(pg.event.Event(pg.KEYDOWN, {'key': pg.K_SPACE})) + handle_keys(env, agent, game_ui, factory) print('Sector clear') else: pg.fastevent.post(event) diff --git a/src/search_algoritms/a_star.py b/src/search_algoritms/a_star.py index 59b231f..6d776d6 100644 --- a/src/search_algoritms/a_star.py +++ b/src/search_algoritms/a_star.py @@ -3,11 +3,13 @@ from operator import itemgetter from src.node import Node from src.tile import Tile +from ap_mine import APMine +from at_mine import ATMine from .helpers import successor, get_path_actions, calculate_priority -from ..mine import Mine def a_star(field: List[List[Tile]], start_x: int, start_y: int, start_direction: int, goal: Tuple[int, int]): + print(goal) explored = [] node_queue: List[Tuple[int, Node]] = [(field[start_x][start_y].weight, Node(start_x, start_y, start_direction))] # do kolejki dodawać krotke (priorytet, obiekt) @@ -16,7 +18,7 @@ def a_star(field: List[List[Tile]], start_x: int, start_y: int, start_direction: priority, node = node_queue.pop(0) # przy get wyciąga element z najniższą wartością priorytetu - if field[node.y][node.x] == goal: + if (node.x, node.y) == goal: return get_path_actions(node) explored.append(node) @@ -29,7 +31,6 @@ def a_star(field: List[List[Tile]], start_x: int, start_y: int, start_direction: elif (index := [ index for index, queue_tuple in enumerate(node_queue) if neighbour_priority > queue_tuple[0] and neighbour_node == queue_tuple[1] ]): - print(index) node_queue[index[0]] = (neighbour_priority, neighbour_node) node_queue = sorted(node_queue, key=itemgetter(0)) @@ -42,13 +43,13 @@ def heuristic(a: Tuple[int, int], b: Tuple[int, int]): return abs(x1 - x2) + abs(y1 - y2) -def nearest_bomb(a: Tuple[int, int],field: List[List[Tile]]): +def nearest_bomb(a: Tuple[int, int], field: List[List[Tile]]): min = 20 min_x = 0 min_y = 0 for x in range(10): for y in range(10): - if issubclass(Mine,field[x][y].mine.__class__): + if isinstance(field[y][x].mine, (APMine, ATMine)): distance = abs(a[0] - x) + abs(a[1] - y) if distance < min: min = distance diff --git a/src/tilesFactory.py b/src/tilesFactory.py index b7b6eb0..ce6e898 100644 --- a/src/tilesFactory.py +++ b/src/tilesFactory.py @@ -10,9 +10,9 @@ class TilesFactory: img = IMAGES[number] if img.mine_type: module = import_module(f'{img.mine_type.lower()}_mine') - return Tile(number, 1, getattr(module, f'{img.mine_type}Mine')) + return Tile(number, 1, getattr(module, f'{img.mine_type}Mine')()) else: - return Tile(number, 1, None) if img.name.find('grass') else Tile(number,3, None) + return Tile(number, 1, None) if img.name.find('grass') else Tile(number, 3, None) def get_tiles_list(self) -> List[Tile]: return [self.create_tile(i) for i in range(13)]