Mercurial > fhrl
changeset 10:89bcca88e444
robots
| author | Radomir Dopieralski <sheep-devel@sheep.art.pl> |
|---|---|
| date | Wed, 13 Mar 2013 17:17:24 +0100 |
| parents | 3094d51c1dc7 |
| children | ca3c3f3d40e5 |
| files | fhrl/__main__.py fhrl/display.py fhrl/level.py fhrl/mobs.py fhrl/mobs2.png fhrl/rocks.png |
| diffstat | 6 files changed, 52 insertions(+), 39 deletions(-) [+] |
line wrap: on
line diff
--- a/fhrl/__main__.py Wed Mar 13 13:40:50 2013 +0100 +++ b/fhrl/__main__.py Wed Mar 13 17:17:24 2013 +0100 @@ -5,15 +5,13 @@ from fhrl.display import Display from fhrl.level import Level -from fhrl.resources import Resources class Game(object): def __init__(self): self.margin = 64 - self.resources = Resources() self.display = Display() - self.level = Level((32, 32), self.resources) + self.level = Level((32, 32)) self.display.load_level(self.level) def run(self):
--- a/fhrl/display.py Wed Mar 13 13:40:50 2013 +0100 +++ b/fhrl/display.py Wed Mar 13 17:17:24 2013 +0100 @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- import pygame +from fhrl.resources import Resources class SortedUpdates(pygame.sprite.RenderUpdates): @@ -16,20 +17,25 @@ self.x, self.y = 0, 0 self.screen = pygame.display.set_mode((self.width, self.height)) self.clock = pygame.time.Clock() + self.resources = Resources() self.animations = [] def load_level(self, level): self.background = pygame.Surface( (level.width * 48 - 48, level.height * 32 - 32) ) - level.render(self.background) + self.render_level(self.background, level) self.sprites = SortedUpdates() + level.hero.set_image(self.resources.mobs[0]) self.sprites.add(level.hero) for m in level.monsters: + m.set_image(self.resources.mobs[m.kind]) self.sprites.add(m) for i in level.items: + i.set_image(self.resources.items[i.kind]) self.sprites.add(i) for s in level.stuff: + s.set_image(self.resources.stuff[s.kind]) self.sprites.add(s) def _scroll_anim(self, dx, dy): @@ -98,3 +104,20 @@ if self.animations: self.update() + def render_level(self, surf, level): + for y, row in enumerate(level.grid): + for x, f in enumerate(row): + surf.blit(self.resources.floor[f], (x * 48 - 24, y * 32)) + nrows = iter(level.grid) + nrows.next() + for y, (row, nrow) in enumerate(zip(level.grid, nrows)): + for x, ts in enumerate(zip(row, row[1:], nrow, nrow[1:])): + surf.blit( + self.resources.walls[ + sum((not t) * 2**i for i, t in enumerate(ts)) + ], + (x * 48, y * 32) + ) + + +
--- a/fhrl/level.py Wed Mar 13 13:40:50 2013 +0100 +++ b/fhrl/level.py Wed Mar 13 17:17:24 2013 +0100 @@ -6,8 +6,7 @@ class Level(object): - def __init__(self, (width, height), resources): - self.resources = resources + def __init__(self, (width, height)): self.width = width self.height = height self.grid = [ @@ -68,17 +67,17 @@ if f ] random.shuffle(self.free) - self.hero = Hero(self.resources.mobs[0], self.free.pop()) + self.hero = Hero(0, self.free.pop()) self.monsters = [ - Mob(self.resources.mobs[random.randrange(1, 3)], self.free.pop()) + Mob(random.randrange(1, 4), self.free.pop()) for i in xrange(20) ] self.items = [ - Item(self.resources.items[random.randrange(6)], self.free.pop()) + Item(random.randrange(6), self.free.pop()) for i in xrange(20) ] self.stuff = [ - Stuff(self.resources.stuff[random.randrange(4)], self.free.pop()) + Stuff(random.randrange(4), self.free.pop()) for i in xrange(20) ] x, y = self.free.pop() @@ -115,19 +114,3 @@ self.grid[sy + h - 1][x] = v return sx, sy, w, h - def render(self, surf): - for y, row in enumerate(self.grid): - for x, f in enumerate(row): - surf.blit(self.resources.floor[f], (x * 48 - 24, y * 32)) - nrows = iter(self.grid) - nrows.next() - for y, (row, nrow) in enumerate(zip(self.grid, nrows)): - for x, ts in enumerate(zip(row, row[1:], nrow, nrow[1:])): - surf.blit( - self.resources.walls[ - sum((not t) * 2**i for i, t in enumerate(ts)) - ], - (x * 48, y * 32) - ) - -
--- a/fhrl/mobs.py Wed Mar 13 13:40:50 2013 +0100 +++ b/fhrl/mobs.py Wed Mar 13 17:17:24 2013 +0100 @@ -20,31 +20,40 @@ """Raised when you try to walk into a monster.""" -class Item(pygame.sprite.DirtySprite): - def __init__(self, image, (x, y)): - super(Item, self).__init__() +class Sprite(pygame.sprite.DirtySprite): + def __init__(self): + super(Sprite, self).__init__() + self.rect = pygame.Rect(0, 0, 1, 1) + + def set_image(self, image): + pos = self.rect.topleft self.image = image self.rect = self.image.get_rect() - self.rect.topleft = x * 48 - 24, y * 32 - 12 - self.x, self.y = x, y + self.rect.move_ip(pos) -class Stuff(pygame.sprite.DirtySprite): - def __init__(self, image, (x, y)): +class Item(Sprite): + def __init__(self, kind, (x, y)): + super(Item, self).__init__() + self.rect.topleft = x * 48 - 24, y * 32 - 12 + self.x, self.y = x, y + self.kind = kind + + +class Stuff(Sprite): + def __init__(self, kind, (x, y)): super(Stuff, self).__init__() - self.image = image - self.rect = self.image.get_rect() self.rect.topleft = x * 48 - 24, y * 32 - 24 self.x, self.y = x, y + self.kind = kind -class Mob(pygame.sprite.DirtySprite): - def __init__(self, image, (x, y)): +class Mob(Sprite): + def __init__(self, kind, (x, y)): super(Mob, self).__init__() - self.image = image - self.rect = self.image.get_rect() self.rect.topleft = x * 48 - 24, y * 32 - 33 self.x, self.y = x, y + self.kind = kind def _walk_anim(self, d): for frame in xrange(8):
