comparison mamba/level.py @ 162:7fbbe27120a9

Rodents! Amphibians! Import juggling!
author Jeremy Thurgood <firxen@gmail.com>
date Tue, 13 Sep 2011 23:24:20 +0200
parents 5bade7867d04
children 41e8d4ce3af2
comparison
equal deleted inserted replaced
161:40d2d913bcde 162:7fbbe27120a9
4 4
5 from pygame.surface import Surface 5 from pygame.surface import Surface
6 from pygame.sprite import RenderUpdates 6 from pygame.sprite import RenderUpdates
7 7
8 from mamba.data import load_file 8 from mamba.data import load_file
9 from mamba.sprites import (tile_sizify, TileSprite, BaseSprite, DoorSprite, 9 from mamba import sprites
10 EntrySprite, ExitSprite, PuddleSprite)
11 from mamba.snake import Snake 10 from mamba.snake import Snake
12 11
13 12
14 class InvalidMapError(Exception): 13 class InvalidMapError(Exception):
15 pass 14 pass
19 return (cls, kw) 18 return (cls, kw)
20 19
21 20
22 TILE_MAP = { 21 TILE_MAP = {
23 '.': None, 22 '.': None,
24 'X': mktile(TileSprite, image_name='wall', solid=True), 23 'X': mktile(sprites.TileSprite, image_name='wall', solid=True),
25 'R': mktile(DoorSprite, colour='red'), 24 'R': mktile(sprites.DoorSprite, colour='red'),
26 'B': mktile(DoorSprite, colour='blue'), 25 'B': mktile(sprites.DoorSprite, colour='blue'),
27 '^': mktile(EntrySprite, direction=Snake.UP), 26 '^': mktile(sprites.EntrySprite, direction=Snake.UP),
28 'v': mktile(EntrySprite, direction=Snake.DOWN), 27 'v': mktile(sprites.EntrySprite, direction=Snake.DOWN),
29 '<': mktile(EntrySprite, direction=Snake.LEFT), 28 '<': mktile(sprites.EntrySprite, direction=Snake.LEFT),
30 '>': mktile(EntrySprite, direction=Snake.RIGHT), 29 '>': mktile(sprites.EntrySprite, direction=Snake.RIGHT),
31 'E': mktile(ExitSprite), 30 'E': mktile(sprites.ExitSprite),
32 '~': mktile(PuddleSprite), 31 '~': mktile(sprites.PuddleSprite),
32 'M': mktile(sprites.BigMouse),
33 'm': mktile(sprites.SmallMouse),
34 'f': mktile(sprites.Frog),
33 } 35 }
34 36
35 THING_MAP = { 37 THING_MAP = {
36 'a': mktile(BaseSprite, image_name='red'), 38 'a': mktile(sprites.BaseSprite, image_name='red'),
37 } 39 }
38 40
39 41
40 class Tileset(object): 42 class Tileset(object):
41 def __init__(self, tileset_name): 43 def __init__(self, tileset_name):
42 self.name = tileset_name 44 self.name = tileset_name
43 self.load_tiles() 45 self.load_tiles()
44 46
45 def load_tiles(self): 47 def load_tiles(self):
46 self.tiles = {} 48 self.tiles = {}
47 self.floor = TileSprite(tileset=self.name, image_name='floor').image 49 self.floor = sprites.TileSprite(tileset=self.name,
50 image_name='floor').image
48 for name, value in TILE_MAP.items(): 51 for name, value in TILE_MAP.items():
49 if value is not None: 52 if value is not None:
50 value[1]['tileset'] = self.name 53 value[1]['tileset'] = self.name
51 self.tiles[name] = value 54 self.tiles[name] = value
52 self.tiles.update(THING_MAP) 55 self.tiles.update(THING_MAP)
101 for x, tile_char in enumerate(row): 104 for x, tile_char in enumerate(row):
102 #tile_orientation = self.get_tile_orientation(y, x, row, 105 #tile_orientation = self.get_tile_orientation(y, x, row,
103 # tile_char) 106 # tile_char)
104 tile = self.tileset.get_tile(tile_char, (x, y), self.sprites) 107 tile = self.tileset.get_tile(tile_char, (x, y), self.sprites)
105 tile_row.append(tile) 108 tile_row.append(tile)
106 if isinstance(tile, EntrySprite): 109 if isinstance(tile, sprites.EntrySprite):
107 if self.entry is not None: 110 if self.entry is not None:
108 raise InvalidMapError("Too many entry points.") 111 raise InvalidMapError("Too many entry points.")
109 self.entry = tile 112 self.entry = tile
110 self.tiles.append(tile_row) 113 self.tiles.append(tile_row)
111 if self.entry is None: 114 if self.entry is None:
150 def get_tile_size(self): 153 def get_tile_size(self):
151 return self.tile_size 154 return self.tile_size
152 155
153 def get_size(self): 156 def get_size(self):
154 x, y = self.get_tile_size() 157 x, y = self.get_tile_size()
155 return tile_sizify((x, y)) 158 return sprites.tile_sizify((x, y))
156 159
157 def make_background(self): 160 def make_background(self):
158 sx, sy = self.get_tile_size() 161 sx, sy = self.get_tile_size()
159 self.background = Surface(self.get_size()) 162 self.background = Surface(self.get_size())
160 [self.background.blit(self.tileset.floor, tile_sizify((x, y))) 163 [self.background.blit(self.tileset.floor, sprites.tile_sizify((x, y)))
161 for x in range(sx) for y in range(sy)] 164 for x in range(sx) for y in range(sy)]
162 165
163 def get_entry(self): 166 def get_entry(self):
164 return (self.entry.tile_pos, self.entry.direction) 167 return (self.entry.tile_pos, self.entry.direction)
165 168