Mercurial > qq-pygrafix
changeset 7:49756204d145
load the level from file
| author | Radomir Dopieralski <moindev@sheep.art.pl> |
|---|---|
| date | Sun, 24 Aug 2008 01:21:27 +0200 |
| parents | 3a6e7753aa28 |
| children | 8d647cfd6115 |
| files | qq.py |
| diffstat | 1 files changed, 49 insertions(+), 45 deletions(-) [+] |
line wrap: on
line diff
--- a/qq.py Sat Aug 23 23:08:24 2008 +0200 +++ b/qq.py Sun Aug 24 01:21:27 2008 +0200 @@ -1,6 +1,8 @@ #!/usr/bin/python # -*- coding: utf-8 -*- +import ConfigParser + import pygame from pygame.locals import * @@ -107,50 +109,6 @@ self.animation.next() -class Level: - def __init__(self): - self.items = {} - self.map = [ - "xxxxxxxxxxxxxxx", - "x.......x.x.x.x", - "x......x.x.x.xx", - "x...@.......x.x", - "x......S...x.xx", - "x...........x.x", - "xx.x.x.x...x.xx", - "x.x.x.x.....x.x", - "xx.x.b.x......x", - "x..........S..x", - "xx.xx.xxx.....x", - "x..xx.xxx...x.x", - "xx.xx.xxx....xx", - "x.....xxx...x.x", - "xxxxxxxxxxxxxxx", - ] - tile_width, tile_height = 24, 16 - tiles = load_tiles("corridor.png", tile_width, tile_height) - width = len(self.map[0]) - height = len(self.map) - self.image = pygame.Surface((width*tile_width, height*tile_height)) - y = 0 - for line in self.map: - x = 0 - for tile in line: - if self.map[y][x] != 'x': - self.image.blit(tiles[0][0], (x*tile_width, y*tile_height)) - elif y > 1 and self.map[y-1][x] != 'x': - self.image.blit(tiles[0][1], (x*tile_width, y*tile_height)) - if self.map[y][x] == 'S': - self.items[(x, y)] = Skeleton - if self.map[y][x] == '@': - self.items[(x, y)] = Player - if self.map[y][x] == 'b': - self.items[(x, y)] = Crate - x += 1 - y += 1 - - def draw(self, surface): - surface.blit(self.image, (0, 0)) class Skeleton(Sprite): @@ -198,6 +156,52 @@ self.animation = None +class Level: + item_names = { + 'player': Player, + 'wall': 0, + 'floor': 1, + 'skeleton': Skeleton, + 'crate': Crate + } + def __init__(self, filename="level.map"): + parser = ConfigParser.ConfigParser() + parser.read(filename) + self.items = {} + self.key = {} + self.map = parser.get("level", "map").split("\n") + for option in parser.options("level"): + if option.startswith('\\'): + self.key[option[1]] = parser.get("level", option).strip() + tile_width, tile_height = 24, 16 + tiles = load_tiles("corridor.png", tile_width, tile_height) + width = len(self.map[0]) + height = len(self.map) + self.image = pygame.Surface((width*tile_width, height*tile_height)) + y = 0 + for line in self.map: + x = 0 + for c in line: + tile = self.item_names[self.key[c]] + if tile != 0: + self.image.blit(tiles[0][0], (x*tile_width, y*tile_height)) + elif y > 1 and self.get(x, y-1) != 'wall': + self.image.blit(tiles[0][1], (x*tile_width, y*tile_height)) + if tile != 1 and tile != 0: + self.items[(x, y)] = tile + x += 1 + y += 1 + + def get(self, x, y): + try: + return self.key[self.map[y][x]] + except IndexError: + return 'wall' + + def draw(self, surface): + surface.blit(self.image, (0, 0)) + + class Game: def __init__(self): self.screen = pygame.display.get_surface() @@ -224,7 +228,7 @@ def walk(d): x, y = self.player.pos self.player.direction = d - if self.level.map[y+DY[d]][x+DX[d]] != 'x': + if self.level.get(x+DX[d], y+DY[d]) != 'wall': self.player.animation = self.player.walk_animation() if pressed(K_UP): walk(0)
