diff --git a/src/__pycache__/__init__.cpython-38.pyc b/src/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000..0b2fcf3 Binary files /dev/null and b/src/__pycache__/__init__.cpython-38.pyc differ diff --git a/src/__pycache__/graphics.cpython-38.pyc b/src/__pycache__/graphics.cpython-38.pyc new file mode 100644 index 0000000..af0895d Binary files /dev/null and b/src/__pycache__/graphics.cpython-38.pyc differ diff --git a/src/__pycache__/matrix.cpython-38.pyc b/src/__pycache__/matrix.cpython-38.pyc new file mode 100644 index 0000000..d259645 Binary files /dev/null and b/src/__pycache__/matrix.cpython-38.pyc differ diff --git a/src/__pycache__/tile.cpython-38.pyc b/src/__pycache__/tile.cpython-38.pyc new file mode 100644 index 0000000..dc6801d Binary files /dev/null and b/src/__pycache__/tile.cpython-38.pyc differ diff --git a/src/__pycache__/waiter.cpython-38.pyc b/src/__pycache__/waiter.cpython-38.pyc new file mode 100644 index 0000000..437831f Binary files /dev/null and b/src/__pycache__/waiter.cpython-38.pyc differ diff --git a/src/graphics.py b/src/graphics.py index b8d7781..b593205 100644 --- a/src/graphics.py +++ b/src/graphics.py @@ -4,16 +4,16 @@ import pygame class Graphics: def __init__(self): self.image = { - 'floor': pygame.image.load('../resources/images/floor.jpg'), - 'wall': pygame.image.load('../resources/images/wall.png'), # - 'bar': pygame.image.load('../resources/images/table3.png'), # - 'bar_floor': pygame.image.load('../resources/images/waiter.png'), - 'table': pygame.image.load('../resources/images/table3.png'), - 'waiter': pygame.image.load('../resources/images/waiter.png'), - 'chair_front': pygame.image.load('../resources/images/chair-front.png'), # - 'chair_back': pygame.image.load('../resources/images/chair-back.png'), # - 'chair_left': pygame.image.load('../resources/images/chair-left.png'), # - 'chair_right': pygame.image.load('../resources/images/chair-right.png') # + 'floor': pygame.image.load('/Users/marcindobrowolski/Desktop/Python/Sztuczna_Inteligencja_2020/resources/images/floor.jpg'), + 'wall': pygame.image.load('/Users/marcindobrowolski/Desktop/Python/Sztuczna_Inteligencja_2020/resources/images/wall.png'), # + 'bar': pygame.image.load('/Users/marcindobrowolski/Desktop/Python/Sztuczna_Inteligencja_2020/resources/images/table3.png'), # + 'bar_floor': pygame.image.load('/Users/marcindobrowolski/Desktop/Python/Sztuczna_Inteligencja_2020/resources/images/waiter.png'), + 'table': pygame.image.load('/Users/marcindobrowolski/Desktop/Python/Sztuczna_Inteligencja_2020/resources/images/table3.png'), + 'waiter': pygame.image.load('/Users/marcindobrowolski/Desktop/Python/Sztuczna_Inteligencja_2020/resources/images/waiter.png'), + 'chair_front': pygame.image.load('/Users/marcindobrowolski/Desktop/Python/Sztuczna_Inteligencja_2020/resources/images/chair-front.png'), # + 'chair_back': pygame.image.load('/Users/marcindobrowolski/Desktop/Python/Sztuczna_Inteligencja_2020/resources/images/chair-back.png'), # + 'chair_left': pygame.image.load('/Users/marcindobrowolski/Desktop/Python/Sztuczna_Inteligencja_2020/resources/images/chair-left.png'), # + 'chair_right': pygame.image.load('/Users/marcindobrowolski/Desktop/Python/Sztuczna_Inteligencja_2020/resources/images/chair-right.png') # } self.block_size = 50 self.height = 15 diff --git a/src/matrix.py b/src/matrix.py index bd74866..f262245 100644 --- a/src/matrix.py +++ b/src/matrix.py @@ -1,4 +1,4 @@ -from src.tile import Tile +from .tile import Tile class Matrix: @@ -13,10 +13,11 @@ class Matrix: for x in range(graphics.width): for y in range(graphics.height): - self.matrix[x][y] = Tile(type_='floor') + self.matrix[x][y] = Tile('floor', x, y) def set_default_restaurant(self, graphics): - lines = [line.rstrip('\n') for line in open('../resources/simulations/simulation_1.txt')] + lines = [line.rstrip('\n') for line in open( + '/Users/marcindobrowolski/Desktop/Python/Sztuczna_Inteligencja_2020/resources/simulations/simulation_1.txt')] symbols = { '_': 'floor', 'W': 'wall', @@ -33,7 +34,7 @@ class Matrix: for x in range(graphics.width): for y in range(graphics.height): sign = lines[y][x] - self.matrix[x][y] = Tile(symbols[sign]) + self.matrix[x][y] = Tile(symbols[sign], x, y) def get_type(self, x, y): return self.matrix[x][y].type diff --git a/src/tile.py b/src/tile.py index 25f107b..56273a9 100644 --- a/src/tile.py +++ b/src/tile.py @@ -1,6 +1,6 @@ # TILE class Tile: - def __init__(self, type_): + def __init__(self, type_, x, y): self.type = type_ if self.type == 'wall': @@ -15,3 +15,17 @@ class Tile: self.action_required = 0 + # Atrybuty niezbedne dla A* + self.position = (x, y) + self.parent = None + self.totalCost = 0 # Koszt totalny czyli dystans do wierzcholka startowego + heurystyka + self.startCost = 0 # Dystans do wierzcholka startowego + # Dystant do wierzcholka koncowego oszacowany za pomoca funkcji heurystyki + self.heuristic = 0 + + # Operator porownywania pol + def __eq__(self, other): + return True if (self.position == other.position) else False + + +# dodanie atrybutu x i y do klasy Tile diff --git a/src/waiter.py b/src/waiter.py index b6e1de5..f0fa5f8 100644 --- a/src/waiter.py +++ b/src/waiter.py @@ -1,6 +1,6 @@ import pygame -from src.matrix import Matrix +from .matrix import Matrix # WAITER @@ -11,6 +11,7 @@ class Waiter(pygame.sprite.Sprite): self.Y = 0 self.frame = 0 self.matrix = Matrix(graphics=graphics) + self.direction = 'E' # Borders def move(self, x, y, graphics): @@ -21,12 +22,92 @@ class Waiter(pygame.sprite.Sprite): def update(self, event, graphics): if event.type == pygame.KEYDOWN: - if event.key == pygame.K_LEFT: - self.move(-1, 0, graphics) if event.key == pygame.K_RIGHT: - self.move(1, 0, graphics) + if self.direction == 'N': + self.direction = 'W' + elif self.direction == 'S': + self.direction = 'E' + elif self.direction == 'E': + self.direction = 'N' + elif self.direction == 'W': + self.direction = 'S' + if event.key == pygame.K_LEFT: + if self.direction == 'N': + self.direction = 'E' + elif self.direction == 'S': + self.direction = 'W' + elif self.direction == 'E': + self.direction = 'S' + elif self.direction == 'W': + self.direction = 'N' if event.key == pygame.K_UP: - self.move(0, -1, graphics) - if event.key == pygame.K_DOWN: - self.move(0, 1, graphics) + if self.direction == 'N': + self.move(0, 1, graphics) + if self.direction == 'S': + self.move(0, -1, graphics) + if self.direction == 'E': + self.move(1, 0, graphics) + if self.direction == 'W': + self.move(-1, 0, graphics) print(self.X, self.Y) + + # AStar + def findPath(self, goal): + #Stworzenie startowego i koncowego wierzcholka + startNode = self.matrix.matrix[self.X][self.Y] + goalNode = self.matrix.matrix[goal[0]][goal[1]] + + #Inicjalizacja list + openList = [] + closedList = [] + + openList.append(startNode) + + while len(openList) > 0: + + openList.sort(key=tile.totalCost) + currentNode = openList.pop(0) + closedList.append(currentNode) + + if currentNode == goalNode: + pass + #Tutaj odbywac sie bedzie budowanie sciezki gdy algorytm osiagnie cel + + children = [] + if currentNode.X >= 0: + if currentNode.Y + 1 < len(self.matrix.matrix[0]): + if self.matrix.matrix[currentNode.X][currentNode.Y + 1].walk_through == 1: + children.append(self.matrix.matrix[currentNode.X][currentNode.Y + 1]) + if currentNode.Y - 1 >= 0: + if self.matrix.matrix[currentNode.X][currentNode.Y - 1].walk_through == 1: + children.append(self.matrix.matrix[currentNode.X][currentNode.Y - 1]) + + if currentNode.X + 1 < len(self.matrix.matrix): + if currentNode.Y + 1 < len(self.matrix.matrix[0]): + if self.matrix.matrix[currentNode.X + 1][currentNode.Y + 1].walk_through == 1: + children.append(self.matrix.matrix[currentNode.X + 1][currentNode.Y + 1]) + if currentNode.Y - 1 >= 0: + if self.matrix.matrix[currentNode.X + 1][currentNode.Y - 1].walk_through == 1: + children.append(self.matrix.matrix[currentNode.X + 1][currentNode.Y - 1]) + if currentNode.Y >= 0: + if self.matrix.matrix[currentNode.X + 1][currentNode.Y].walk_through == 1: + children.append(self.matrix.matrix[currentNode.X + 1][currentNode.Y]) + + if currentNode.X - 1 >= 0: + if currentNode.Y + 1 < len(self.matrix.matrix[0]): + if self.matrix.matrix[currentNode.X - 1][currentNode.Y + 1].walk_through == 1: + children.append(self.matrix.matrix[currentNode.X - 1][currentNode.Y + 1]) + if currentNode.Y - 1 >= 0: + if self.matrix.matrix[currentNode.X - 1][currentNode.Y - 1].walk_through == 1: + children.append(self.matrix.matrix[currentNode.X - 1][currentNode.Y - 1]) + if currentNode.Y >= 0: + if self.matrix.matrix[currentNode.X - 1][currentNode.Y].walk_through == 1: + children.append(self.matrix.matrix[currentNode.X - 1][currentNode.Y]) + + for child in children: + + if child in closedList: + continue + + +