1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 """
18 This module contains Inventory object definition.
19 """
20
21
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
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
64
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
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
91 li = [i for i in range(len(self.inventory)) if self.inventory[i][1]==objname]
92 if len(li) != 0:
93
94 self.inventory[li[0]][0] = self.inventory[li[0]][0] + quantity
95 else:
96
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
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
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
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