diff --git a/main.py b/main.py new file mode 100644 index 0000000..016ffe0 --- /dev/null +++ b/main.py @@ -0,0 +1,35 @@ +import sys + +from src.graphics import * +from src.waiter import * + +if __name__ == "__main__": + # SETUP + pygame.init() + clock = pygame.time.Clock() + fps = 40 + graphics = Graphics() + waiter = Waiter(graphics) + + # init functions + graphics.drawBackground(waiter.matrix) + graphics.update(waiter.X, waiter.Y) + + while True: + for event in pygame.event.get(): + if event.type == pygame.QUIT: + pygame.quit() + sys.exit() + break + + if event.type == pygame.KEYDOWN: + if event.key == pygame.K_ESCAPE: + pygame.quit() + sys.exit() + break + + graphics.clear(waiter.X, waiter.Y) + waiter.update(event, graphics) + graphics.update(waiter.X, waiter.Y) + pygame.display.flip() + clock.tick(fps) diff --git a/resources/images/chair-back.png b/resources/images/chair-back.png new file mode 100644 index 0000000..45ddf0d Binary files /dev/null and b/resources/images/chair-back.png differ diff --git a/resources/images/chair-front.png b/resources/images/chair-front.png new file mode 100644 index 0000000..60b141b Binary files /dev/null and b/resources/images/chair-front.png differ diff --git a/resources/images/chair-left.png b/resources/images/chair-left.png new file mode 100644 index 0000000..a6d2f17 Binary files /dev/null and b/resources/images/chair-left.png differ diff --git a/resources/images/chair-right.png b/resources/images/chair-right.png new file mode 100644 index 0000000..46d5b98 Binary files /dev/null and b/resources/images/chair-right.png differ diff --git a/resources/images/wall.png b/resources/images/wall.png new file mode 100644 index 0000000..5fd1323 Binary files /dev/null and b/resources/images/wall.png differ diff --git a/resources/simulations/simulation_1.txt b/resources/simulations/simulation_1.txt new file mode 100644 index 0000000..b452938 --- /dev/null +++ b/resources/simulations/simulation_1.txt @@ -0,0 +1,15 @@ +______________ +______________ +__PW_____PW___ +_USWP___USWP__ +__OWS____OWSI_ +__PWO____PWO__ +_USW____USW___ +__OWP____OWP__ +__PWS____PWSI_ +_USWO___USWO__ +__OW_____OW___ +______________ +______________ +BBBBB_________ +FFFFB_________ \ No newline at end of file diff --git a/resources/simulations/simulation_2.txt b/resources/simulations/simulation_2.txt new file mode 100644 index 0000000..b271377 --- /dev/null +++ b/resources/simulations/simulation_2.txt @@ -0,0 +1,8 @@ +X___TXFX +T_X_X__X +X_X_X_XX +T_X____T +X_X_XX_X +X_X____T +T_X_XXXX +XXX____W \ No newline at end of file diff --git a/resources/simulations/simulation_3.txt b/resources/simulations/simulation_3.txt new file mode 100644 index 0000000..69bc73e --- /dev/null +++ b/resources/simulations/simulation_3.txt @@ -0,0 +1,2 @@ +__X +___ \ No newline at end of file diff --git a/src/__pycache__/graphics.cpython-37.pyc b/src/__pycache__/graphics.cpython-37.pyc new file mode 100644 index 0000000..49c4571 Binary files /dev/null and b/src/__pycache__/graphics.cpython-37.pyc differ diff --git a/src/__pycache__/matrix.cpython-37.pyc b/src/__pycache__/matrix.cpython-37.pyc new file mode 100644 index 0000000..afca1ee Binary files /dev/null and b/src/__pycache__/matrix.cpython-37.pyc differ diff --git a/src/__pycache__/tile.cpython-37.pyc b/src/__pycache__/tile.cpython-37.pyc index 1926922..465e2fb 100644 Binary files a/src/__pycache__/tile.cpython-37.pyc and b/src/__pycache__/tile.cpython-37.pyc differ diff --git a/src/__pycache__/waiter.cpython-37.pyc b/src/__pycache__/waiter.cpython-37.pyc new file mode 100644 index 0000000..5fdaebc Binary files /dev/null and b/src/__pycache__/waiter.cpython-37.pyc differ diff --git a/src/graphics.py b/src/graphics.py new file mode 100644 index 0000000..dc2e0a8 --- /dev/null +++ b/src/graphics.py @@ -0,0 +1,36 @@ +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') # + } + self.block_size = 50 + self.height = 15 + self.width: int = 14 + self.screen = pygame.display.set_mode((self.block_size * self.width, self.block_size * self.height)) + + def drawBackground(self, matrix): + for y in range(self.height): + for x in range(self.width): + self.screen.blit(self.image['floor'], (x * self.block_size, y * self.block_size)) + + for y in range(self.height): + for x in range(self.width): + self.screen.blit(self.image[matrix.get_type(x, y)], (x * self.block_size, y * self.block_size)) + + def clear(self, x, y): + self.screen.blit(self.image['floor'], (x * self.block_size, y * self.block_size)) + + def update(self, x, y): + self.screen.blit(self.image['waiter'], (x * self.block_size, y * self.block_size)) diff --git a/src/matrix.py b/src/matrix.py new file mode 100644 index 0000000..bd74866 --- /dev/null +++ b/src/matrix.py @@ -0,0 +1,45 @@ +from src.tile import Tile + + +class Matrix: + def __init__(self, graphics): + self.matrix = [] + self.set_default_matrix(graphics) + self.set_default_restaurant(graphics) + + def set_default_matrix(self, graphics): + for x in range(graphics.width): + self.matrix.append([0] * graphics.height) + + for x in range(graphics.width): + for y in range(graphics.height): + self.matrix[x][y] = Tile(type_='floor') + + def set_default_restaurant(self, graphics): + lines = [line.rstrip('\n') for line in open('../resources/simulations/simulation_1.txt')] + symbols = { + '_': 'floor', + 'W': 'wall', + 'S': 'table', + 'B': 'bar', + 'F': 'bar_floor', + 'P': 'chair_front', + 'O': 'chair_back', + 'I': 'chair_left', + 'U': 'chair_right', + 'X': 'waiter' + } + + for x in range(graphics.width): + for y in range(graphics.height): + sign = lines[y][x] + self.matrix[x][y] = Tile(symbols[sign]) + + def get_type(self, x, y): + return self.matrix[x][y].type + + def walk_through(self, x, y): + return self.matrix[x][y].walk_through + + def watch_through(self, x, y): + return self.matrix[x][y].watch_through diff --git a/src/tile.py b/src/tile.py index c63e8aa..25f107b 100644 --- a/src/tile.py +++ b/src/tile.py @@ -1,7 +1,17 @@ # TILE class Tile: - def __init__(self, type_, watch_through): - self.watch_through = watch_through - self.walk_through = 1 - self.action_required = 0 + def __init__(self, type_): self.type = type_ + + if self.type == 'wall': + self.watch_through = 0 + self.walk_through = 0 + elif self.type == 'table' or self.type == 'bar' or self.type == 'chair': + self.watch_through = 1 + self.walk_through = 0 + else: + self.walk_through = 1 + self.watch_through = 1 + + self.action_required = 0 + diff --git a/src/waiter.py b/src/waiter.py new file mode 100644 index 0000000..b6e1de5 --- /dev/null +++ b/src/waiter.py @@ -0,0 +1,32 @@ +import pygame + +from src.matrix import Matrix + + +# WAITER +class Waiter(pygame.sprite.Sprite): + def __init__(self, graphics): + pygame.sprite.Sprite.__init__(self) + self.X = 0 + self.Y = 0 + self.frame = 0 + self.matrix = Matrix(graphics=graphics) + + # Borders + def move(self, x, y, graphics): + if 0 <= self.X + x <= graphics.width - 1 and 0 <= self.Y + y <= graphics.height - 1: + if self.matrix.walk_through(self.X + x, self.Y + y) == 1: + self.X += x + self.Y += y + + 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 event.key == pygame.K_UP: + self.move(0, -1, graphics) + if event.key == pygame.K_DOWN: + self.move(0, 1, graphics) + print(self.X, self.Y)