Mercurial > fhrl
changeset 22:391633966298
levels
| author | Radomir Dopieralski <sheep-devel@sheep.art.pl> |
|---|---|
| date | Sat, 16 Mar 2013 00:50:01 +0100 |
| parents | 5edb554f732b |
| children | fcbacaec2f49 |
| files | fhrl/__main__.py fhrl/display.py fhrl/level.py fhrl/mobs.py |
| diffstat | 4 files changed, 72 insertions(+), 42 deletions(-) [+] |
line wrap: on
line diff
--- a/fhrl/__main__.py Sat Mar 16 00:22:24 2013 +0100 +++ b/fhrl/__main__.py Sat Mar 16 00:50:01 2013 +0100 @@ -5,46 +5,49 @@ from fhrl.display import Display from fhrl.level import Level +from fhrl.mobs import Hero class Game(object): def __init__(self): self.margin = 128 self.display = Display() - self.level = Level((32, 32)) - self.display.load_level(self.level) def run(self): - self.display.scroll_by( - self.level.hero.x * 48 - self.display.width // 2, - self.level.hero.y * 32 - self.display.height // 2, - True - ) - self.display.update_all() - while True: - while True: - anims = self.level.hero.act(self.level, self.display) - if anims: - self.display.animations.extend(anims) - break - else: - self.display.update() - survivors = [] - for m in self.level.monsters: - if m.health > 0: - survivors.append(m) - self.display.animations.extend(m.act(self.level)) - self.level.monsters = survivors - if self.level.hero.rect.right > self.display.width - self.margin: - self.display.scroll_by(48, 0) - elif self.level.hero.rect.left < self.margin: - self.display.scroll_by(-48, 0) - if self.level.hero.rect.bottom > self.display.height - self.margin: - self.display.scroll_by(0, 32) - elif self.level.hero.rect.top < self.margin: - self.display.scroll_by(0, -32) - self.display.update_hud(self.level.hero) - self.display.play_animations() + hero = Hero() + for level in xrange(5): + self.level = Level((24, 24), hero) + self.display.load_level(self.level) + self.display.scroll_by( + self.level.hero.x * 48 - self.display.width // 2, + self.level.hero.y * 32 - self.display.height // 2, + True + ) + self.display.update_all() + while self.level.grid[self.level.hero.y][self.level.hero.x] != 5: + while True: + anims = self.level.hero.act(self.level, self.display) + if anims: + self.display.animations.extend(anims) + break + else: + self.display.update() + survivors = [] + for m in self.level.monsters: + if m.health > 0: + survivors.append(m) + self.display.animations.extend(m.act(self.level)) + self.level.monsters = survivors + if self.level.hero.rect.right > self.display.width - self.margin: + self.display.scroll_by(48, 0) + elif self.level.hero.rect.left < self.margin: + self.display.scroll_by(-48, 0) + if self.level.hero.rect.bottom > self.display.height - self.margin: + self.display.scroll_by(0, 32) + elif self.level.hero.rect.top < self.margin: + self.display.scroll_by(0, -32) + self.display.update_hud(self.level.hero) + self.display.play_animations() pygame.display.init() Game().run()
--- a/fhrl/display.py Sat Mar 16 00:22:24 2013 +0100 +++ b/fhrl/display.py Sat Mar 16 00:50:01 2013 +0100 @@ -22,6 +22,7 @@ self.animations = [] def load_level(self, level): + self.x, self.y = 0, 0 self.background = pygame.Surface( (level.width * 48 - 48, level.height * 32 - 32) )
--- a/fhrl/level.py Sat Mar 16 00:22:24 2013 +0100 +++ b/fhrl/level.py Sat Mar 16 00:50:01 2013 +0100 @@ -2,11 +2,12 @@ import random -from fhrl.mobs import Hero, Stuff, make_monster, make_item +from fhrl.mobs import Stuff, make_monster, make_item class Level(object): - def __init__(self, (width, height), level=1): + def __init__(self, (width, height), hero, level=1): + self.hero = hero self.width = width self.height = height self.level = level @@ -59,7 +60,7 @@ if f == 1 ] random.shuffle(self.free) - self.hero = Hero(self.free.pop()) + self.hero.move_to(self.free.pop()) self.monsters = [ make_monster(self.level, self.free.pop()) for i in xrange(20)
--- a/fhrl/mobs.py Sat Mar 16 00:22:24 2013 +0100 +++ b/fhrl/mobs.py Sat Mar 16 00:50:01 2013 +0100 @@ -119,13 +119,16 @@ class Mob(Sprite): def __init__(self, kind, (x, y)): super(Mob, self).__init__() - self.rect.topleft = x * 48 - 24, y * 32 - 33 - self.x, self.y = x, y + self.move_to((x, y)) self.kind = kind self.health = kind.get('health', 1) self.power = kind.get('power', 0) self.ai = kind.get('ai', None) + def move_to(self, (x, y), (scroll_x, scroll_y)=(0, 0)): + self.x, self.y = x, y + self.rect.topleft = x * 48 - 24 - scroll_x, y * 32 - 33 - scroll_y + def init_sprite(self, resources): self.set_image(resources.mobs[self.kind['sprite']]) return self @@ -195,8 +198,8 @@ class Hero(Mob): - def __init__(self, (x, y)): - super(Hero, self).__init__({}, (x, y)) + def __init__(self): + super(Hero, self).__init__({}, (0, 0)) self.items = [] self.arrow = Sprite() self.balls = 10 @@ -209,6 +212,16 @@ self.set_image(resources.mobs[0]) return self + def pick_item(self, item, level, display): + level.items.remove(item) + self.health += item.kind.get('health', 0) + self.gasoline += item.kind.get('gasoline', 0) + self.battery += item.kind.get('battery', 0) + self.balls += item.kind.get('balls', 0) + if item.kind not in self.items: + self.items.append(item.kind) + return [item._pick_anim(display)] + def act(self, level, display): anims = [] keys = pygame.key.get_pressed() @@ -244,9 +257,7 @@ anims.extend(self.walk(direction, level)) item = level.find_item((self.x, self.y)) if item: - anims.append(item._pick_anim(display)) - self.items.append(item) - level.items.remove(item) + anims.extend(self.pick_item(item, level, display)) except ActBumpMob as e: anims.extend(self.attack(direction, e.mob, display)) except ActBumpStuff as e: @@ -286,6 +297,8 @@ return [] def ai_escape(mob, level): + if dist2((level.hero.x, level.hero.y), (mob.x, mob.y)) > 9: + return [] possible = [ d for d in xrange(8) if not ( @@ -406,57 +419,69 @@ 'name': "Drill", 'sprite': 0, 'ammo': 'gasoline', + 'gasoline': 5, }, 'beam': { 'name': "Beam Emitter", 'sprite': 1, 'ammo': 'battery', + 'battery': 5, }, 'cannon': { 'name': "Pirate Cannon", 'sprite': 2, 'ammo': 'balls', + 'balls': 5, }, 'teleporter': { 'name': "Teleport Device", 'sprite': 3, 'ammo': 'battery', + 'battery': 5, }, 'flamer': { 'name': "Flame Thrower", 'sprite': 4, 'ammo': 'gasoline', + 'gasoline': 5, }, 'vulcan': { 'name': "Machine Gun", 'sprite': 5, 'ammo': 'balls', + 'balls': 5, }, 'deevo': { 'name': "Deevolution Inducer", 'sprite': 6, 'ammo': 'battery', + 'battery': 5, }, 'toaster': { 'name': "Doomsday Device", 'sprite': 7, 'ammo': 'battery', + 'battery': 5, }, 'balls': { 'name': "Cannon Balls", 'sprite': 8, + 'balls': 10, }, 'gasoline': { 'name': "Gasoline", 'sprite': 9, + 'gasoline': 10, }, 'medkit': { 'name': "First Aid Kit", 'sprite': 10, + 'health': 10, }, 'battery': { 'name': "Battery", 'sprite': 11, + 'battery': 10, }, }
