Mercurial > mamba
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 |