# HG changeset patch # User Jeremy Thurgood # Date 1301838379 -7200 # Node ID addaa5b857d64570d72faed63b979646f2873ee6 # Parent 8000358e47d9c9834d5a98cee36b10efe0489473 Some level display things. diff -r 8000358e47d9 -r addaa5b857d6 data/levels/level1.json --- /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 diff -r 8000358e47d9 -r addaa5b857d6 skaapsteker/__main__.py --- 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) diff -r 8000358e47d9 -r addaa5b857d6 skaapsteker/data.py --- 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] + diff -r 8000358e47d9 -r addaa5b857d6 skaapsteker/level.py --- /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))