Mercurial > scrounge
changeset 37:98e5639fa00b
add hero damage
| author | Radomir Dopieralski <sheep-devel@sheep.art.pl> |
|---|---|
| date | Tue, 23 Aug 2011 20:50:36 +0200 |
| parents | e96056af61ff |
| children | f6cd326c1169 |
| files | hero.py main.py monster.py |
| diffstat | 3 files changed, 19 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/hero.py Tue Aug 23 20:36:47 2011 +0200 +++ b/hero.py Tue Aug 23 20:50:36 2011 +0200 @@ -3,6 +3,7 @@ import display import thing +import effect class HeroSprite(display.Sprite): @@ -87,6 +88,7 @@ self.x, self.y = x, y self.effects = [] self.sprite = HeroSprite() + self.hp = 10 def render(self, to_display): to_display.sprites.add(self.sprite) @@ -115,3 +117,9 @@ else: self.sprite.animation = self.sprite.anim_blocked(dx, dy) self.sprite.animation.next() + + def hit(self, damage): + self.hp -= damage + self.effects.append( + effect.Caption(self.x, self.y, '%d' % (-damage), (255, 32, 32))) +
--- a/main.py Tue Aug 23 20:36:47 2011 +0200 +++ b/main.py Tue Aug 23 20:50:36 2011 +0200 @@ -53,12 +53,11 @@ for m in monsters: if not m.dead: m.act(self.level) - for m in monsters: + for m in monsters + [self.hero]: for d, effect in enumerate(m.effects): effect.render(self.display, delay=d * 12) m.effects = [] - def main(self): try: while True:
--- a/monster.py Tue Aug 23 20:36:47 2011 +0200 +++ b/monster.py Tue Aug 23 20:50:36 2011 +0200 @@ -116,7 +116,7 @@ def act(self, level): # Attack if standing next to the hero if distance(level.hero.x, level.hero.y, self.x, self.y) == 1: - self.walk(level, level.hero.x - self.x, level.hero.y - self.y) + self.attack(level, level.hero.x - self.x, level.hero.y - self.y) return # Walk towards the hero @@ -139,9 +139,7 @@ if self.is_blocked(level, dx, dy): return if (level.hero.x, level.hero.y) == (self.x + dx, self.y + dy): - self.sprite.animation = self.sprite.anim_fight(dx, dy) - self.sprite.animation.next() - return + self.attack(level, dx, dy) del level.monsters[(self.x, self.y)] self.x += dx self.y += dy @@ -149,6 +147,13 @@ self.sprite.animation = self.sprite.anim_walk(dx, dy) self.sprite.animation.next() + def attack(self, level, dx, dy): + if not (level.hero.x, level.hero.y) == (self.x + dx, self.y + dy): + return + self.sprite.animation = self.sprite.anim_fight(dx, dy) + self.sprite.animation.next() + level.hero.hit(1) + class Skeleton(Monster): tx = 0 @@ -177,7 +182,7 @@ # Attack if we feel like it if random.choice([True, False]): if distance(level.hero.x, level.hero.y, self.x, self.y) == 1: - self.walk(level, level.hero.x - self.x, level.hero.y - self.y) + self.attack(level, level.hero.x - self.x, level.hero.y - self.y) return # Move randomly (very annoying)
