Mercurial > rinkhals
annotate gamelib/equipment.py @ 177:b400991ccce1
pedantic building renaming
author | Adrianna Pińska <adrianna.pinska@gmail.com> |
---|---|
date | Thu, 03 Sep 2009 23:23:45 +0000 |
parents | ff168162974e |
children | 37af9e5dd292 |
rev | line source |
---|---|
84 | 1 """Stuff for animals to use.""" |
2 | |
3 import random | |
99
f5d56688943b
Added background music support, and daytime and night time music (really animal sounds, not music)
David Fraser <davidf@sjsoft.com>
parents:
84
diff
changeset
|
4 import sound |
84 | 5 |
6 class Equipment(object): | |
109
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
7 IS_EQUIPMENT = True |
161
9b4213f6ea7f
improved equipment layers; unequip method on animal
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
158
diff
changeset
|
8 DRAW_LAYER = 0 |
109
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
9 |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
10 def __init__(self): |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
11 self._buy_price = self.BUY_PRICE |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
12 self._sell_price = self.SELL_PRICE |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
13 self._name = self.NAME |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
14 |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
15 def buy_price(self): |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
16 return self._buy_price |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
17 |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
18 def sell_price(self): |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
19 return self._sell_price |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
20 |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
21 def name(self): |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
22 return self._name |
84 | 23 |
24 class Weapon(Equipment): | |
109
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
25 IS_WEAPON = True |
161
9b4213f6ea7f
improved equipment layers; unequip method on animal
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
158
diff
changeset
|
26 DRAW_LAYER = 10 |
84 | 27 |
28 def in_range(self, gameboard, wielder, target): | |
29 """Can the lucky wielder hit the potentially unlucky target with this?""" | |
109
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
30 return wielder.pos.dist(target.pos) <= self.RANGE |
84 | 31 |
32 def hit(self, gameboard, wielder, target): | |
33 """Is the potentially unlucky target actually unlucky?""" | |
109
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
34 if hasattr(self, 'HIT_SOUND'): |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
35 sound.play_sound(self.HIT_SOUND) |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
36 roll = random.randint(1, 100) |
120
5621f5074c8d
Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
37 return roll > (100-self.BASE_HIT) + self.RANGE_MODIFIER*wielder.pos.dist(target.pos) |
109
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
38 |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
39 def place(self, animal): |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
40 for eq in animal.equipment: |
120
5621f5074c8d
Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
41 if is_weapon(eq): |
109
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
42 return False |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
43 return True |
84 | 44 |
45 class Rifle(Weapon): | |
109
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
46 NAME = "rifle" |
120
5621f5074c8d
Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
47 BUY_PRICE = 100 |
5621f5074c8d
Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
48 SELL_PRICE = 75 |
5621f5074c8d
Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
49 |
5621f5074c8d
Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
50 RANGE = 3 |
5621f5074c8d
Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
51 BASE_HIT = 55 |
5621f5074c8d
Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
52 RANGE_MODIFIER = 15 |
5621f5074c8d
Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
53 HIT_SOUND = "fire-rifle.ogg" |
5621f5074c8d
Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
54 |
146 | 55 CHICKEN_IMAGE_FILE = 'sprites/equip_rifle.png' |
56 | |
120
5621f5074c8d
Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
57 class Knife(Weapon): |
5621f5074c8d
Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
58 NAME = "knife" |
158
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
59 BUY_PRICE = 25 |
109
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
60 SELL_PRICE = 15 |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
61 |
120
5621f5074c8d
Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
62 RANGE = 1 |
5621f5074c8d
Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
63 BASE_HIT = 70 |
5621f5074c8d
Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
64 RANGE_MODIFIER = 0 |
84 | 65 |
146 | 66 CHICKEN_IMAGE_FILE = 'sprites/equip_knife.png' |
67 | |
158
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
68 class Armour(Equipment): |
174
ff168162974e
armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
167
diff
changeset
|
69 IS_ARMOUR = True |
161
9b4213f6ea7f
improved equipment layers; unequip method on animal
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
158
diff
changeset
|
70 DRAW_LAYER = 5 |
158
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
71 |
174
ff168162974e
armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
167
diff
changeset
|
72 def __init__(self): |
ff168162974e
armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
167
diff
changeset
|
73 super(Armour, self).__init__() |
ff168162974e
armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
167
diff
changeset
|
74 self.hitpoints = self.STARTING_HITPOINTS |
ff168162974e
armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
167
diff
changeset
|
75 |
158
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
76 def place(self, animal): |
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
77 """Give additional lives""" |
167
1d4d2202ef9f
one helmet and vest per chicken
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
161
diff
changeset
|
78 for eq in animal.equipment: |
1d4d2202ef9f
one helmet and vest per chicken
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
161
diff
changeset
|
79 if eq.NAME == self.NAME: |
1d4d2202ef9f
one helmet and vest per chicken
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
161
diff
changeset
|
80 return False |
158
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
81 return True |
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
82 |
174
ff168162974e
armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
167
diff
changeset
|
83 def survive_damage(self): |
ff168162974e
armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
167
diff
changeset
|
84 self.hitpoints -= 1 |
ff168162974e
armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
167
diff
changeset
|
85 if self.hitpoints > 0: |
ff168162974e
armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
167
diff
changeset
|
86 self._sell_price = int(self._sell_price*self.hitpoints/float(self.hitpoints+1)) |
ff168162974e
armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
167
diff
changeset
|
87 return True |
ff168162974e
armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
167
diff
changeset
|
88 return False |
ff168162974e
armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
167
diff
changeset
|
89 |
158
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
90 class Helmet(Armour): |
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
91 NAME = "helmet" |
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
92 BUY_PRICE = 25 |
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
93 SELL_PRICE = 15 |
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
94 |
174
ff168162974e
armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
167
diff
changeset
|
95 STARTING_HITPOINTS = 1 |
158
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
96 |
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
97 CHICKEN_IMAGE_FILE = 'sprites/helmet.png' |
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
98 |
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
99 class Kevlar(Armour): |
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
100 NAME = "kevlar" |
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
101 BUY_PRICE = 100 |
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
102 SELL_PRICE = 75 |
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
103 |
174
ff168162974e
armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
167
diff
changeset
|
104 STARTING_HITPOINTS = 2 |
158
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
105 |
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
106 CHICKEN_IMAGE_FILE = 'sprites/kevlar.png' |
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
107 |
109
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
108 def is_equipment(obj): |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
109 """Return true if obj is a build class.""" |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
110 return getattr(obj, "IS_EQUIPMENT", False) and hasattr(obj, "NAME") |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
111 |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
112 def is_weapon(obj): |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
113 return is_equipment(obj) and getattr(obj, 'IS_WEAPON', False) |
84 | 114 |
174
ff168162974e
armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
167
diff
changeset
|
115 def is_armour(obj): |
ff168162974e
armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
167
diff
changeset
|
116 return is_equipment(obj) and getattr(obj, 'IS_ARMOUR', False) |
ff168162974e
armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
167
diff
changeset
|
117 |
109
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
118 EQUIPMENT = [] |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
119 for name in dir(): |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
120 obj = eval(name) |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
121 try: |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
122 if is_equipment(obj): |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
123 EQUIPMENT.append(obj) |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
124 except TypeError: |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
125 pass |