changeset 8:addaa5b857d6

Some level display things.
author Jeremy Thurgood <firxen@gmail.com>
date Sun, 03 Apr 2011 15:46:19 +0200
parents 8000358e47d9
children e53bb0ceee58
files data/levels/level1.json skaapsteker/__main__.py skaapsteker/data.py skaapsteker/level.py
diffstat 4 files changed, 85 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/data/levels/level1.json	Sun Apr 03 15:46:19 2011 +0200
@@ -0,0 +1,8 @@
+{
+    "tileset": "dummy",
+    "tiles": [
+        "..........",
+        "..XX--XX..",
+        ".........."
+    ]
+}
\ No newline at end of file
--- a/skaapsteker/__main__.py	Sun Apr 03 15:40:25 2011 +0200
+++ b/skaapsteker/__main__.py	Sun Apr 03 15:46:19 2011 +0200
@@ -24,6 +24,11 @@
     return opts
 
 
+def draw_level(leveldef, display):
+    import level
+    level.Level(leveldef).draw(display)
+
+
 def main():
     """Launch Nine Tales.
        """
@@ -46,6 +51,9 @@
     #    data.filepath('icons/nine_tales24x24.png')))
     pygame.display.set_caption("Nine Tales")
 
+    draw_level('level1.json', display)
+    pygame.display.flip()
+
     raw_input('?')
 
     #shell = MainShell(display)
--- a/skaapsteker/data.py	Sun Apr 03 15:40:25 2011 +0200
+++ b/skaapsteker/data.py	Sun Apr 03 15:46:19 2011 +0200
@@ -10,14 +10,19 @@
 
 import os
 
+import pygame.image
+
+
 data_py = os.path.abspath(os.path.dirname(__file__))
 data_dir = os.path.normpath(os.path.join(data_py, '..', 'data'))
 
+
 def filepath(filename):
     '''Determine the path to a file in the data directory.
     '''
     return os.path.join(data_dir, filename)
 
+
 def load(filename, mode='rb'):
     '''Open a file in the data directory.
 
@@ -25,3 +30,11 @@
     '''
     return open(os.path.join(data_dir, filename), mode)
 
+
+IMAGES = {}
+
+def load_image(filename):
+    if filename not in IMAGES:
+        IMAGES[filename] = pygame.image.load(load(filename))
+    return IMAGES[filename]
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skaapsteker/level.py	Sun Apr 03 15:46:19 2011 +0200
@@ -0,0 +1,56 @@
+import json
+
+import data
+
+
+TILE_SIZE = (16, 16)
+
+
+class Tile(object):
+    "This is temporary until we have a proper tile class."
+
+    def __init__(self, tilefile):
+        self.image = data.load_image(tilefile)
+
+
+
+class TileSet(object):
+    def __init__(self, dirname):
+        self.dirname = 'tiles/' + dirname
+
+
+    def get_tile(self, tilechar):
+        tilefile = self.dirname + '/' + self.char_to_name(tilechar)
+        return Tile(tilefile)
+
+
+    def char_to_name(self, tilechar):
+        return {
+            '.': 'blank.png',
+            '-': 'floor.png',
+            'X': 'solid.png',
+            }[tilechar]
+
+
+
+class Level(object):
+    def __init__(self, leveldef):
+        self.level_data = json.loads(data.load('levels/' + leveldef).read())
+        self.tileset = TileSet(self.level_data['tileset'])
+        self.build_tiles()
+
+
+    def build_tiles(self):
+        self.tiles = []
+        for row in self.level_data['tiles']:
+            self.tiles.append([self.tileset.get_tile(char) for char in row])
+
+
+    def tile_pos(self, x, y):
+        return (x * TILE_SIZE[0], y * TILE_SIZE[1])
+
+
+    def draw(self, surface):
+        for y, row in enumerate(self.tiles):
+            for x, tile in enumerate(row):
+                surface.blit(tile.image, self.tile_pos(x, y))