From 9f0cdbc5ffc3e022d5748d94e98a2df526266a57 Mon Sep 17 00:00:00 2001 From: Pawel Felcyn Date: Mon, 3 Apr 2023 15:29:22 +0200 Subject: [PATCH 1/6] add method for rendering img in cell --- gameContext.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/gameContext.py b/gameContext.py index 592a491..3abfaf9 100644 --- a/gameContext.py +++ b/gameContext.py @@ -1,3 +1,4 @@ +from typing import Tuple import pygame from PIL import Image @@ -8,6 +9,14 @@ class GameContext: dust_car_pygame = None dust_car_pil = None canvas = None + _cell_size: int = 30 + + def render_in_cell(self, cell: Tuple[int, int], img_path: str): + img = Image.open(img_path) + pygame_img = pygame.image.frombuffer(img.tobytes(), (self._cell_size,self._cell_size), 'RGB') + start_x = (cell[0] - 1) * self._cell_size + start_y = (cell[1] - 1) * self._cell_size + self.canvas.blit(pygame_img, (start_x, start_y)) def startup(game_context: GameContext): render_background(game_context) From 51fdebbc00b40c60d38c8c4b1f7d2d1a292c368e Mon Sep 17 00:00:00 2001 From: Pawel Felcyn Date: Mon, 3 Apr 2023 15:29:36 +0200 Subject: [PATCH 2/6] add imgs of street --- imgs/street_horizontal.png | Bin 0 -> 165 bytes imgs/street_vertical.png | Bin 0 -> 166 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 imgs/street_horizontal.png create mode 100644 imgs/street_vertical.png diff --git a/imgs/street_horizontal.png b/imgs/street_horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..48d915750fb76e4c31ba698a95204e300b33c400 GIT binary patch literal 165 zcmeAS@N?(olHy`uVBq!ia0vp^av;pX1SGcvS$+jljKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85qP=L734qNaX`i(8|-rF~r0B?U{vw3h2XW2)_OlI$C%vz@6foecw7(8A5T-G@y GGywoaxG&ZK literal 0 HcmV?d00001 From ba49049cc3851cad40c77403c81b19f125ac2288 Mon Sep 17 00:00:00 2001 From: Pawel Felcyn Date: Mon, 3 Apr 2023 15:43:03 +0200 Subject: [PATCH 3/6] add street class --- street.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 street.py diff --git a/street.py b/street.py new file mode 100644 index 0000000..931b189 --- /dev/null +++ b/street.py @@ -0,0 +1,25 @@ +from enum import Enum +from typing import Tuple +from gameContext import GameContext + +class StreetType (Enum): + VERTICAL = 0 + HORIZONTAL = 0 + +class Street: + street_type: StreetType + start_cell: int + end_cell: int + row_or_column: int + + def __init__(self, start_cell: int, end_cell: int, row_or_column: int, street_type: StreetType = StreetType.VERTICAL) -> None: + self.start_cell = start_cell + self.end_cell = end_cell + self.street_type = street_type + self.row_or_column = row_or_column + + def render(self, game_context: GameContext) -> None: + for i in range(self.start_cell, self.end_cell): + img_str: str = 'imgs/street_vertical.png' if self.street_type == StreetType.VERTICAL else 'imgs/street_horizontal.png' + cell: Tuple[int, int] = (i, self.row_or_column) if self.street_type == StreetType.VERTICAL else (self.row_or_column, i) + game_context.render_in_cell(cell, img_str) From b8280a3854844401d5a7271fec9e0c4352ffa15d Mon Sep 17 00:00:00 2001 From: Pawel Felcyn Date: Mon, 3 Apr 2023 15:49:28 +0200 Subject: [PATCH 4/6] add render method in city class --- city.py | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/city.py b/city.py index 4980337..0036dab 100644 --- a/city.py +++ b/city.py @@ -1,17 +1,19 @@ -from typing import List, Tuple +from typing import List from garbageCan import GarbageCan +from street import Street +from gameContext import GameContext class Node: garbageCan: GarbageCan id: int def __init__(self, id: int, can: GarbageCan) -> None: - self.id = id + self.id self.can = can class City: nodes: List[Node] - streets: List[Tuple[int, int]] + streets: List[Street] def __init__(self) -> None: self.nodes = [] @@ -20,20 +22,12 @@ class City: def add_node(self, node: Node) -> None: self.nodes.append(node) - def add_street(self, street: Tuple[int, int]) -> None: - firstFound: bool = False - secondFound: bool = False + def add_street(self, street: Street) -> None: + self.streets.append(street) - for node in self.nodes: - if firstFound and secondFound: - break - if node.id == street.__getitem__(0): - firstFound = True - continue - if node.id == street.__getitem__(1): - secondFound = True - - if not firstFound or not secondFound: - return - - self.streets.append(street) \ No newline at end of file + def render_city(self, game_context: GameContext) -> None: + self._render_streets(game_context) + + def _render_streets(self, game_context: GameContext) -> None: + for street in self.streets: + street.render(game_context) \ No newline at end of file From 4fe38e3afc179a1e2c120038b5abf9f8ad282f5c Mon Sep 17 00:00:00 2001 From: Pawel Felcyn Date: Mon, 3 Apr 2023 19:26:56 +0200 Subject: [PATCH 5/6] render exapmple street --- gameContext.py | 10 ++-------- main.py | 2 +- startup.py | 30 ++++++++++++++++++++++++++++++ street.py | 8 ++++---- 4 files changed, 37 insertions(+), 13 deletions(-) create mode 100644 startup.py diff --git a/gameContext.py b/gameContext.py index 3abfaf9..d749c04 100644 --- a/gameContext.py +++ b/gameContext.py @@ -1,4 +1,4 @@ -from typing import Tuple +from typing import Tuple, List import pygame from PIL import Image @@ -10,6 +10,7 @@ class GameContext: dust_car_pil = None canvas = None _cell_size: int = 30 + city = None def render_in_cell(self, cell: Tuple[int, int], img_path: str): img = Image.open(img_path) @@ -18,11 +19,4 @@ class GameContext: start_y = (cell[1] - 1) * self._cell_size self.canvas.blit(pygame_img, (start_x, start_y)) -def startup(game_context: GameContext): - render_background(game_context) - game_context.canvas.blit(game_context.dust_car_pygame, (game_context.dust_car_position_x, game_context.dust_car_position_y)) -def render_background(game_context: GameContext): - bg_img = Image.open("imgs/background.jpg") - pygame_bg_image = pygame.image.frombuffer(bg_img.tobytes(), bg_img.size, 'RGB') - game_context.canvas.blit(pygame_bg_image, (0, 0)) diff --git a/main.py b/main.py index 644de16..6fd945a 100644 --- a/main.py +++ b/main.py @@ -1,7 +1,7 @@ import pygame from gameEventHandler import handle_game_event from gameContext import GameContext -from gameContext import startup +from startup import startup from PIL import Image pygame.init() diff --git a/startup.py b/startup.py new file mode 100644 index 0000000..a695c33 --- /dev/null +++ b/startup.py @@ -0,0 +1,30 @@ +from gameContext import GameContext +from city import City +from PIL import Image +import pygame +from typing import Tuple, List +from street import Street, StreetType + +def startup(game_context: GameContext): + render_background(game_context) + game_context.city = create_city() + game_context.city.render_city(game_context) + game_context.canvas.blit(game_context.dust_car_pygame, (game_context.dust_car_position_x, game_context.dust_car_position_y)) + +def render_background(game_context: GameContext): + bg_img = Image.open("imgs/background.jpg") + pygame_bg_image = pygame.image.frombuffer(bg_img.tobytes(), bg_img.size, 'RGB') + game_context.canvas.blit(pygame_bg_image, (0, 0)) + +def create_city() -> City: + city: City = City() + streets = create_streets() + for s in streets: + city.add_street(s) + return city + +def create_streets() -> List[Street]: + streets = [] + example_street = Street(1, 10, 2, StreetType.HORIZONTAL) + streets.append(example_street) + return streets \ No newline at end of file diff --git a/street.py b/street.py index 931b189..9287394 100644 --- a/street.py +++ b/street.py @@ -4,7 +4,7 @@ from gameContext import GameContext class StreetType (Enum): VERTICAL = 0 - HORIZONTAL = 0 + HORIZONTAL = 1 class Street: street_type: StreetType @@ -12,14 +12,14 @@ class Street: end_cell: int row_or_column: int - def __init__(self, start_cell: int, end_cell: int, row_or_column: int, street_type: StreetType = StreetType.VERTICAL) -> None: + def __init__(self, start_cell: int, end_cell: int, row_or_column: int, street_type: StreetType) -> None: self.start_cell = start_cell self.end_cell = end_cell self.street_type = street_type self.row_or_column = row_or_column def render(self, game_context: GameContext) -> None: - for i in range(self.start_cell, self.end_cell): + for i in range(self.start_cell, self.end_cell + 1): img_str: str = 'imgs/street_vertical.png' if self.street_type == StreetType.VERTICAL else 'imgs/street_horizontal.png' - cell: Tuple[int, int] = (i, self.row_or_column) if self.street_type == StreetType.VERTICAL else (self.row_or_column, i) + cell: Tuple[int, int] = (self.row_or_column, i) if self.street_type == StreetType.VERTICAL else (i, self.row_or_column) game_context.render_in_cell(cell, img_str) From 693121ac00d4f23125121c13cc25596af24f7a6e Mon Sep 17 00:00:00 2001 From: Pawel Felcyn Date: Mon, 3 Apr 2023 19:51:06 +0200 Subject: [PATCH 6/6] city streets rendering --- startup.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/startup.py b/startup.py index a695c33..64fe804 100644 --- a/startup.py +++ b/startup.py @@ -25,6 +25,14 @@ def create_city() -> City: def create_streets() -> List[Street]: streets = [] - example_street = Street(1, 10, 2, StreetType.HORIZONTAL) - streets.append(example_street) + streets.append(Street(3, 30, 3, StreetType.HORIZONTAL)) + streets.append(Street(4, 15, 10, StreetType.VERTICAL)) + streets.append(Street(4, 10, 25, StreetType.VERTICAL)) + streets.append(Street(11, 24, 10, StreetType.HORIZONTAL)) + streets.append(Street(4, 9, 18, StreetType.VERTICAL)) + streets.append(Street(1, 30, 16, StreetType.HORIZONTAL)) + streets.append(Street(17, 30, 2, StreetType.VERTICAL)) + streets.append(Street(3, 25, 23, StreetType.HORIZONTAL)) + streets.append(Street(17, 30, 13, StreetType.VERTICAL)) + streets.append(Street(17, 23, 25, StreetType.VERTICAL)) return streets \ No newline at end of file