From c6f6f7a619b7c87912f523ebc82d7342df8792fd Mon Sep 17 00:00:00 2001 From: raylu Date: Fri, 11 Oct 2013 23:31:30 -0700 Subject: parse tiled output --- level1.tmx | 9 +++++++++ tileset.tsx | 4 ++++ troll | 26 +++++++++++++++++++++----- 3 files changed, 34 insertions(+), 5 deletions(-) create mode 100644 level1.tmx create mode 100644 tileset.tsx diff --git a/level1.tmx b/level1.tmx new file mode 100644 index 0000000..8c236dc --- /dev/null +++ b/level1.tmx @@ -0,0 +1,9 @@ + + + + + + eJztzzkOgDAMBdGw07LTAhJw/xPiIkVKlAAO0jxpOhffiTEmdcrMPzVS69TpzvHGH3FZpNVp052Dh5RSZauVt4QYpck2K28JEfMfuVTcvN2lw3a+tshPLw3aIwAAAAAAAAAAAAAA+MAF4KMDZQ== + + + diff --git a/tileset.tsx b/tileset.tsx new file mode 100644 index 0000000..2cd5445 --- /dev/null +++ b/tileset.tsx @@ -0,0 +1,4 @@ + + + + diff --git a/troll b/troll index e282a09..296b0e5 100755 --- a/troll +++ b/troll @@ -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() -- cgit v1.2.3