+ # get and interact with objects if present in a particular row/col
+ def interact_objects (self, level, row, col):
+ objs = []
+ # get list of objects at current location
+ for obj in level.objects:
+ if obj.row == row and obj.col == col:
+ objs.append (obj)
+
+ # overall flag for blocking/non-blocking objects
+ notblock = True
+ # now perform interaction
+ for obj in objs:
+ # run the object interact function
+ if obj.interact () is False:
+ notblock = False
+ # if object can be picked up ask
+ self.pickup_object (obj)
+
+ return notblock
+
+ # picking up an object
+ def pickup_object (self, obj):
+ # only if object can be picked up, pick it up or use it
+ if obj.can_pickup is True:
+ ans = utility.ask_question (self.screen, "Found %s." % obj.text, ["Pick up", "Use", "Ignore"], self.img_menu)
+ # if the answer is "carry"
+ if ans == 1:
+ # check if the inventory is full
+ if len (self.butaba.inventory) >= butaba.Butaba.MAXITEMS:
+ self.status_message = "Failed. Inventory full"
+ else:
+ # add item to inventory
+ self.butaba.inventory.append (obj)
+ self.currentlevel.objects.remove (obj)
+
+ self.status_message = "You picked up %s" % obj.text
+ elif ans == 2:
+ # use the object according to its type
+ self.use_object (obj)
+ # if it cannot be picked up, try to use it anyway
+ else:
+ self.use_object (obj)
+
+ # this method uses the object first by calling the object use () method
+ # and then performing specific actions as necessary
+ def use_object (self, obj):
+ # if the object is a health potion
+ if isinstance (obj, gameobjects.HealthPotion) is True:
+ obj.use (self.butaba)
+ if obj in self.currentlevel.objects:
+ self.currentlevel.objects.remove (obj)
+ elif obj in self.butaba.inventory:
+ self.butaba.inventory.remove (obj)
+ self.status_message = "You gained health"
+ # if the object is a chest
+ elif isinstance (obj, gameobjects.Chest) is True:
+ # if chest is locked, try to open it
+ if obj.locked is True:
+ # try opening the chest with every item 9the use () function
+ # of the chest determines if item is a key anyway
+ fittedkey = None
+ for invobj in self.butaba.inventory:
+ fittedkey = obj.use (invobj)
+ # if a key fits
+ if fittedkey is not None:
+ break
+ # if no key found
+ if fittedkey is None:
+ self.status_message = "No key found to open %s" % obj.text
+ # chest successfully unlocked
+ else:
+ self.status_message = "You unlocked the %s" % obj.text
+ # remove the key from inventory
+ self.butaba.inventory.remove (fittedkey)
+ # display the contents of the chest
+ else:
+ pass
+ # if the object is gold coins
+ elif isinstance (obj, gameobjects.GoldCoins) is True:
+ obj.use (self.butaba)
+ self.status_message = "You picked up %d gold." % obj.value
+ # remove the gold coins after adding it to Butaba's gold
+ if obj in self.currentlevel.objects:
+ self.currentlevel.objects.remove (obj)
+ elif obj in self.butaba.inventory:
+ self.butaba.inventory.remove (obj)
+