X-Git-Url: https://harishankar.org/repos/?p=butaba-adventures.git;a=blobdiff_plain;f=maingame.py;fp=maingame.py;h=b894164ffe187d26516d2180c591d133664022b1;hp=c68e2151cb4a86c1cca2844d1a723e8d65483a56;hb=f4b468331db23412a3d8195e8ca2650093411697;hpb=4b6e952b476861c8979dc395781964099285a4c6 diff --git a/maingame.py b/maingame.py index c68e215..b894164 100644 --- a/maingame.py +++ b/maingame.py @@ -35,9 +35,10 @@ class MainGame: self.img_bulb.set_colorkey (pygame.Color (0, 255, 0)) self.img_lightning = pygame.image.load (os.path.join ("objects", "lightning.png")).convert () self.img_lightning.set_colorkey (pygame.Color (0, 255, 0)) - self.img_key = pygame.image.load (os.path.join ("objects", "key.png")).convert () self.img_key.set_colorkey (pygame.Color (0, 255, 0)) + self.img_chest = pygame.image.load (os.path.join ("objects", "chest.png")).convert () + self.img_chest.set_colorkey (pygame.Color (0, 255, 0)) # initialize player graphics self.img_butabafront = pygame.image.load (os.path.join ("sprite", "butaba-front.png")).convert () @@ -57,16 +58,18 @@ class MainGame: # set the status message self.status_message = "Game started" - self.butaba = butaba.Butaba (5,0, butaba.Butaba.RIGHT) + self.butaba = butaba.Butaba (5,0, butaba.Butaba.RIGHT, 75) # set up the levels and their interactions def setup_levels (self): - self.level1 = level.Level (level.LEVEL_1, - objects = [gameobjects.HealthPotion (4, 3, self.img_redpotion) ]) + self.level1 = level.Level (level.LEVEL_1) self.level1e = level.Level (level.LEVEL_1E, objects = [ gameobjects.Key (4, 3, "a chest key", self.img_key, level.KEY_CHEST1), - gameobjects.Key (4, 3, "a room key", self.img_key, level.KEY_ROOM1)] + gameobjects.Key (4, 3, "a room key", self.img_key, level.KEY_ROOM1), + gameobjects.HealthPotion (4, 2, self.img_redpotion), + gameobjects.Chest (2, 5, "chest", self.img_chest, level.KEY_CHEST1, True) + ] ) self.level1.levelright = self.level1e self.level1e.levelleft = self.level1 @@ -193,10 +196,10 @@ class MainGame: # picking up an object def pickup_object (self, obj): - # only if object can be picked up, pick it up + # 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, ["Carry", "Ignore"], self.img_menu) - # if the answer is "take" + 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: @@ -207,7 +210,44 @@ class MainGame: 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) + self.currentlevel.objects.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 def move_butaba_left (self): # clear any status messages