diff options
-rw-r--r-- | level1.tmx | 9 | ||||
-rw-r--r-- | tileset.tsx | 4 | ||||
-rwxr-xr-x | troll | 26 |
3 files changed, 34 insertions, 5 deletions
diff --git a/level1.tmx b/level1.tmx new file mode 100644 index 0000000..8c236dc --- /dev/null +++ b/level1.tmx @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<map version="1.0" orientation="orthogonal" width="50" height="50" tilewidth="16" tileheight="16"> + <tileset firstgid="1" source="tileset.tsx"/> + <layer name="Tile Layer 1" width="50" height="50"> + <data encoding="base64" compression="zlib"> + eJztzzkOgDAMBdGw07LTAhJw/xPiIkVKlAAO0jxpOhffiTEmdcrMPzVS69TpzvHGH3FZpNVp052Dh5RSZauVt4QYpck2K28JEfMfuVTcvN2lw3a+tshPLw3aIwAAAAAAAAAAAAAA+MAF4KMDZQ== + </data> + </layer> +</map> diff --git a/tileset.tsx b/tileset.tsx new file mode 100644 index 0000000..2cd5445 --- /dev/null +++ b/tileset.tsx @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8"?> +<tileset name="t1" tilewidth="16" tileheight="16"> + <image source="tileset.png" width="256" height="256"/> +</tileset> @@ -1,8 +1,11 @@ #!/usr/bin/env python -import pygame +from xml.etree import ElementTree +import struct import sys +import pygame + class Tileset(object): tilesize = 16 RIGHT = 0 @@ -23,7 +26,7 @@ class Tileset(object): self.tile_width /= self.tilesize self.tile_height /= self.tilesize - def _render(self, tile_x, tile_y, pos, direction=RIGHT): + def render(self, tile_x, tile_y, pos, direction=RIGHT): tileset = self.tileset[direction] if direction == self.RIGHT: x, y = tile_x, tile_y @@ -38,15 +41,14 @@ class Tileset(object): self.screen.blit(tileset, pos, (x, y, self.tilesize, self.tilesize)) def render_person(self, pos, direction): - self._render(0, 13, pos, direction) + self.render(0, 13, pos, direction) -size = width, height = 640, 480 black = (0, 0, 0) render_x = 0 render_y = 13*16 pygame.init() -screen = pygame.display.set_mode(size) +screen = pygame.display.set_mode((800, 800)) tileset = Tileset(screen) clock = pygame.time.Clock() @@ -66,6 +68,14 @@ def handle_event(event): elif event.type == pygame.QUIT: sys.exit() +def load_level(): # https://bitbucket.org/r1chardj0n3s/pygame-tutorial/src/a383dd24790d/tmx.py#cl-241 + level_data = ElementTree.parse('level1.tmx').getroot() + raw_data = level_data.findall('layer')[0].findall('data')[0].text.strip() + data = raw_data.decode('base64').decode('zlib') + level_array = struct.unpack('<{}i'.format(len(data)/4), data) # read as array of 4-byte ints + return level_array +level_array = load_level() + direction = Tileset.RIGHT while True: clock.tick(60) @@ -87,5 +97,11 @@ while True: direction = Tileset.UP screen.fill(black) + for i, tile in enumerate(level_array): + x, y = divmod(i, 50) + x *= tileset.tilesize + y *= tileset.tilesize + tile_y, tile_x = divmod(tile - 1, tileset.tilesize) # those 1-indexing fuckers + tileset.render(tile_x, tile_y, (y, x)) tileset.render_person((render_x, render_y), direction) pygame.display.flip() |