X-Git-Url: https://harishankar.org/repos/?p=butaba-adventures.git;a=blobdiff_plain;f=gameobjects.py;h=c9c945ba973b932d8c2fd0b947175dc3b00ab46f;hp=6cb93f087dd54045393acc971a5e04e5e0067ee2;hb=58f80c37fa3c97f3cfb2a0cdd3096c529f65e204;hpb=4b6e952b476861c8979dc395781964099285a4c6 diff --git a/gameobjects.py b/gameobjects.py index 6cb93f0..c9c945b 100644 --- a/gameobjects.py +++ b/gameobjects.py @@ -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,66 @@ class GameObject: def use (self, otherobject): pass +# class for well +class Well (GameObject): + def __init__ (self, row, col, image=None, liquid = "water"): + self.liquid = liquid + text = "Well" + GameObject.__init__ (self, row, col, text, image, False, "Draw %s" % liquid) + + def interact (self): + return False + + def use (self, otherobject): + # if the object is a bucket, fill it + if isinstance (otherobject, Bucket) is True: + # but only if it is empty + if otherobject.liquid is None: + otherobject.liquid = self.liquid + + +# class for buckets +class Bucket (GameObject): + def __init__ (self, row, col, image=None, liquid = None): + self.liquid = liquid + text = "Bucket" + if liquid is not None: + text = text + " containing %s" % liquid + GameObject.__init__ (self, row, col, text, image, True, "Empty it") + + def interact (self): + return True + + def use (self, otherobject): + # if the other object is a bucket, transfer its + # contents to the other bucket + if isinstance (otherobject, Bucket): + otherobject.liquid = self.liquid + # empty the bucket of its contents + self.liquid = None + self.text = "Bucket" + +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 +89,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 +132,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