From 3b5181fab5ab025875c41fddd5023975505a8cef Mon Sep 17 00:00:00 2001 From: aliaksei-kudravets Date: Fri, 25 Mar 2022 11:54:32 +0100 Subject: [PATCH 1/3] add map class without conflicts --- mapa.py | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 mapa.py diff --git a/mapa.py b/mapa.py new file mode 100644 index 0000000..ef58fb7 --- /dev/null +++ b/mapa.py @@ -0,0 +1,40 @@ +import pygame as pg +import pytmx + + + +# config +# TILE_SIZE = 16 + +# def preparedMap(screenSize): +# tileImage = pg.image.load('tile1.png') +# surface = pg.Surface(screenSize) + +# for x in range(0, screenSize[0], TILE_SIZE): +# for y in range(0, screenSize[1], TILE_SIZE): +# surface.blit(tileImage, (x, y)) +# return surface + +class TiledMap: + #loading file + def __init__(self, filename): + tm = pytmx.load_pygame(filename, pixelalpha=True) + self.width = tm.width * tm.tilewidth + self.height = tm.height * tm.tileheight + self.tmxdata = tm + + + #rendering map + def render(self, surface): + ti = self.tmxdata.get_tile_image_by_gid + for layer in self.tmxdata.visible_layers: + if isinstance(layer, pytmx.TiledTileLayer): + for x, y, gid, in layer: + tile = ti(gid) + if tile: + surface.blit(tile, (x * self.tmxdata.tilewidth, y * self.tmxdata.tilewidth)) + + def make_map(self): + temp_surface = pg.Surface((self.width, self.height)) + self.render(temp_surface) + return temp_surface \ No newline at end of file -- 2.20.1 From c55a6ebd354f68f16b47bb68866ebf60f4449850 Mon Sep 17 00:00:00 2001 From: Kacper Date: Sun, 3 Apr 2022 15:47:41 +0200 Subject: [PATCH 2/3] Merge branch 'master' of https://git.wmi.amu.edu.pl/s462072/WALL-E --- main.py | 49 +++-- map.py | 70 ++++++- resources/textures/Ground.tsx | 2 + resources/textures/Roads.tsx | 142 +++++++++++++ resources/textures/Trash.tsx | 49 +++++ resources/textures/Walls.tsx | 139 +++++++++++++ resources/textures/map/map1.tmx | 143 +++++++++++++ resources/textures/map/roads.tmx | 335 +++++++++++++++++++++++++++++++ resources/textures/player.tsx | 31 +++ sprites.py | 80 ++++++++ 10 files changed, 1018 insertions(+), 22 deletions(-) create mode 100644 resources/textures/Ground.tsx create mode 100644 resources/textures/Roads.tsx create mode 100644 resources/textures/Trash.tsx create mode 100644 resources/textures/Walls.tsx create mode 100644 resources/textures/map/map1.tmx create mode 100644 resources/textures/map/roads.tmx create mode 100644 resources/textures/player.tsx create mode 100644 sprites.py diff --git a/main.py b/main.py index 8c1daf1..899ca1b 100644 --- a/main.py +++ b/main.py @@ -1,36 +1,60 @@ import pygame -from map import preparedMap +from map import * from agent import trashmaster from house import House +from sprites import * class WalleGame(): def __init__(self): - self.SCREEN_SIZE = [512, 512] - self.BACKGROUND_COLOR = '#ffffff' + self.SCREEN_SIZE = [1024, 768] + #self.BACKGROUND_COLOR = '#ffffff' pygame.init() pygame.display.set_caption('Wall-e') self.screen = pygame.display.set_mode(self.SCREEN_SIZE) - self.screen.fill(pygame.Color(self.BACKGROUND_COLOR)) + # self.screen.fill(pygame.Color(self.BACKGROUND_COLOR)) # krata - self.map = preparedMap(self.SCREEN_SIZE) - self.screen.blit(self.map, (0,0)) - + # self.map = preparedMap(self.SCREEN_SIZE) + # self.screen.blit(self.map, (0,0)) + self.walls = pg.sprite.Group() + self.player_img = pg.image.load("./resources/textures/garbagetruck/trashmaster_blu.png").convert_alpha() + self.all_sprites = pg.sprite.Group() + + + self.map = TiledMap("resources/textures/map/roads.tmx") + self.map_img = self.map.make_map() + self.map_rect = self.map_img.get_rect() + self.screen.blit(self.map_img, (0,0)) + + for tile_object in self.map.tmxdata.objects: + if tile_object.name == 'player': + self.player = Player(self, tile_object.x, tile_object.y) + 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.screen.blit(self.map_img, self.camera.apply_rect(self.map_rect)) + + def update_window(self): pygame.display.update() + # self.camera.update(self.image) def draw_object(self, drawable_object, pos): # pos => (x, y) # drawable object must have .image field inside class self.screen.blit(drawable_object.image, pos ) + def reloadMap(self): - self.screen.fill(pygame.Color(self.BACKGROUND_COLOR)) - self.screen.blit(self.map, (0,0)) + #self.screen.fill(pygame.Color(self.BACKGROUND_COLOR)) + self.screen.blit(self.map_img, (0,0)) def main(): game = WalleGame() @@ -39,9 +63,9 @@ def main(): smieciara_object = trashmaster(16,16,"./resources/textures/garbagetruck/trashmaster_blu.png") game.draw_object(smieciara_object, (0, 0)) - house_object = House(20, 20) + #house_object = House(20, 20) # Test draw house object - game.draw_object(house_object, (20,20)) + #game.draw_object(house_object, (20,20)) game.update_window() @@ -53,8 +77,7 @@ def main(): running = False if event.type == pygame.KEYDOWN: game.reloadMap() - game.draw_object(smieciara_object, - smieciara_object.movement(event.key, 16)) + game.draw_object(smieciara_object, smieciara_object.movement(event.key, 16)) game.update_window() diff --git a/map.py b/map.py index bbede27..645c8b1 100644 --- a/map.py +++ b/map.py @@ -1,13 +1,65 @@ -import pygame +import pygame as pg +import pytmx # config -TILE_SIZE = 16 +# TILE_SIZE = 16 + +# def preparedMap(screenSize): +# tileImage = pg.image.load('tile1.png') +# surface = pg.Surface(screenSize) + +# for x in range(0, screenSize[0], TILE_SIZE): +# for y in range(0, screenSize[1], TILE_SIZE): +# surface.blit(tileImage, (x, y)) +# return surface +def collide_hit_rect(one, two): + return one.hit_rect.colliderect(two.rect) +class TiledMap: + #loading file + def __init__(self, filename): + tm = pytmx.load_pygame(filename, pixelalpha=True) + self.width = tm.width * tm.tilewidth + self.height = tm.height * tm.tileheight + self.tmxdata = tm + + #rendering map + def render(self, surface): + ti = self.tmxdata.get_tile_image_by_gid + for layer in self.tmxdata.visible_layers: + if isinstance(layer, pytmx.TiledTileLayer): + for x, y, gid, in layer: + tile = ti(gid) + if tile: + surface.blit(tile, (x * self.tmxdata.tilewidth, y * self.tmxdata.tilewidth)) + + def make_map(self): + temp_surface = pg.Surface((self.width, self.height)) + self.render(temp_surface) + return temp_surface + +class Camera: + def __init__(self,width,height): + self.camera = pg.Rect(0,0, width, height) + self.width = width + self.height = height + + def apply(self,entity): + return entity.rect.move(self.camera.topleft) + + # def apply_rect(self, rect): + # return rect.move(self.camera.topleft) + + def update(self,target): + x = -target.rect.x + int(1024/2) + y = -target.rect.y + int(768 / 2) + + # limit scrolling to map size + x = min(0, x) # left + y = min(0, y) # top + x = max(-(self.width - 1024), x) # right + y = max(-(self.height - 768), y) # bottom + self.camera = pg.Rect(x, y, self.width, self.height) + + -def preparedMap(screenSize): - tileImage = pygame.image.load('tile1.png') - surface = pygame.Surface(screenSize) - for x in range(0, screenSize[0], TILE_SIZE): - for y in range(0, screenSize[1], TILE_SIZE): - surface.blit(tileImage, (x, y)) - return surface \ No newline at end of file diff --git a/resources/textures/Ground.tsx b/resources/textures/Ground.tsx new file mode 100644 index 0000000..338e07b --- /dev/null +++ b/resources/textures/Ground.tsx @@ -0,0 +1,2 @@ + + diff --git a/resources/textures/Roads.tsx b/resources/textures/Roads.tsx new file mode 100644 index 0000000..9406774 --- /dev/null +++ b/resources/textures/Roads.tsx @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/textures/Trash.tsx b/resources/textures/Trash.tsx new file mode 100644 index 0000000..1d0eead --- /dev/null +++ b/resources/textures/Trash.tsx @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/textures/Walls.tsx b/resources/textures/Walls.tsx new file mode 100644 index 0000000..2fd21ae --- /dev/null +++ b/resources/textures/Walls.tsx @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/textures/map/map1.tmx b/resources/textures/map/map1.tmx new file mode 100644 index 0000000..e0c4ee0 --- /dev/null +++ b/resources/textures/map/map1.tmx @@ -0,0 +1,143 @@ + + + + + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,536870916,1610612829,67,75,1073741900,75,75,75,1073741895,0,3221225543,62,61,3221225528,3221225535,1610612793,61,62,3221225551,0,0,0,0,2684354639,0,0,0,0,0, +0,0,91,2684354626,0,536870987,0,0,0,1610612811,0,1610612811,0,0,1610612799,0,536870975,0,0,0,2684354639,0,0,0,2684354623,0,3221225519,3221225551,0,0, +0,0,90,3758096461,0,536870987,0,0,0,2147483719,1073741900,71,0,0,1610612815,0,1610612799,0,0,0,2684354618,61,62,2684354616,1610612793,0,1610612789,0,0,0, +0,0,3221225543,70,0,2147483719,75,1073741895,0,0,1610612811,0,0,0,0,0,1610612798,0,0,0,2684354623,0,0,2684354617,58,0,2684354607,3221225518,0,0, +0,0,1610612811,0,0,0,0,1610612811,0,0,1610612811,0,3758096442,61,61,1073741887,3221225528,3221225535,1073741885,1073741885,2147483706,58,0,1610612799,0,2684354639,0,1610612791,0,0, +0,0,1610612811,0,536870991,0,0,1610612811,0,0,1610612811,0,1610612800,0,0,0,2684354621,0,0,0,0,2684354622,0,2684354611,3221225524,3221225521,3221225525,1610612787,0,0, +0,0,1610612811,0,1610612814,0,0,2684354636,75,75,536870988,0,1610612804,0,0,0,2684354623,0,2684354639,0,0,3758096445,0,1610612789,0,1610612791,0,2684354612,0,0, +0,0,1610612811,0,1610612803,0,3221225543,536870983,0,0,2684354631,75,1610612809,0,2684354639,0,2684354624,0,2684354633,1610612807,0,1610612815,0,1610612788,0,2684354638,0,2684354613,0,0, +0,0,2684354636,77,76,75,1610612812,0,0,2684354639,0,0,1610612813,0,2684354627,75,71,0,0,2684354635,0,0,0,1610612791,0,1610612815,0,2684354628,0,0, +0,0,3758096459,0,0,0,2684354637,0,0,2684354635,0,0,2684354635,0,2684354635,0,0,0,0,1610612791,0,0,0,2684354638,0,0,0,2684354638,0,0, +0,0,3758096459,0,0,0,3758096460,75,75,3221225545,3221225547,78,1610612809,3221225549,76,3221225518,55,2147483703,3221225523,51,0,3221225519,53,3221225521,53,3221225523,3221225527,3221225518,0,0, +0,0,2147483719,1073741895,0,0,1610612802,0,0,2684354626,0,0,2684354635,0,0,1610612789,0,0,1610612791,0,0,1610612788,0,2684354638,0,1610612789,0,1610612791,0,0, +0,0,0,2684354636,75,75,76,75,75,3221225549,3221225547,3221225547,3221225545,0,0,1610612791,0,79,1610612785,3221225551,0,1610612789,0,1610612815,0,1610612788,0,1610612815,0,0, +0,0,0,1610612811,0,0,0,0,0,0,0,0,1610612811,0,0,1610612790,0,0,1610612791,0,0,1610612791,0,0,0,1610612789,0,0,0,0, +0,0,0,1610612811,0,0,3221225543,3221225547,78,1610612807,0,0,1610612811,0,0,2684354610,3221225521,3221225524,51,3221225527,78,1610612785,54,3221225524,3221225525,1610612785,78,3221225551,0,0, +0,0,0,1610612811,0,0,2684354635,0,0,1610612811,0,0,2684354637,0,0,0,2684354614,0,0,0,0,1610612789,0,0,0,1610612789,0,0,0,0, +0,0,0,1610612811,0,0,2684354635,0,0,2684354635,0,0,1610612811,0,79,3221225537,2684354610,78,3221225551,0,0,1610612815,0,0,0,1610612791,0,0,0,0, +0,0,0,3758096460,3221225547,75,3221225545,64,75,76,3221225548,75,70,0,0,0,2684354638,0,0,0,0,0,0,0,0,1610612813,0,0,0,0, +0,0,0,1610612811,0,0,1610612809,0,0,0,1610612815,0,0,0,3221225544,67,2684354610,3221225548,66,64,3221225548,77,3221225548,75,75,1610612809,3221225551,0,0,0, +0,0,0,1610612811,0,79,76,77,1073741895,0,0,0,0,0,2684354624,0,0,2684354625,0,0,1610612815,0,1610612801,0,0,2684354638,0,0,0,0, +0,0,0,1610612811,0,0,0,0,74,0,3221225543,75,77,3221225545,70,0,0,2684354624,0,0,0,0,1610612815,0,3221225543,76,1610612806,0,0,0, +0,0,0,2684354631,3221225547,3221225548,3221225547,3221225547,1610612812,0,1610612802,0,0,1610612815,0,0,3221225553,85,88,1610612817,0,0,0,0,1610612800,0,2684354628,0,0,0, +0,0,0,0,0,2684354635,0,0,2684354636,77,71,0,0,0,0,0,2684354644,0,0,1610612823,0,0,0,0,2684354625,0,2684354625,0,0,0, +0,0,0,536870991,0,2684354624,0,79,536870992,0,0,3221225553,1073741908,1073741908,3221225557,88,85,1610612817,0,2684354645,84,84,3221225557,88,85,84,1610612821,0,0,0, +0,0,0,3758096462,0,2684354635,0,0,0,0,0,536870996,0,0,536870996,0,0,2684354644,0,2684354646,0,0,2684354644,0,0,0,1610612819,0,0,0, +0,0,0,2147483728,78,76,84,84,84,84,84,81,0,0,1610612815,0,0,2684354641,86,85,87,84,81,0,79,87,82,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, +11,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,11, +11,0,0,0,0,0,0,0,0,0,35,0,0,0,0,0,0,0,0,0,2684354599,35,17,25,0,24,29,33,7,11, +11,7,0,0,23,0,17,14,12,0,13,0,16,13,0,24,0,42,13,25,0,45,22,29,0,44,0,0,7,11, +11,7,0,0,15,0,45,37,17,0,0,0,24,12,0,45,0,44,24,14,0,0,0,0,0,37,0,23,7,11, +11,7,0,0,13,0,0,0,41,25,0,20,16,41,22,35,0,29,37,21,0,17,42,0,0,25,0,0,7,11, +11,7,0,26,27,28,29,0,21,43,0,29,0,0,0,0,0,0,0,0,0,0,43,0,536870952,0,2684354599,0,7,11, +11,7,0,14,0,24,21,0,15,33,0,21,0,43,21,33,0,45,30,31,16,0,12,0,0,0,0,0,7,11, +11,7,0,42,0,22,20,0,0,0,0,44,0,20,40,16,0,43,0,33,13,0,45,0,17,0,43,0,7,11, +11,7,0,25,0,13,0,0,15,24,0,0,0,41,0,29,0,15,0,0,44,0,37,0,21,0,24,0,7,11, +11,7,0,0,0,0,0,33,29,0,17,12,0,21,0,0,0,17,43,0,13,29,41,0,24,0,13,0,7,11, +11,7,0,15,18,45,0,13,41,0,24,16,0,23,0,13,41,22,16,0,20,32,17,0,29,25,35,0,7,11, +11,7,0,25,35,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,0,0,0,0,0,0,0,7,11, +11,7,0,0,34,19,0,44,15,0,2684354596,2684354596,0,18,24,0,17,35,0,41,25,0,41,0,13,0,44,0,7,11, +11,7,24,0,0,0,0,0,0,0,0,0,0,42,20,0,16,0,0,0,24,0,21,0,18,0,25,0,7,9, +11,7,22,0,33,13,16,43,21,20,29,15,0,41,24,0,29,13,0,16,43,0,18,24,42,0,42,23,7,9, +11,7,21,0,21,20,0,0,0,0,41,44,0,42,15,0,0,0,0,0,0,0,0,0,0,0,0,0,7,9, +11,7,24,0,41,24,0,3221225510,1610612774,0,24,21,0,13,40,20,0,17,32,15,44,0,26,27,28,0,18,25,7,11, +11,7,18,0,44,12,0,2684354598,38,0,17,22,0,41,0,0,0,0,0,24,20,0,21,35,33,0,12,24,7,11, +11,7,13,0,0,0,0,0,0,0,0,0,0,12,15,21,0,13,35,18,41,37,43,39,15,0,22,18,7,11, +11,7,15,0,43,15,0,33,17,41,0,29,18,33,0,0,0,0,0,0,0,0,0,0,0,0,0,24,7,11, +11,7,13,0,25,0,0,0,0,39,21,42,44,14,0,18,45,0,13,14,0,29,0,42,13,0,25,35,7,11, +11,7,24,0,14,18,23,24,0,13,0,0,0,0,0,21,42,0,41,15,2684354599,21,0,15,0,0,0,24,7,11, +11,7,18,0,0,0,0,0,0,3221225508,0,21,15,0,41,29,0,0,0,0,43,14,18,42,0,14,0,18,7,11, +11,7,14,40,43,0,43,14,0,0,0,29,17,18,22,24,0,17,23,0,13,30,31,25,0,33,0,32,7,11, +11,7,14,0,44,0,12,0,0,24,14,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,0,15,7,11, +11,7,25,0,29,0,14,13,25,14,43,0,15,13,0,44,33,0,25,0,13,44,0,43,15,44,0,42,7,11, +11,7,23,0,0,0,0,0,0,0,0,0,32,45,0,35,25,0,0,0,0,0,0,32,0,0,0,18,7,11, +11,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,11, +11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,536871021,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,3221225579,0,0,0,0,0,0,0,0,106,0,0,0,3221225579,0,0,0,0,3221225579,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,1610612836,0,0,0,0,0,0,1610612836,0,0,0,3221225579,0,0,0,2684354662,0,0,3221225579,0,0, +0,0,0,0,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,1610612836,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,107,0,0,0,107,0,0, +0,0,0,0,0,0,0,3221225579,0,0,0,0,0,0,3221225570,0,0,0,106,0,0,0,0,0,0,105,0,0,0,0, +0,0,0,0,101,0,0,0,0,0,107,0,2684354662,0,0,0,0,0,0,0,0,0,0,0,0,0,2684354662,0,0,0, +0,0,2684354658,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,105,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,101,0,0,0,0,0,0,3221225579,0,0,0,0,0,0,0,0,0,0,0,0,3221225579,0,0, +0,0,0,0,0,0,0,0,0,102,0,0,0,0,0,0,0,0,0,3758096482,0,0,0,0,0,105,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,101,0,101,0,0,106,0,0,101,0,536871010,0,105,0,0,0,3221225579,0,0, +0,0,101,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,105,0,105,0,106,0,0,0,536871013,0,0,0,1610612834,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,105,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,106,0,105,0,0,0,0,0,0,2684354658,0,0,0,0,0,0,0,0,1073741922,0,0,536871013,0,0, +0,0,0,105,0,0,0,0,0,0,0,0,107,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,2684354665,0,0,0,102,0,0,2684354665,0,0,0,107,0,0,0,0, +0,0,0,0,0,0,0,98,0,0,0,105,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,105,0,0,0,0,0,0,0,0,0,0,0,107,0,0,0,0,0,0,0,0,2147483746,0,106,0,0,0, +0,0,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2684354658,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,98,0,0,0,0,1610612834,0,0,0,0,2684354665,0,0,0,105,0,0,0, +0,0,0,0,0,105,0,0,0,0,0,0,0,101,0,0,0,0,3221225579,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,107,0,0,0,3221225574,0,0,0,0,0,536871013,0,107,0,0,0,0,0,3221225570,0,0,0,0,536871013,0,0,0, +0,0,0,0,0,1610612834,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2684354658,0,0,0, +0,0,0,0,105,0,0,0,101,0,3221225570,0,0,0,101,0,0,536871013,0,0,101,0,107,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + diff --git a/resources/textures/map/roads.tmx b/resources/textures/map/roads.tmx new file mode 100644 index 0000000..caf8d95 --- /dev/null +++ b/resources/textures/map/roads.tmx @@ -0,0 +1,335 @@ + + + + + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,536870916,1610612829,78,78,78,78,78,78,78,0,78,78,78,78,78,78,78,78,3221225551,0,0,0,0,2684354639,0,0,0,0,0, +0,0,91,50,0,50,0,0,0,50,0,50,0,0,50,0,50,0,0,0,2684354639,0,0,0,50,0,78,3221225551,0,0, +0,0,90,50,0,50,0,0,0,50,50,50,0,0,1610612815,0,50,0,0,0,78,78,78,78,78,0,50,0,0,0, +0,0,50,50,0,78,78,78,0,0,50,0,0,0,0,0,50,0,0,0,50,0,0,78,78,0,78,78,0,0, +0,0,50,0,0,0,0,50,0,0,50,0,78,78,78,78,78,78,78,78,78,78,0,50,0,2684354639,0,50,0,0, +0,0,50,0,536870991,0,0,50,0,0,50,0,50,0,0,0,50,0,0,0,0,50,0,78,78,78,78,78,0,0, +0,0,50,0,50,0,0,78,78,78,78,0,50,0,0,0,50,0,2684354639,0,0,50,0,50,0,50,0,50,0,0, +0,0,50,0,50,0,78,78,0,0,50,50,50,0,2684354639,0,50,0,50,50,0,1610612815,0,50,0,2684354638,0,50,0,0, +0,0,78,78,78,78,78,0,0,2684354639,0,0,50,0,50,50,50,0,0,50,0,0,0,50,0,1610612815,0,50,0,0, +0,0,50,0,0,0,50,0,0,50,0,0,50,0,50,0,0,0,0,50,0,0,0,2684354638,0,0,0,2684354638,0,0, +0,0,50,0,0,0,78,78,78,78,78,78,78,78,78,78,78,78,78,78,0,78,78,78,78,78,78,78,0,0, +0,0,78,78,0,0,50,0,0,50,0,0,50,0,0,50,0,0,50,0,0,50,0,2684354638,0,50,0,50,0,0, +0,0,0,78,78,78,78,78,78,78,78,78,78,0,0,50,0,79,50,3221225551,0,50,0,1610612815,0,50,0,1610612815,0,0, +0,0,0,50,0,0,0,0,0,0,0,0,50,0,0,1610612790,0,0,50,0,0,50,0,0,0,50,0,0,0,0, +0,0,0,50,0,0,50,50,50,50,0,0,50,0,0,78,78,78,78,78,78,78,78,78,78,78,78,3221225551,0,0, +0,0,0,50,0,0,50,0,0,50,0,0,50,0,0,0,50,0,0,0,0,50,0,0,0,50,0,0,0,0, +0,0,0,50,0,0,50,0,0,50,0,0,50,0,79,50,2684354610,78,3221225551,0,0,1610612815,0,0,0,50,0,0,0,0, +0,0,0,78,78,78,78,78,78,78,78,78,78,0,0,0,2684354638,0,0,0,0,0,0,0,0,50,0,0,0,0, +0,0,0,50,0,0,50,0,0,0,1610612815,0,0,0,78,78,78,78,78,78,78,78,78,78,78,78,3221225551,0,0,0, +0,0,0,50,0,79,78,78,78,0,0,0,0,0,50,0,0,50,0,0,1610612815,0,50,0,0,50,0,0,0,0, +0,0,0,50,0,0,0,0,50,0,78,78,78,78,78,0,0,50,0,0,0,0,1610612815,0,78,78,78,0,0,0, +0,0,0,78,78,78,78,78,78,0,50,0,0,1610612815,0,0,50,50,50,50,0,0,0,0,50,0,50,0,0,0, +0,0,0,0,0,50,0,0,50,50,50,0,0,0,0,0,50,0,0,50,0,0,0,0,50,0,50,0,0,0, +0,0,0,536870991,0,50,0,79,50,0,0,78,78,78,78,78,78,78,0,78,78,78,78,78,78,78,78,0,0,0, +0,0,0,50,0,50,0,0,0,0,0,50,0,0,50,0,0,50,0,50,0,0,50,0,0,0,50,0,0,0, +0,0,0,2147483728,78,78,78,78,78,78,78,78,0,0,1610612815,0,0,78,78,78,78,78,78,0,79,78,78,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, +11,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,11, +11,0,0,0,0,0,0,0,0,0,35,0,0,0,0,0,0,0,0,0,2684354599,35,17,25,0,24,29,33,7,11, +11,7,0,0,23,0,17,14,12,0,13,0,16,13,0,24,0,42,13,25,0,45,22,29,0,44,0,0,7,11, +11,7,0,0,15,0,45,37,17,0,0,0,24,12,0,45,0,44,24,14,0,0,0,0,0,37,0,23,7,11, +11,7,0,0,13,0,0,0,41,25,0,20,16,41,22,35,0,29,37,21,0,17,42,0,0,25,0,0,7,11, +11,7,0,26,27,28,29,0,21,43,0,29,0,0,0,0,0,0,0,0,0,0,43,0,536870952,0,2684354599,0,7,11, +11,7,0,14,0,24,21,0,15,33,0,21,0,43,21,33,0,45,30,31,16,0,12,0,0,0,0,0,7,11, +11,7,0,42,0,22,20,0,0,0,0,44,0,20,40,16,0,43,0,33,13,0,45,0,17,0,43,0,7,11, +11,7,0,25,0,13,0,0,15,24,0,0,0,41,0,29,0,15,0,0,44,0,37,0,21,0,24,0,7,11, +11,7,0,0,0,0,0,33,29,0,17,12,0,21,0,0,0,17,43,0,13,29,41,0,24,0,13,0,7,11, +11,7,0,15,18,45,0,13,41,0,24,16,0,23,0,13,41,22,16,0,20,32,17,0,29,25,35,0,7,11, +11,7,0,25,35,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,0,0,0,0,0,0,0,7,11, +11,7,0,0,34,19,0,44,15,0,2684354596,2684354596,0,18,24,0,17,35,0,41,25,0,41,0,13,0,44,0,7,11, +11,7,24,0,0,0,0,0,0,0,0,0,0,42,20,0,16,0,0,0,24,0,21,0,18,0,25,0,7,9, +11,7,22,0,33,13,16,43,21,20,29,15,0,41,24,0,29,13,0,16,43,0,18,24,42,0,42,23,7,9, +11,7,21,0,21,20,0,0,0,0,41,44,0,42,15,0,0,0,0,0,0,0,0,0,0,0,0,0,7,9, +11,7,24,0,41,24,0,3221225510,1610612774,0,24,21,0,13,40,20,0,17,32,15,44,0,26,27,28,0,18,25,7,11, +11,7,18,0,44,12,0,2684354598,38,0,17,22,0,41,0,0,0,0,0,24,20,0,21,35,33,0,12,24,7,11, +11,7,13,0,0,0,0,0,0,0,0,0,0,12,15,21,0,13,35,18,41,37,43,39,15,0,22,18,7,11, +11,7,15,0,43,15,0,33,17,41,0,29,18,33,0,0,0,0,0,0,0,0,0,0,0,0,0,24,7,11, +11,7,13,0,25,0,0,0,0,39,21,42,44,14,0,18,45,0,13,14,0,29,0,42,13,0,25,35,7,11, +11,7,24,0,14,18,23,24,0,13,0,0,0,0,0,21,42,0,41,15,2684354599,21,0,15,0,0,0,24,7,11, +11,7,18,0,0,0,0,0,0,3221225508,0,21,15,0,41,29,0,0,0,0,43,14,18,42,0,14,0,18,7,11, +11,7,14,40,43,0,43,14,0,0,0,29,17,18,22,24,0,17,23,0,13,30,31,25,0,33,0,32,7,11, +11,7,14,0,44,0,12,0,0,24,14,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,0,15,7,11, +11,7,25,0,29,0,14,13,25,14,43,0,15,13,0,44,33,0,25,0,13,44,0,43,15,44,0,42,7,11, +11,7,23,0,0,0,0,0,0,0,0,0,32,45,0,35,25,0,0,0,0,0,0,32,0,0,0,18,7,11, +11,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,11, +11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,536871021,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,3221225579,0,0,0,0,0,0,0,0,106,0,0,0,3221225579,0,0,0,0,3221225579,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,1610612836,0,0,0,0,0,0,1610612836,0,0,0,3221225579,0,0,0,2684354662,0,0,3221225579,0,0, +0,0,0,0,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,1610612836,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,107,0,0,0,107,0,0, +0,0,0,0,0,0,0,3221225579,0,0,0,0,0,0,3221225570,0,0,0,106,0,0,0,0,0,0,105,0,0,0,0, +0,0,0,0,101,0,0,0,0,0,107,0,2684354662,0,0,0,0,0,0,0,0,0,0,0,0,0,2684354662,0,0,0, +0,0,2684354658,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,105,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,101,0,0,0,0,0,0,3221225579,0,0,0,0,0,0,0,0,0,0,0,0,3221225579,0,0, +0,0,0,0,0,0,0,0,0,102,0,0,0,0,0,0,0,0,0,3758096482,0,0,0,0,0,105,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,101,0,101,0,0,106,0,0,101,0,536871010,0,105,0,0,0,3221225579,0,0, +0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,105,0,105,0,106,0,0,0,536871013,0,0,0,1610612834,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,105,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,106,0,105,0,0,0,0,0,0,2684354658,0,0,0,0,0,0,0,0,1073741922,0,0,536871013,0,0, +0,0,0,105,0,0,0,0,0,0,0,0,107,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,2684354665,0,0,0,102,0,0,2684354665,0,0,0,107,0,0,0,0, +0,0,0,0,0,0,0,98,0,0,0,105,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,105,0,0,0,0,0,0,0,0,0,0,0,107,0,0,0,0,0,0,0,0,2147483746,0,106,0,0,0, +0,0,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2684354658,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,98,0,0,0,0,1610612834,0,0,0,0,2684354665,0,0,0,105,0,0,0, +0,0,0,0,0,105,0,0,0,0,0,0,0,101,0,0,0,0,3221225579,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,107,0,0,0,3221225574,0,0,0,0,0,536871013,0,107,0,0,0,0,0,3221225570,0,0,0,0,536871013,0,0,0, +0,0,0,0,0,1610612834,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2684354658,0,0,0, +0,0,0,0,105,0,0,0,101,0,3221225570,0,0,0,101,0,0,536871013,0,0,101,0,107,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/textures/player.tsx b/resources/textures/player.tsx new file mode 100644 index 0000000..80f5d22 --- /dev/null +++ b/resources/textures/player.tsx @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sprites.py b/sprites.py new file mode 100644 index 0000000..0c439e1 --- /dev/null +++ b/sprites.py @@ -0,0 +1,80 @@ +import pygame as pg +from random import uniform +from map import collide_hit_rect + +vec = pg.math.Vector2 + + +def collide_with_walls(sprite, group, dir): + if dir == 'x': + hits = pg.sprite.spritecollide(sprite, group, False, collide_hit_rect) + if hits: + if hits[0].rect.centerx > sprite.hit_rect.centerx: + sprite.pos.x = hits[0].rect.left - sprite.hit_rect.width / 2 + if hits[0].rect.centerx < sprite.hit_rect.centerx: + sprite.pos.x = hits[0].rect.right + sprite.hit_rect.width / 2 + sprite.vel.x = 0 + sprite.hit_rect.centerx = sprite.pos.x + if dir == 'y': + hits = pg.sprite.spritecollide(sprite, group, False, collide_hit_rect) + if hits: + if hits[0].rect.centery > sprite.hit_rect.centery: + sprite.pos.y = hits[0].rect.top - sprite.hit_rect.height / 2 + if hits[0].rect.centery < sprite.hit_rect.centery: + sprite.pos.y = hits[0].rect.bottom + sprite.hit_rect.height / 2 + sprite.vel.y = 0 + sprite.hit_rect.centery = sprite.pos.y + +class Player(pg.sprite.Sprite): + def __init__(self, game, x, y): + self.groups = game.all_sprites + pg.sprite.Sprite.__init__(self, self.groups) + self.game = game + self.image = game.player_img + self.rect = self.image.get_rect() + # self.hit_rect = PLAYER_HIT_RECT + # self.hit_rect.center = self.rect.center + self.vel = vec(0, 0) + self.pos = vec(x, y) + self.rot = 0 + + + def get_keys(self): + self.rot_speed = 0 + self.vel = vec(0, 0) + keys = pg.key.get_pressed() + if keys[pg.K_LEFT] or keys[pg.K_a]: + self.rot_speed = PLAYER_ROT_SPEED + if keys[pg.K_RIGHT] or keys[pg.K_d]: + self.rot_speed = -PLAYER_ROT_SPEED + if keys[pg.K_UP] or keys[pg.K_w]: + self.vel = vec(PLAYER_SPEED, 0).rotate(-self.rot) + if keys[pg.K_DOWN] or keys[pg.K_s]: + self.vel = vec(-PLAYER_SPEED / 2, 0).rotate(-self.rot) + + + def update(self): + self.get_keys() + self.rot = (self.rot + self.rot_speed * self.game.dt) % 360 + self.image = pg.transform.rotate(self.game.player_img, self.rot) + self.rect = self.image.get_rect() + 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') + self.hit_rect.centery = self.pos.y + collide_with_walls(self, self.game.walls, 'y') + self.rect.center = self.hit_rect.center + + +class Obstacle(pg.sprite.Sprite): + def __init__(self, game, x, y, w, h): + self.groups = game.walls + pg.sprite.Sprite.__init__(self, self.groups) + self.game = game + self.rect = pg.Rect(x, y, w, h) + self.hit_rect = self.rect + self.x = x + self.y = y + self.rect.x = x + self.rect.y = y \ No newline at end of file -- 2.20.1 From c121b586cd329db6d17698f0fe782a7bb502872c Mon Sep 17 00:00:00 2001 From: Kacper Date: Mon, 4 Apr 2022 11:40:18 +0200 Subject: [PATCH 3/3] camera, mapa, textures, BIG refactor --- main.py | 189 ++++++++++++------ map.py | 14 +- .../textures/garbagetruck/trashmaster_v2.png | Bin 0 -> 84128 bytes resources/textures/map/roads.tmx | 2 +- settings.py | 28 +++ sprites.py | 91 ++++++++- 6 files changed, 250 insertions(+), 74 deletions(-) create mode 100644 resources/textures/garbagetruck/trashmaster_v2.png create mode 100644 settings.py diff --git a/main.py b/main.py index 899ca1b..4dbbb4c 100644 --- a/main.py +++ b/main.py @@ -1,34 +1,39 @@ -import pygame +import pygame as pg +import sys +from os import path from map import * -from agent import trashmaster -from house import House +# from agent import trashmaster +# from house import House from sprites import * +from settings import * -class WalleGame(): +class Game(): def __init__(self): - self.SCREEN_SIZE = [1024, 768] - #self.BACKGROUND_COLOR = '#ffffff' - - pygame.init() - pygame.display.set_caption('Wall-e') - - - self.screen = pygame.display.set_mode(self.SCREEN_SIZE) - # self.screen.fill(pygame.Color(self.BACKGROUND_COLOR)) - - # krata - # self.map = preparedMap(self.SCREEN_SIZE) - # self.screen.blit(self.map, (0,0)) - self.walls = pg.sprite.Group() - self.player_img = pg.image.load("./resources/textures/garbagetruck/trashmaster_blu.png").convert_alpha() - self.all_sprites = pg.sprite.Group() - - - self.map = TiledMap("resources/textures/map/roads.tmx") + pg.init() + self.screen = pg.display.set_mode((WIDTH, HEIGHT)) + pg.display.set_caption("Trashmaster") + self.clock = pg.time.Clock() + self.load_data() + + def load_data(self): + game_folder = path.dirname(__file__) + img_folder = path.join(game_folder, 'resources/textures') + map_folder = path.join(img_folder, 'map') + self.map = TiledMap(path.join(map_folder, 'roads.tmx')) self.map_img = self.map.make_map() self.map_rect = self.map_img.get_rect() - self.screen.blit(self.map_img, (0,0)) + + self.player_img = pg.image.load(path.join(img_folder,PLAYER_IMG)).convert_alpha() + self.player_img = pg.transform.scale(self.player_img, (PLAYER_WIDTH,PLAYER_HEIGHT) ) + 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)) + + def new(self): + # initialize all variables and do all the setup for a new game + + self.all_sprites = pg.sprite.Group() + self.walls = pg.sprite.Group() for tile_object in self.map.tmxdata.objects: if tile_object.name == 'player': @@ -36,54 +41,112 @@ class WalleGame(): 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.screen.blit(self.map_img, self.camera.apply_rect(self.map_rect)) - - - def update_window(self): - pygame.display.update() - # self.camera.update(self.image) - - def draw_object(self, drawable_object, pos): - # pos => (x, y) - # drawable object must have .image field inside class - self.screen.blit(drawable_object.image, pos ) + # 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 reloadMap(self): - #self.screen.fill(pygame.Color(self.BACKGROUND_COLOR)) - self.screen.blit(self.map_img, (0,0)) + def run(self): + # game loop - set self.playing = False to end the game + self.playing = True + while self.playing: + self.dt = self.clock.tick(FPS) / 1000.0 + self.events() + self.update() + self.draw() + + def quit(self): + pg.quit() + sys.exit() + + def update(self): + # update portion of the game loop + self.all_sprites.update() + self.camera.update(self.player) + # pygame.display.update() + + def draw_grid(self): + for x in range(0, WIDTH, TILESIZE): + pg.draw.line(self.screen, LIGHTGREY, (x, 0), (x, HEIGHT)) + 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)) -def main(): - game = WalleGame() - game.update_window() + 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) + + pg.display.flip() + + def events(self): + for event in pg.event.get(): + if event.type == pg.QUIT: + self.quit() + if event.type == pg.KEYDOWN: + if event.key == pg.K_ESCAPE: + self.quit() + if event.key == pg.K_h: + self.draw_debug = not self.draw_debug + + def show_start_screen(self): + pass + + 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() +# game.update_window() - smieciara_object = trashmaster(16,16,"./resources/textures/garbagetruck/trashmaster_blu.png") - game.draw_object(smieciara_object, (0, 0)) +# smieciara_object = trashmaster(16,16,"./resources/textures/garbagetruck/trashmaster_blu.png") +# game.draw_object(smieciara_object, (100, 100)) - #house_object = House(20, 20) - # Test draw house object - #game.draw_object(house_object, (20,20)) +# #house_object = House(20, 20) +# # Test draw house object +# #game.draw_object(house_object, (20,20)) - game.update_window() +# game.update_window() - running = True +# running = True - while running: - for event in pygame.event.get(): - if event.type == pygame.QUIT: - running = False - if event.type == pygame.KEYDOWN: - game.reloadMap() - game.draw_object(smieciara_object, smieciara_object.movement(event.key, 16)) +# while running: +# for event in pygame.event.get(): +# if event.type == pygame.QUIT: +# running = False +# if event.type == pygame.KEYDOWN: +# game.reloadMap() +# game.draw_object(smieciara_object, smieciara_object.movement(event.key, 16)) - game.update_window() +# game.update_window() - pygame.quit() - +# pygame.quit() +# if __name__ == '__main__': +# main() -if __name__ == '__main__': - main() \ No newline at end of file +# create the game object +g = Game() +g.show_start_screen() +while True: + g.new() + g.run() + g.show_go_screen() + diff --git a/map.py b/map.py index 645c8b1..df387cd 100644 --- a/map.py +++ b/map.py @@ -1,4 +1,5 @@ import pygame as pg +from settings import * import pytmx # config @@ -12,6 +13,7 @@ import pytmx # for y in range(0, screenSize[1], TILE_SIZE): # surface.blit(tileImage, (x, y)) # return surface + def collide_hit_rect(one, two): return one.hit_rect.colliderect(two.rect) class TiledMap: @@ -46,18 +48,18 @@ class Camera: def apply(self,entity): return entity.rect.move(self.camera.topleft) - # def apply_rect(self, rect): - # return rect.move(self.camera.topleft) + def apply_rect(self, rect): + return rect.move(self.camera.topleft) def update(self,target): - x = -target.rect.x + int(1024/2) - y = -target.rect.y + int(768 / 2) + x = -target.rect.x + int(WIDTH/2) + y = -target.rect.y + int(HEIGHT / 2) # limit scrolling to map size x = min(0, x) # left y = min(0, y) # top - x = max(-(self.width - 1024), x) # right - y = max(-(self.height - 768), y) # bottom + x = max(-(self.width - WIDTH), x) # right + y = max(-(self.height - HEIGHT), y) # bottom self.camera = pg.Rect(x, y, self.width, self.height) diff --git a/resources/textures/garbagetruck/trashmaster_v2.png b/resources/textures/garbagetruck/trashmaster_v2.png new file mode 100644 index 0000000000000000000000000000000000000000..8b8e14692212a86f698f73444721d242bd330970 GIT binary patch literal 84128 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

