From e51a2aed3a473cb8dc2fbb837f30b1c0deb86e48 Mon Sep 17 00:00:00 2001 From: czorekk Date: Fri, 8 Apr 2022 01:34:11 +0200 Subject: [PATCH 1/3] initial init, moved rendering and generating tiles to /map_new --- main.py | 29 +++++++++++------------- map_new/map_new.py | 22 ++++++++++++++++++ map_new/map_pattern.py | 17 ++++++++++++++ map_new/map_utils.py | 51 ++++++++++++++++++++++++++++++++++++++++++ map_new/tile.py | 16 +++++++++++++ settings.py | 1 + sprites.py | 4 ++-- 7 files changed, 122 insertions(+), 18 deletions(-) create mode 100644 map_new/map_new.py create mode 100644 map_new/map_pattern.py create mode 100644 map_new/map_utils.py create mode 100644 map_new/tile.py diff --git a/main.py b/main.py index ae78fe7..c30caf6 100644 --- a/main.py +++ b/main.py @@ -7,6 +7,8 @@ from map import * # from house import House from sprites import * from settings import * +from map_new import map_new +from map_new import map_utils import math class Game(): @@ -31,9 +33,14 @@ class Game(): self.wall_img = pg.image.load(path.join(img_folder, WALL_IMG)).convert_alpha() self.wall_img = pg.transform.scale(self.wall_img, (TILESIZE, TILESIZE)) + # self.new_map = map_new.getMap() + + def new(self): # initialize all variables and do all the setup for a new game + self.roadTiles, self.wallTiles = map_new.getTiles() + self.all_sprites = pg.sprite.Group() self.walls = pg.sprite.Group() @@ -43,11 +50,9 @@ class Game(): if tile_object.name == 'wall': Obstacle(self, tile_object.x, tile_object.y, tile_object.width, tile_object.height) - # self.screen.blit(self.map_img, (0,0)) self.camera = Camera(self.map.width, self.map.height) self.draw_debug = False - #self.screen.blit(self.map_img, self.camera.apply_rect(self.map_rect)) def run(self): # game loop - set self.playing = False to end the game @@ -74,23 +79,19 @@ class Game(): for y in range(0, HEIGHT, TILESIZE): pg.draw.line(self.screen, LIGHTGREY, (0, y), (WIDTH, y)) - - # def draw(self, drawable_object, pos): - # # pos => (x, y) - # # drawable object must have .image field inside class - # self.screen.blit(drawable_object.image, pos ) - def draw(self): pg.display.set_caption("{:.2f}".format(self.clock.get_fps())) - self.screen.blit(self.map_img, self.camera.apply_rect(self.map_rect)) + # self.screen.blit(self.new_surface, self.camera.apply_rect(self.map_rect)) + map_new.renderTiles(self.roadTiles, self.screen, self.camera) + map_new.renderTiles(self.wallTiles, self.screen, self.camera, self.draw_debug) for sprite in self.all_sprites: self.screen.blit(sprite.image, self.camera.apply(sprite)) if self.draw_debug: pg.draw.rect(self.screen, CYAN, self.camera.apply_rect(sprite.hit_rect), 1) - if self.draw_debug: - for wall in self.walls: - pg.draw.rect(self.screen, CYAN, self.camera.apply_rect(wall.rect), 1) + # if self.draw_debug: + # for wall in self.walls: + # pg.draw.rect(self.screen, CYAN, self.camera.apply_rect(wall.rect), 1) pg.display.flip() @@ -113,10 +114,6 @@ class Game(): def show_go_screen(self): pass - - # def reloadMap(self): - # #self.screen.fill(pygame.Color(self.BACKGROUND_COLOR)) - # self.screen.blit(self.map_img, (0,0)) # def main(): # game = WalleGame() diff --git a/map_new/map_new.py b/map_new/map_new.py new file mode 100644 index 0000000..5b5d796 --- /dev/null +++ b/map_new/map_new.py @@ -0,0 +1,22 @@ +from map_new import map_utils +from map_new import map_pattern +import pygame as pg +from settings import * + +# def getMap(): +# array = map_utils.getBlankMapArray() +# pattern = map_pattern.getPattern() +# surface = map_utils.makeSurfaceMap(array, pattern) +# return surface + +def getTiles(): + array = map_utils.getBlankMapArray() + pattern = map_pattern.getPattern() + tiles = map_utils.getSprites(array, pattern) + return tiles + +def renderTiles(tiles, screen, camera, debug=False): + for tile in tiles: + screen.blit(tile.image, camera.apply_rect(tile.rect)) + if debug: + pg.draw.rect(screen, RED, camera.apply_rect(tile.rect), 1) diff --git a/map_new/map_pattern.py b/map_new/map_pattern.py new file mode 100644 index 0000000..fd38298 --- /dev/null +++ b/map_new/map_pattern.py @@ -0,0 +1,17 @@ +import os +import pygame as pg + +HERE_DIR = os.path.abspath(os.path.dirname(__file__)) +TEXTURES_DIR = HERE_DIR.rpartition(os.sep)[0]+"\\resources\\textures" + +ROAD_DIR = TEXTURES_DIR+"\\road\\" +BUILDING_DIR = TEXTURES_DIR+"\\buliding\\" + +def loadImg(path): + return pg.image.load(path) + +def getPattern(): + return { + 0: loadImg(ROAD_DIR+"GTA2_TILE_257.bmp"), + 1: loadImg(BUILDING_DIR+"GTA2_TILE_187.bmp"), + } \ No newline at end of file diff --git a/map_new/map_utils.py b/map_new/map_utils.py new file mode 100644 index 0000000..fc85fb2 --- /dev/null +++ b/map_new/map_utils.py @@ -0,0 +1,51 @@ +import pygame as pg +from map_new.tile import Tile + +MAP_WIDTH = 5 +MAP_HEIGHT = 5 + +TILE_SIZE_PX = 64 + +# tworzenie pustego arraya o podanych wymiarach +def getBlankMapArray(): + map = [[0 for x in range(0,MAP_WIDTH)] for y in range (0,MAP_HEIGHT)] + + map[0][1] = 1 + map[0][2] = 1 + + return map + +# tworzenie surface poprzed czytanie arraya i wedle niego wypelnianie konkretnymi tile'ami +# def makeSurfaceMap(map, pattern): +# surface = pg.Surface((MAP_WIDTH * TILE_SIZE_PX, MAP_HEIGHT * TILE_SIZE_PX)) + +# for i in range(len(map)): +# offsetY = i * TILE_SIZE_PX +# for j in range(len(map[i])): +# offsetX = j * TILE_SIZE_PX +# surface.blit(pattern[map[i][j]], (offsetX, offsetY)) +# return surface + +# tworzenie grup sprite'ow +def getSprites(map, pattern): + roadTiles = pg.sprite.Group() + wallTiles = pg.sprite.Group() + + for i in range(len(map)): + offsetY = i * TILE_SIZE_PX + for j in range(len(map[i])): + offsetX = j * TILE_SIZE_PX + tileId = map[i][j] + tile = Tile(pattern[tileId], offsetX, offsetY, TILE_SIZE_PX, TILE_SIZE_PX) + if tileId == 0: + roadTiles.add(tile) + else: + wallTiles.add(tile) + return roadTiles, wallTiles + + + + + + + diff --git a/map_new/tile.py b/map_new/tile.py new file mode 100644 index 0000000..a2467f2 --- /dev/null +++ b/map_new/tile.py @@ -0,0 +1,16 @@ +from re import X +import pygame as pg + +class Tile(pg.sprite.Sprite): + def __init__(self, img, x, y, width, height): + super().__init__() + + self.x = x + self.y = y + self.width = width + self.height = height + + self.image = pg.Surface([width, height]) + self.image.blit(img, (0,0)) + + self.rect = pg.Rect(x, y, width, height) diff --git a/settings.py b/settings.py index 3bdeee9..0f7e860 100644 --- a/settings.py +++ b/settings.py @@ -5,6 +5,7 @@ vec = pg.math.Vector2 #colors LIGHTGREY = (100, 100, 100) CYAN = (0, 255, 255) +RED = (255, 0, 0) #game settings diff --git a/sprites.py b/sprites.py index b1ee0bd..8cec298 100644 --- a/sprites.py +++ b/sprites.py @@ -64,9 +64,9 @@ class Player(pg.sprite.Sprite): self.rect.center = self.pos self.pos += self.vel * self.game.dt self.hit_rect.centerx = self.pos.x - collide_with_walls(self, self.game.walls, 'x') + collide_with_walls(self, self.game.wallTiles, 'x') self.hit_rect.centery = self.pos.y - collide_with_walls(self, self.game.walls, 'y') + collide_with_walls(self, self.game.wallTiles, 'y') self.rect.center = self.hit_rect.center class Dump(pg.sprite.Sprite): From 924e7b46ca226b93f6d1eaf7628eec3a8c0df251 Mon Sep 17 00:00:00 2001 From: czorekk Date: Fri, 8 Apr 2022 02:17:02 +0200 Subject: [PATCH 2/3] camera can adjust to map size now, added test map generator --- main.py | 8 +++----- map_new/map_new.py | 8 +------- map_new/map_utils.py | 32 +++++++++++++------------------- settings.py | 10 +++++++++- 4 files changed, 26 insertions(+), 32 deletions(-) diff --git a/main.py b/main.py index c30caf6..42c41e8 100644 --- a/main.py +++ b/main.py @@ -39,6 +39,7 @@ class Game(): def new(self): # initialize all variables and do all the setup for a new game + # sprite groups self.roadTiles, self.wallTiles = map_new.getTiles() self.all_sprites = pg.sprite.Group() @@ -50,7 +51,7 @@ class Game(): if tile_object.name == 'wall': Obstacle(self, tile_object.x, tile_object.y, tile_object.width, tile_object.height) - self.camera = Camera(self.map.width, self.map.height) + self.camera = Camera(MAP_WIDTH_PX, MAP_HEIGHT_PX) self.draw_debug = False @@ -81,7 +82,7 @@ class Game(): def draw(self): pg.display.set_caption("{:.2f}".format(self.clock.get_fps())) - # self.screen.blit(self.new_surface, self.camera.apply_rect(self.map_rect)) + map_new.renderTiles(self.roadTiles, self.screen, self.camera) map_new.renderTiles(self.wallTiles, self.screen, self.camera, self.draw_debug) @@ -89,9 +90,6 @@ class Game(): self.screen.blit(sprite.image, self.camera.apply(sprite)) if self.draw_debug: pg.draw.rect(self.screen, CYAN, self.camera.apply_rect(sprite.hit_rect), 1) - # if self.draw_debug: - # for wall in self.walls: - # pg.draw.rect(self.screen, CYAN, self.camera.apply_rect(wall.rect), 1) pg.display.flip() diff --git a/map_new/map_new.py b/map_new/map_new.py index 5b5d796..f854a17 100644 --- a/map_new/map_new.py +++ b/map_new/map_new.py @@ -3,14 +3,8 @@ from map_new import map_pattern import pygame as pg from settings import * -# def getMap(): -# array = map_utils.getBlankMapArray() -# pattern = map_pattern.getPattern() -# surface = map_utils.makeSurfaceMap(array, pattern) -# return surface - def getTiles(): - array = map_utils.getBlankMapArray() + array = map_utils.generateMap() pattern = map_pattern.getPattern() tiles = map_utils.getSprites(array, pattern) return tiles diff --git a/map_new/map_utils.py b/map_new/map_utils.py index fc85fb2..f5f1a1e 100644 --- a/map_new/map_utils.py +++ b/map_new/map_utils.py @@ -1,36 +1,28 @@ +import random import pygame as pg +from settings import * from map_new.tile import Tile -MAP_WIDTH = 5 -MAP_HEIGHT = 5 - -TILE_SIZE_PX = 64 - # tworzenie pustego arraya o podanych wymiarach def getBlankMapArray(): map = [[0 for x in range(0,MAP_WIDTH)] for y in range (0,MAP_HEIGHT)] - - map[0][1] = 1 - map[0][2] = 1 - return map -# tworzenie surface poprzed czytanie arraya i wedle niego wypelnianie konkretnymi tile'ami -# def makeSurfaceMap(map, pattern): -# surface = pg.Surface((MAP_WIDTH * TILE_SIZE_PX, MAP_HEIGHT * TILE_SIZE_PX)) - -# for i in range(len(map)): -# offsetY = i * TILE_SIZE_PX -# for j in range(len(map[i])): -# offsetX = j * TILE_SIZE_PX -# surface.blit(pattern[map[i][j]], (offsetX, offsetY)) -# return surface +# generowanie obiektow na mapie +def generateMap(): + map = getBlankMapArray() + for i in range(0, 20): + x = random.randint(0, MAP_WIDTH-1) + y = random.randint(0, MAP_HEIGHT-1) + map[y][x] = 1 + return map # tworzenie grup sprite'ow def getSprites(map, pattern): roadTiles = pg.sprite.Group() wallTiles = pg.sprite.Group() + #objechanie tablicy i generowanie tile'a na danych kordach for i in range(len(map)): offsetY = i * TILE_SIZE_PX for j in range(len(map[i])): @@ -41,6 +33,7 @@ def getSprites(map, pattern): roadTiles.add(tile) else: wallTiles.add(tile) + return roadTiles, wallTiles @@ -49,3 +42,4 @@ def getSprites(map, pattern): + diff --git a/settings.py b/settings.py index 0f7e860..e5be6e6 100644 --- a/settings.py +++ b/settings.py @@ -26,4 +26,12 @@ PLAYER_ROT_SPEED = 200 PLAYER_IMG = 'garbagetruck/trashmaster_v2.png' PLAYER_HIT_RECT = pg.Rect(0, 0, 50, 50) PLAYER_WIDTH = 64 -PLAYER_HEIGHT = 32 \ No newline at end of file +PLAYER_HEIGHT = 32 + +#map settings +MAP_WIDTH = 20 +MAP_HEIGHT = 20 + +TILE_SIZE_PX = 64 +MAP_WIDTH_PX = MAP_WIDTH * TILE_SIZE_PX +MAP_HEIGHT_PX = MAP_HEIGHT * TILE_SIZE_PX \ No newline at end of file From d1f4424e09d6b28f249b07a3990554c318bb716f Mon Sep 17 00:00:00 2001 From: Bartosz Wieczorek Date: Fri, 8 Apr 2022 11:08:17 +0200 Subject: [PATCH 3/3] [map_gen_refactor] added extract mapArray to main for bfs --- main.py | 4 ++-- map_new/map_new.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/main.py b/main.py index 42c41e8..1f3ddd2 100644 --- a/main.py +++ b/main.py @@ -39,8 +39,8 @@ class Game(): def new(self): # initialize all variables and do all the setup for a new game - # sprite groups - self.roadTiles, self.wallTiles = map_new.getTiles() + # sprite groups and map array + (self.roadTiles, self.wallTiles), self.mapArray = map_new.getTiles() self.all_sprites = pg.sprite.Group() self.walls = pg.sprite.Group() diff --git a/map_new/map_new.py b/map_new/map_new.py index f854a17..6e0f886 100644 --- a/map_new/map_new.py +++ b/map_new/map_new.py @@ -7,7 +7,7 @@ def getTiles(): array = map_utils.generateMap() pattern = map_pattern.getPattern() tiles = map_utils.getSprites(array, pattern) - return tiles + return tiles, array def renderTiles(tiles, screen, camera, debug=False): for tile in tiles: