changeset 5:69ce5e46b825

Make the jellies behave differently
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Sun, 11 Mar 2012 20:32:12 +0100
parents b35388027227
children 4f96d83a35fb
files jelly/jelly.png jelly/mobs.py jelly/sprites.py
diffstat 3 files changed, 30 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
Binary file jelly/jelly.png has changed
--- a/jelly/mobs.py	Sun Mar 11 19:25:57 2012 +0100
+++ b/jelly/mobs.py	Sun Mar 11 20:32:12 2012 +0100
@@ -59,6 +59,21 @@
     color = 2
     animation = [56, 56, 57, 57, 57, 57]
 
+    def control(self, level):
+        if dist(level.pc.pos, self.pos) <= 1:
+            level.attack(self, pos2dir(self.pos, level.pc.pos), level.pc)
+            return
+        x, y = self.pos
+        possible = [d for (d, (dx, dy)) in enumerate(zip(DX, DY))
+                    if level[x + dx, y + dy]]
+        # Run away from the player
+        direction = max(possible,
+            key=lambda d: dist((x+DX[d], y+DY[d]), level.pc.pos))
+        try:
+            level.walk(self, direction)
+        except level.Blocked:
+            pass
+
 
 class PurpleJelly(Mob):
     name = 'purple jelly'
@@ -71,6 +86,21 @@
     color = 3
     animation = [66, 66, 67, 67, 67, 67]
 
+    def control(self, level):
+        if dist(level.pc.pos, self.pos) <= 1:
+            level.attack(self, pos2dir(self.pos, level.pc.pos), level.pc)
+            return
+        x, y = self.pos
+        possible = [d for (d, (dx, dy)) in enumerate(zip(DX, DY))
+                    if level[x + dx, y + dy]]
+        # Move towards the player
+        direction = min(possible,
+            key=lambda d: dist((x+DX[d], y+DY[d]), level.pc.pos))
+        try:
+            level.walk(self, direction)
+        except level.Blocked:
+            pass
+
 
 class BlueJelly(Mob):
     name = 'blue jelly'
--- a/jelly/sprites.py	Sun Mar 11 19:25:57 2012 +0100
+++ b/jelly/sprites.py	Sun Mar 11 20:32:12 2012 +0100
@@ -74,7 +74,6 @@
         yield None
 
     def attack_animation(self, direction):
-        yield None
         self.rect.move_ip((DX[direction]*4, DY[direction]*2-2))
         yield None
         self.rect.move_ip((DX[direction]*6, DY[direction]*4))