Began working on NPC code
[butaba-adventures.git] / gameobjects.py
index 6cb93f0..2edbc5b 100644 (file)
@@ -1,18 +1,15 @@
 # object classes - classes for game interactive objects
-import pygame
-import os.path
-
-import utility
 
 # base class for all objects
 class GameObject:
        # initialization routine
-       def __init__ (self, row, col, text, image = None, can_pickup = True):
+       def __init__ (self, row, col, text, image = None, can_pickup = True, use_str = "Use"):
                self.row = row
                self.col = col
                self.image = image
                self.text = text
                self.can_pickup = can_pickup
+               self.use_str = use_str
 
        # override this for interaction, i.e. when character walks into the item
        def interact (self):
@@ -25,12 +22,27 @@ class GameObject:
        def use (self, otherobject):
                pass
 
+class GoldCoins (GameObject):
+       # initialize
+       def __init__ (self, row, col, image, value):
+               text = "gold coins"
+               self.value = value
+               GameObject.__init__ (self, row, col, text, image, False, "Take")
+
+       # no interaction with this object
+       def interact (self):
+               return True
+
+       # use the object on Butaba - add to his gold
+       def use (self, butaba):
+               butaba.gold += self.value
+
 
 class HealthPotion (GameObject):
        # initialize
        def __init__ (self, row, col, image):
                text = "health potion"
-               GameObject.__init__ (self, row, col, text, image, True)
+               GameObject.__init__ (self, row, col, text, image, True, "Drink")
 
        # no interaction with this object
        def interact (self):
@@ -38,7 +50,38 @@ class HealthPotion (GameObject):
 
        # using the potion
        def use (self, butaba):
-               pass
+               butaba.health += 25
+               if butaba.health > butaba.MAXHEALTH:
+                       butaba.health = butaba.MAXHEALTH
+
+class Chest (GameObject):
+       def __init__ (self, row, col, text, image, key_id, locked = False, objects = []):
+               self.key_id = key_id
+               self.locked = locked
+               self.objects = objects
+               GameObject.__init__ (self, row, col, text, image, False, "Open")
+
+       # no interaction with this object. Also solid so return False
+       def interact (self):
+               # object is solid
+               return False
+
+       # try to use the key passed to it
+       def use (self, key):
+               # if chest is locked try to unlock it
+               if self.locked is True:
+                       # if the item is a key
+                       if isinstance (key, Key):
+                               # if the key fits the lock
+                               # unlock the chest
+                               if key.key_id == self.key_id:
+                                       self.locked = False
+                                       # return the key
+                                       return key
+                       # return None if not a key or key did not fit
+                       return None
+               else:
+                       return self.locked
 
 class Key (GameObject):
        def __init__ (self, row, col, text, image, key_id):
@@ -50,11 +93,7 @@ class Key (GameObject):
                # key is not a solid object so return True
                return True
 
-       # using the key
+       # using the key - this is relegated to the locked item for
+       # convenience, so key does nothing by defaults
        def use (self, lockitem):
-               if type (lockitem) == Chest or type (lockitem) == Door:
-                       if self.key_id == lockitem.key_id:
-                               if lockitem.unlocked is False:
-                                       lockitem.unlocked = True
-                               else:
-                                       lockitem.unlocked = True
+               pass