Module bzInventory
[frames] | no frames]

Source Code for Module bzInventory

  1  ##bzInventory.py defines Inventory class. 
  2  ##Copyright (C) 2006  Jean-Baptiste PERIN 
  3  ## 
  4  ##This program is free software; you can redistribute it and/or 
  5  ##modify it under the terms of the GNU General Public License 
  6  ##as published by the Free Software Foundation; either version 2 
  7  ##of the License, or (at your option) any later version. 
  8  ## 
  9  ##This program is distributed in the hope that it will be useful, 
 10  ##but WITHOUT ANY WARRANTY; without even the implied warranty of 
 11  ##MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 12  ##GNU General Public License for more details. 
 13  ## 
 14  ##You should have received a copy of the GNU General Public License 
 15  ##along with this program; if not, write to the Free Software 
 16  ##Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. 
 17  """ 
 18   This module contains Inventory object definition. 
 19  """ 
 20   
 21   
22 -class bzInventory:
23 """ 24 This object is a container for all object owned by a player. 25 It can be used to retrieve names of object collected by the player or count number of element of a given type. 26 27 Exemple:: 28 # initialisation 29 inventory = bzInventory() 30 inventory.add (100, 'Health') 31 32 # player grab a health potion pack 33 inventory.add (50, 'Health.000') 34 print "Player has %d health points"%(inventory.count ('Health')) 35 36 # player suddenly get a bomb in his ass 37 inventory.add (-120, 'Health') 38 print "Player now has %d health points"%(inventory.count ('Health')) 39 40 #display the detailled content of the player inventory 41 print "player inventory is: ",inventory.getContent() 42 43 44 45 @ivar inventory: a list of all object contained in the inventory and the associated quantity. 46 @type inventory: list of [integer, string]. 47 """ 48
49 - def __init__ (self, content = None):
50 """ 51 Content of inventory can be initialized. Default content is empty(None). 52 @param content: List of [quantity, object_name] 53 @type content: List of [integer, string] 54 @return: N/A 55 @rtype: L{bzInventory} 56 """ 57 self.inventory = [] 58 if content != None: 59 for inp in content: 60 self.inventory.append(inp)
61
62 - def __repr__ (self):
63 return ''
64
65 - def __str__ (self):
66 return ''
67
68 - def add(self, quantity, objname):
69 """ 70 Add a 'quantity' number of object of type 'objname' in the inventory. 71 If the 'quantity' number is negative, quantities of objects named 'objname' or 'objname.xxx' are decremented until 'quantity' elements has been removed or there's no left element of that type in the inventory. 72 @param quantity: the number of added element. 73 @type quantity: integer 74 @param objname: the name of the object. 75 @type objname: string 76 @return: the number of object of type 'objname' in the inventory. 77 @rtype: integer. 78 """ 79 #if we have to decrease the number 80 if quantity < 0: 81 remain2Bremoved = abs(quantity) 82 83 li = [i for i in range(len(self.inventory)) if (self.inventory[i][1].startswith("%s."%objname) or self.inventory[i][1]==objname)] 84 for ligne in li: 85 if (remain2Bremoved > 0) and (self.inventory[ligne][0] > 0): 86 decrement = min (self.inventory[ligne][0], remain2Bremoved) 87 self.inventory[ligne][0] = self.inventory[ligne][0] - decrement 88 remain2Bremoved = remain2Bremoved - decrement 89 else: 90 #if we already have such an object in inventory 91 li = [i for i in range(len(self.inventory)) if self.inventory[i][1]==objname] 92 if len(li) != 0: 93 # we only add the given quantity 94 self.inventory[li[0]][0] = self.inventory[li[0]][0] + quantity 95 else: 96 #we create an entry for this object type 97 self.inventory.append([quantity, objname])
98
99 - def count (self, objname):
100 """ 101 Return the number of element in the inventory of type 'objname' 102 @param objname: the name of the object. 103 @type objname: string 104 @return: the number of object of type 'objname' in the inventory. 105 @rtype: integer 106 """ 107 nb_elem = 0 108 # count direct object 109 li = [i for i in range(len(self.inventory)) if self.inventory[i][1]==objname] 110 if len(li) != 0: 111 nb_elem = nb_elem + self.inventory[li[0]][0] 112 # count Variable increment 113 li = [i for i in range(len(self.inventory)) if self.inventory[i][1].startswith("%s."%objname)] 114 if len(li) != 0: 115 for ligne in li: 116 nb_elem = nb_elem + self.inventory[ligne][0] 117 return nb_elem
118
119 - def getContent(self):
120 """ 121 Returns the content of the inventory. 122 @return: the number of object of type 'objname' in the inventory. 123 @rtype: list of [integer, string] 124 """ 125 return (self.inventory)
126 127 if __name__ == "__main__": 128 #print "coucou" 129 inventory = bzInventory() 130 inventory.add (1, 'Lamp') 131 inventory.add (100, 'Health') 132 inventory.add (50, 'Health.000') 133 print inventory.count ('Health') 134 inventory.add (-120, 'Health') 135 print inventory.getContent() 136 print inventory.count ('Health') 137 del inventory 138