summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorraylu <ray.lu@getclever.com>2013-10-11 23:31:30 -0700
committerraylu <ray.lu@getclever.com>2013-10-11 23:31:30 -0700
commitc6f6f7a619b7c87912f523ebc82d7342df8792fd (patch)
tree6cd721b208719258bd8d53b6248cd73cbf0567a7
parentfaf7bc07127beecf97d09293e580ef18c955bfee (diff)
downloadtroll-c6f6f7a619b7c87912f523ebc82d7342df8792fd.tar.xz
parse tiled output
-rw-r--r--level1.tmx9
-rw-r--r--tileset.tsx4
-rwxr-xr-xtroll26
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>
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()