Mercurial > mhrok
changeset 10:1706e5370f76
Switch to map-based level
| author | Radomir Dopieralski <sheep-devel@sheep.art.pl> |
|---|---|
| date | Sun, 26 Feb 2012 16:01:19 +0100 |
| parents | f1b43f6480c5 |
| children | e7c684cfe063 |
| files | mhrok.png mhrok.py |
| diffstat | 2 files changed, 52 insertions(+), 26 deletions(-) [+] |
line wrap: on
line diff
--- a/mhrok.py Sun Feb 26 14:21:36 2012 +0100 +++ b/mhrok.py Sun Feb 26 16:01:19 2012 +0100 @@ -1,6 +1,13 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- + +import pkgutil +try: + import cStringIO as StringIO +except ImportError: + import StringIO + import pygame from pygame import locals as pg @@ -119,39 +126,58 @@ self.width = width self.height = height + self.map = [[0] * width for y in xrange(height)] + for y in range(2, 10): + for x in range(2, 10): + self.map[y][x] = 1 + self.map[2][1] = 2 + self.map[1][1] = 2 + self.map[0][0] = 2 + self.map[0][1] = 2 + self.map[5][5] = 3 + self.map[6][7] = 4 + self.mobs[2, 3] = Bat self.mobs[4, 2] = Chest self.mobs[6, 3] = Skeleton - self.mobs[9, 10] = Teddybear + self.mobs[9, 7] = Teddybear + def __getitem__(self, (x, y)): + try: + return self.map[y][x] + except IndexError: + return None def render_background(self, tiles): background = pygame.Surface((self.width * 20 + 28, self.height * 12 + 36)) + background.fill((24, 16, 16)) blood = tiles[21].copy() blood.set_alpha(220) blood2 = tiles[22].copy() blood2.set_alpha(220) - for y in range(self.height): - for x in range(self.width): - background.blit(tiles[23], (x * 20 + 6, y * 12)) - if (9*x + 5*y + 2) % (y+3) == 3: - background.blit(blood, (x * 20 + 6, y * 12)) - if (13*x + 5*y + 2) % (y+4) == 2: - background.blit(blood2, (x * 20 + 6, y * 12)) - for x in range(self.width): - if x != 3: - background.blit(tiles[4], (x * 20 + 6, 0)) - background.blit(tiles[14], (x * 20 + 6, self.height * 12 - 12)) - else: - background.blit(tiles[24], (x * 20 + 6, 0)) - background.blit(tiles[34], (x * 20 + 6, self.height * 12 - 12)) - for y in range(self.height): - if y != 3: - background.blit(tiles[9], (6, y * 12)) - background.blit(tiles[19], (self.width * 20 - 14, y * 12)) - else: - background.blit(tiles[29], (6, y * 12)) - background.blit(tiles[39], (self.width * 20 - 14, y * 12)) + for y, row in enumerate(self.map): + for x, square in enumerate(row): + pos = x * 20 + 6, y * 12 + if square == 1: + background.blit(tiles[23], pos) + elif square == 2: + background.blit(tiles[33], pos) + elif square == 3: + background.blit(tiles[23], pos) + background.blit(blood, pos) + elif square == 4: + background.blit(tiles[23], pos) + background.blit(blood2, pos) + if square: + if not self[x - 1, y]: + background.blit(tiles[9], pos) + if not self[x + 1, y]: + background.blit(tiles[19], pos) + if not self[x, y - 1]: + background.blit(tiles[4], pos) + if not self[x, y + 1]: + background.blit(tiles[14], pos) + return background def render_sprites(self, tiles, pc): @@ -179,8 +205,7 @@ def render_level(self, level, pc): self.sprites, self.shadows = level.render_sprites(self.tiles, pc) - self.background.blit(level.render_background(self.tiles), (160, 140)) - self.sprites.move((160, 140)) + self.background.blit(level.render_background(self.tiles), (0, 0)) def draw(self): if self.first_draw: @@ -205,7 +230,7 @@ self.game_over = False self.pc = Player() - self.level = Level((15, 14)) + self.level = Level((30, 36)) self.display.render_level(self.level, self.pc) def main(self): @@ -221,7 +246,8 @@ def load_tiles(filename, width, height): - image = pygame.image.load(filename).convert() + f = StringIO.StringIO(pkgutil.get_data('mhrok', filename)) + image = pygame.image.load(f, filename).convert() image_width, image_height = image.get_size() tiles = [] for x in range(image_width/width):
