annotate gamelib/animal.py @ 47:be2496df2368

Add egg image to egg sprite.
author Simon Cross <hodgestar@gmail.com>
date Mon, 31 Aug 2009 16:57:39 +0000
parents 7e884084e7b1
children f20dd3dcb118
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
25
6d6ab0c1479d Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
1 """Class for the various animals in the game"""
6d6ab0c1479d Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
2
6d6ab0c1479d Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
3 from pgu.vid import Sprite
6d6ab0c1479d Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
4
44
7e884084e7b1 Move animal sprites to imagecache.
Simon Cross <hodgestar@gmail.com>
parents: 38
diff changeset
5 import imagecache
25
6d6ab0c1479d Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
6
6d6ab0c1479d Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
7 class Animal(Sprite):
28
ac3a74352b74 Change animal.py to four space indents.
Simon Cross <hodgestar@gmail.com>
parents: 25
diff changeset
8 """Base class for animals"""
25
6d6ab0c1479d Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
9
28
ac3a74352b74 Change animal.py to four space indents.
Simon Cross <hodgestar@gmail.com>
parents: 25
diff changeset
10 def __init__(self, image, pos):
38
03121c89d5fd Make the secret foxes really secret
Neil Muller <drnlmuller@gmail.com>
parents: 32
diff changeset
11 # Create the animal somewhere far off screen
03121c89d5fd Make the secret foxes really secret
Neil Muller <drnlmuller@gmail.com>
parents: 32
diff changeset
12 Sprite.__init__(self, image, (-1000, -1000))
28
ac3a74352b74 Change animal.py to four space indents.
Simon Cross <hodgestar@gmail.com>
parents: 25
diff changeset
13 self.pos = pos
25
6d6ab0c1479d Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
14
28
ac3a74352b74 Change animal.py to four space indents.
Simon Cross <hodgestar@gmail.com>
parents: 25
diff changeset
15 def loop(self, tv, _sprite):
ac3a74352b74 Change animal.py to four space indents.
Simon Cross <hodgestar@gmail.com>
parents: 25
diff changeset
16 ppos = tv.tile_to_view(self.pos)
ac3a74352b74 Change animal.py to four space indents.
Simon Cross <hodgestar@gmail.com>
parents: 25
diff changeset
17 self.rect.x = ppos[0]
ac3a74352b74 Change animal.py to four space indents.
Simon Cross <hodgestar@gmail.com>
parents: 25
diff changeset
18 self.rect.y = ppos[1]
25
6d6ab0c1479d Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
19
28
ac3a74352b74 Change animal.py to four space indents.
Simon Cross <hodgestar@gmail.com>
parents: 25
diff changeset
20 def move(self, state):
ac3a74352b74 Change animal.py to four space indents.
Simon Cross <hodgestar@gmail.com>
parents: 25
diff changeset
21 """Given the game state, return a new position for the object"""
ac3a74352b74 Change animal.py to four space indents.
Simon Cross <hodgestar@gmail.com>
parents: 25
diff changeset
22 # Default is not to move
ac3a74352b74 Change animal.py to four space indents.
Simon Cross <hodgestar@gmail.com>
parents: 25
diff changeset
23 return self.pos
25
6d6ab0c1479d Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
24
6d6ab0c1479d Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
25 class Chicken(Animal):
28
ac3a74352b74 Change animal.py to four space indents.
Simon Cross <hodgestar@gmail.com>
parents: 25
diff changeset
26 """A chicken"""
25
6d6ab0c1479d Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
27
28
ac3a74352b74 Change animal.py to four space indents.
Simon Cross <hodgestar@gmail.com>
parents: 25
diff changeset
28 def __init__(self, pos):
44
7e884084e7b1 Move animal sprites to imagecache.
Simon Cross <hodgestar@gmail.com>
parents: 38
diff changeset
29 image = imagecache.load_image('sprites/chkn.png')
28
ac3a74352b74 Change animal.py to four space indents.
Simon Cross <hodgestar@gmail.com>
parents: 25
diff changeset
30 Animal.__init__(self, image, pos)
25
6d6ab0c1479d Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
31
28
ac3a74352b74 Change animal.py to four space indents.
Simon Cross <hodgestar@gmail.com>
parents: 25
diff changeset
32 def move(self, gameboard):
ac3a74352b74 Change animal.py to four space indents.
Simon Cross <hodgestar@gmail.com>
parents: 25
diff changeset
33 """A free chicken will move away from other free chickens"""
ac3a74352b74 Change animal.py to four space indents.
Simon Cross <hodgestar@gmail.com>
parents: 25
diff changeset
34 return self.pos
25
6d6ab0c1479d Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
35
6d6ab0c1479d Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
36 class Egg(Animal):
28
ac3a74352b74 Change animal.py to four space indents.
Simon Cross <hodgestar@gmail.com>
parents: 25
diff changeset
37 """An egg"""
25
6d6ab0c1479d Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
38
47
be2496df2368 Add egg image to egg sprite.
Simon Cross <hodgestar@gmail.com>
parents: 44
diff changeset
39 def __init__(self, pos):
be2496df2368 Add egg image to egg sprite.
Simon Cross <hodgestar@gmail.com>
parents: 44
diff changeset
40 image = imagecache.load_image('sprites/egg.png')
be2496df2368 Add egg image to egg sprite.
Simon Cross <hodgestar@gmail.com>
parents: 44
diff changeset
41 Animal.__init__(self, image, pos)
be2496df2368 Add egg image to egg sprite.
Simon Cross <hodgestar@gmail.com>
parents: 44
diff changeset
42
28
ac3a74352b74 Change animal.py to four space indents.
Simon Cross <hodgestar@gmail.com>
parents: 25
diff changeset
43 # Eggs don't move
25
6d6ab0c1479d Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
44
6d6ab0c1479d Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
45 class Fox(Animal):
28
ac3a74352b74 Change animal.py to four space indents.
Simon Cross <hodgestar@gmail.com>
parents: 25
diff changeset
46 """A fox"""
25
6d6ab0c1479d Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
47
28
ac3a74352b74 Change animal.py to four space indents.
Simon Cross <hodgestar@gmail.com>
parents: 25
diff changeset
48 def __init__(self, pos):
44
7e884084e7b1 Move animal sprites to imagecache.
Simon Cross <hodgestar@gmail.com>
parents: 38
diff changeset
49 image = imagecache.load_image('sprites/fox.png')
29
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
50 self.full = False
28
ac3a74352b74 Change animal.py to four space indents.
Simon Cross <hodgestar@gmail.com>
parents: 25
diff changeset
51 Animal.__init__(self, image, pos)
ac3a74352b74 Change animal.py to four space indents.
Simon Cross <hodgestar@gmail.com>
parents: 25
diff changeset
52
ac3a74352b74 Change animal.py to four space indents.
Simon Cross <hodgestar@gmail.com>
parents: 25
diff changeset
53 def move(self, gameboard):
ac3a74352b74 Change animal.py to four space indents.
Simon Cross <hodgestar@gmail.com>
parents: 25
diff changeset
54 """Foxes will aim to move towards the closest henhouse or free
25
6d6ab0c1479d Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
55 chicken"""
29
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
56 if self.full:
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
57 return
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
58 # Find the closest chicken
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
59 min_dist = 999
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
60 min_vec = None
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
61 closest = None
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
62 for chicken in gameboard.chickens:
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
63 vec = (chicken.pos[0] - self.pos[0], chicken.pos[1] - self.pos[1])
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
64 dist = abs(vec[0]) + abs(vec[1])
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
65 if dist < min_dist:
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
66 min_dist = dist
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
67 min_vec = vec
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
68 closest = chicken
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
69 xpos, ypos = self.pos
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
70 if min_vec[0] < 0:
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
71 xpos -= 1
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
72 elif min_vec[0] > 0:
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
73 xpos += 1
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
74 if min_vec[1] < 0:
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
75 ypos -= 1
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
76 elif min_vec[1] > 0:
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
77 ypos += 1
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
78 if closest.pos == self.pos:
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
79 gameboard.remove_chicken(closest)
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
80 self.full = True
32
f5f74f1f3a0b Discourage foxes from stepping on each other
Neil Muller <drnlmuller@gmail.com>
parents: 29
diff changeset
81 for fox in gameboard.foxes:
f5f74f1f3a0b Discourage foxes from stepping on each other
Neil Muller <drnlmuller@gmail.com>
parents: 29
diff changeset
82 if fox is not self:
f5f74f1f3a0b Discourage foxes from stepping on each other
Neil Muller <drnlmuller@gmail.com>
parents: 29
diff changeset
83 if fox.pos[0] == xpos and fox.pos[1] == ypos:
f5f74f1f3a0b Discourage foxes from stepping on each other
Neil Muller <drnlmuller@gmail.com>
parents: 29
diff changeset
84 if xpos != self.pos[0]:
f5f74f1f3a0b Discourage foxes from stepping on each other
Neil Muller <drnlmuller@gmail.com>
parents: 29
diff changeset
85 xpos = self.pos[0]
f5f74f1f3a0b Discourage foxes from stepping on each other
Neil Muller <drnlmuller@gmail.com>
parents: 29
diff changeset
86 elif ypos != self.pos[1]:
f5f74f1f3a0b Discourage foxes from stepping on each other
Neil Muller <drnlmuller@gmail.com>
parents: 29
diff changeset
87 ypos = self.pos[1]
f5f74f1f3a0b Discourage foxes from stepping on each other
Neil Muller <drnlmuller@gmail.com>
parents: 29
diff changeset
88 else: # We move a step away
f5f74f1f3a0b Discourage foxes from stepping on each other
Neil Muller <drnlmuller@gmail.com>
parents: 29
diff changeset
89 xpos += 1
29
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
90 self.pos = (xpos, ypos)
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
91
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
92