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)