Mercurial > skaapsteker
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))