Mercurial > mamba
annotate mamba/level.py @ 57:cd5ad2c45e2d
Minor level fiddlery.
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Sun, 11 Sep 2011 16:19:05 +0200 |
parents | e730ec8b82e8 |
children | 58557a89ec86 |
rev | line source |
---|---|
8
66ae99f6903e
First stab at tile/level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
1 """ |
66ae99f6903e
First stab at tile/level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
2 Level for our shiny game. |
66ae99f6903e
First stab at tile/level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
3 """ |
66ae99f6903e
First stab at tile/level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
4 |
50 | 5 from pygame.sprite import RenderUpdates |
8
66ae99f6903e
First stab at tile/level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
6 |
50 | 7 from mamba.data import load_file |
57 | 8 from mamba.sprites import tile_sizify, TileSprite, BaseSprite, DoorSprite |
31
67218082cdbb
More level non-functionality.
Jeremy Thurgood <firxen@gmail.com>
parents:
21
diff
changeset
|
9 |
21
f76c3f033772
Release early, release broken. Level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
8
diff
changeset
|
10 |
37 | 11 TILE_MAP = { |
12 '.': None, | |
56 | 13 'X': (TileSprite, 'randomtile'), |
14 'R': (DoorSprite, 'red'), | |
15 'B': (DoorSprite, 'blue'), | |
37 | 16 } |
17 | |
18 THING_MAP = { | |
57 | 19 'a': (BaseSprite, 'snake/snake-head-r'), |
37 | 20 } |
21 | |
22 | |
8
66ae99f6903e
First stab at tile/level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
23 class Tileset(object): |
66ae99f6903e
First stab at tile/level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
24 def __init__(self, tileset_name): |
66ae99f6903e
First stab at tile/level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
25 self.name = tileset_name |
31
67218082cdbb
More level non-functionality.
Jeremy Thurgood <firxen@gmail.com>
parents:
21
diff
changeset
|
26 self.load_tiles() |
8
66ae99f6903e
First stab at tile/level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
27 |
66ae99f6903e
First stab at tile/level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
28 def load_tiles(self): |
31
67218082cdbb
More level non-functionality.
Jeremy Thurgood <firxen@gmail.com>
parents:
21
diff
changeset
|
29 self.tiles = {} |
50 | 30 for name, value in TILE_MAP.items(): |
31 if value is not None: | |
56 | 32 value = (value[0], self.name) + value[1:] |
50 | 33 self.tiles[name] = value |
34 self.tiles.update(THING_MAP) | |
8
66ae99f6903e
First stab at tile/level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
35 |
66ae99f6903e
First stab at tile/level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
36 def __getitem__(self, key): |
50 | 37 tilespec = self.tiles[key] |
38 if not tilespec: | |
39 return None | |
40 return tilespec[0](*tilespec[1:]) | |
31
67218082cdbb
More level non-functionality.
Jeremy Thurgood <firxen@gmail.com>
parents:
21
diff
changeset
|
41 |
50 | 42 def get_tile(self, key, tile_pos, *groups): |
31
67218082cdbb
More level non-functionality.
Jeremy Thurgood <firxen@gmail.com>
parents:
21
diff
changeset
|
43 tile = self[key] |
50 | 44 if tile: |
45 tile.add(*groups) | |
46 tile.set_tile_pos(tile_pos) | |
31
67218082cdbb
More level non-functionality.
Jeremy Thurgood <firxen@gmail.com>
parents:
21
diff
changeset
|
47 return tile |
8
66ae99f6903e
First stab at tile/level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
48 |
66ae99f6903e
First stab at tile/level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
49 |
66ae99f6903e
First stab at tile/level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
50 class Level(object): |
66ae99f6903e
First stab at tile/level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
51 def __init__(self, level_name): |
66ae99f6903e
First stab at tile/level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
52 self.level_name = level_name |
66ae99f6903e
First stab at tile/level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
53 self.load_level_data() |
66ae99f6903e
First stab at tile/level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
54 |
66ae99f6903e
First stab at tile/level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
55 def load_level_data(self): |
66ae99f6903e
First stab at tile/level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
56 """ |
31
67218082cdbb
More level non-functionality.
Jeremy Thurgood <firxen@gmail.com>
parents:
21
diff
changeset
|
57 This file format is potentially yucky. |
8
66ae99f6903e
First stab at tile/level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
58 """ |
66ae99f6903e
First stab at tile/level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
59 level_data = load_file('levels/%s.txt' % (self.level_name,)) |
31
67218082cdbb
More level non-functionality.
Jeremy Thurgood <firxen@gmail.com>
parents:
21
diff
changeset
|
60 tileset_name = level_data.readline().strip() |
21
f76c3f033772
Release early, release broken. Level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
8
diff
changeset
|
61 self.tileset = Tileset(tileset_name) |
8
66ae99f6903e
First stab at tile/level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
62 tiles_ascii = level_data.readlines() |
50 | 63 self.tilegroup = RenderUpdates() |
64 self.tiles = [[self.tileset.get_tile(tile, (x, y), self.tilegroup) | |
31
67218082cdbb
More level non-functionality.
Jeremy Thurgood <firxen@gmail.com>
parents:
21
diff
changeset
|
65 for x, tile in enumerate(row.strip())] |
67218082cdbb
More level non-functionality.
Jeremy Thurgood <firxen@gmail.com>
parents:
21
diff
changeset
|
66 for y, row in enumerate(tiles_ascii)] |
21
f76c3f033772
Release early, release broken. Level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
8
diff
changeset
|
67 |
f76c3f033772
Release early, release broken. Level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
8
diff
changeset
|
68 def get_size(self): |
34
aa62d4138522
Refactor tile_size conversions.
Jeremy Thurgood <firxen@gmail.com>
parents:
33
diff
changeset
|
69 return tile_sizify((len(self.tiles[0]), len(self.tiles))) |