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