Mercurial > dw
view lib/level.py @ 59:6b9f9dcfabf1 default tip
Monster cleanup
| author | Radomir Dopieralski <moindev@sheep.art.pl> |
|---|---|
| date | Wed, 02 Jan 2008 03:54:40 +0100 |
| parents | 17b5a0cc33d9 |
| children |
line wrap: on
line source
import pygame from pygame.locals import * import os import re from util import * class Level: def __init__(self, filename): self.map = Map(filename) self.place_monsters(self.map) def place_monsters(self, m): self.monsters = {} x, y = 0, 0 for line in m: for tile in line: urls = m.map_key[tile] if urls: for url in urls[1:]: monster = self.create_monster(x,y, url) x += 1 x = 0 y += 1 def create_monster(self, x, y, kind): module = __import__("monster.%s" % kind, globals(), {}, ["Mob"]) monster = module.Mob((x, y), self) self.monsters[(x,y)] = monster return monster class Map: def __init__(self, filename): '''Read the map from a file.''' self.map = [] self.blocking = [] self.map_key = {} self.w = 0 for line in file(filename).readlines(): m = re.match('^(?P<key>.)\s+<(?P<urls>.*)>\s*$', line) if m: urls = re.split('>\s*<', m.group('urls')) self.map_key[m.group('key')] = urls elif re.match('^\s*$', line): pass # Ignore empty lines else: map_line = [] block_line = [] for char in line: if char in self.map_key: map_line.append(char) if char=='X': block_line.append(True) else: block_line.append(False) if self.w<len(map_line): self.w = len(map_line) self.map.append(map_line) self.blocking.append(block_line) self.h = len(self.map) def __getitem__(self, key): return self.map[key] def is_blocked(self, x, y): if x<0 or y<0: return True try: return self.blocking[y][x] except IndexError: return True