-|($jYuOuB{Adn<1V1+WcM?Wo53dik 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 b^?Cn0e#W;S-m01G00000NkvXXu0mjfpWR8? literal 0 HcmV?d00001 diff --git a/resources/textures/map/roads.tmx b/resources/textures/map/roads.tmx index caf8d95..2e3a2fe 100644 --- a/resources/textures/map/roads.tmx +++ b/resources/textures/map/roads.tmx @@ -72,7 +72,7 @@ 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 - + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, diff --git a/settings.py b/settings.py new file mode 100644 index 0000000..3bdeee9 --- /dev/null +++ b/settings.py @@ -0,0 +1,28 @@ +import pygame as pg + +vec = pg.math.Vector2 + +#colors +LIGHTGREY = (100, 100, 100) +CYAN = (0, 255, 255) + + +#game settings +WIDTH = 1024 +HEIGHT = 768 +FPS = 60 + +TILESIZE = 64 +GRIDWIDTH = WIDTH/TILESIZE +GRIDHEIGHT = HEIGHT/TILESIZE + + +WALL_IMG = 'buliding\GTA2_TILE_26.bmp' + +#player settings +PLAYER_SPEED = 280 +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 diff --git a/sprites.py b/sprites.py index 0c439e1..b1ee0bd 100644 --- a/sprites.py +++ b/sprites.py @@ -1,4 +1,6 @@ import pygame as pg +import pygame.image +from settings import * from random import uniform from map import collide_hit_rect @@ -32,12 +34,13 @@ class Player(pg.sprite.Sprite): self.game = game self.image = game.player_img self.rect = self.image.get_rect() - # self.hit_rect = PLAYER_HIT_RECT - # self.hit_rect.center = self.rect.center + self.rect.center = (x,y) + self.hit_rect = PLAYER_HIT_RECT + self.hit_rect.center = self.rect.center self.vel = vec(0, 0) self.pos = vec(x, y) self.rot = 0 - + def get_keys(self): self.rot_speed = 0 @@ -66,6 +69,86 @@ class Player(pg.sprite.Sprite): collide_with_walls(self, self.game.walls, 'y') self.rect.center = self.hit_rect.center +class Dump(pg.sprite.Sprite): + # wysypisko + def __init__(self): + super().__init__() + self.glass = [] + self.paper = [] + self.bio = [] + self.other_trash = [] +class trash(pg.sprite.Sprite): + + def __init__(self,x,y,img, type): + super().__init__() + + self.width=16 + self.height=16 + + self.type = type + + self.x = x + self.y = y + + self.image = pygame.image.load(img) + self.image = pygame.transform.scale(self.image, (self.x,self.y)) + self.rect = self.image.get_rect() +class trashbin(pg.sprite.Sprite): + + def __init__(self,x,y,img, type): + super().__init__() + + # trashbin type + self.type = type + + # dimensions + if type == "small": + self.width = 4 + self.height = 4 + elif type == "medium": + self.width = 8 + self.height = 8 + elif type == "large": + self.width = 16 + self.height = 16 + + # spawn coords + self.x = x + self.y = y + + # load trashbin image + self.image = pygame.image.load(img) + self.image = pygame.transform.scale(self.image, (self.x,self.y)) + self.rect = self.image.get_rect() + +class trashmaster(pg.sprite.Sprite): + + def __init__(self,x,y,img): + super().__init__() + + self.width=x + self.height=y + + self.x = 0 + self.y = 0 + + self.image = pygame.image.load(img) + self.image = pygame.transform.scale(self.image, (self.width,self.height)) + self.rect = self.image.get_rect() + + def movement(self, key, vel): + if key == pygame.K_LEFT: + self.x -= vel + + if key == pygame.K_RIGHT: + self.x += vel + + if key == pygame.K_UP: + self.y -= vel + + if key == pygame.K_DOWN: + self.y += vel + return (self.x, self.y) class Obstacle(pg.sprite.Sprite): def __init__(self, game, x, y, w, h): @@ -77,4 +160,4 @@ class Obstacle(pg.sprite.Sprite): self.x = x self.y = y self.rect.x = x - self.rect.y = y \ No newline at end of file + self.rect.y = y -- 2.20.1