annotate gamelib/animal.py @ 44:7e884084e7b1

Move animal sprites to imagecache.
author Simon Cross <hodgestar@gmail.com>
date Mon, 31 Aug 2009 16:49:59 +0000
parents 03121c89d5fd
children be2496df2368
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
28
ac3a74352b74 Change animal.py to four space indents.
Simon Cross <hodgestar@gmail.com>
parents: 25
diff changeset
39 # Eggs don't move
25
6d6ab0c1479d Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
40
6d6ab0c1479d Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
41 class Fox(Animal):
28
ac3a74352b74 Change animal.py to four space indents.
Simon Cross <hodgestar@gmail.com>
parents: 25
diff changeset
42 """A fox"""
25
6d6ab0c1479d Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
43
28
ac3a74352b74 Change animal.py to four space indents.
Simon Cross <hodgestar@gmail.com>
parents: 25
diff changeset
44 def __init__(self, pos):
44
7e884084e7b1 Move animal sprites to imagecache.
Simon Cross <hodgestar@gmail.com>
parents: 38
diff changeset
45 image = imagecache.load_image('sprites/fox.png')
29
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
46 self.full = False
28
ac3a74352b74 Change animal.py to four space indents.
Simon Cross <hodgestar@gmail.com>
parents: 25
diff changeset
47 Animal.__init__(self, image, pos)
ac3a74352b74 Change animal.py to four space indents.
Simon Cross <hodgestar@gmail.com>
parents: 25
diff changeset
48
ac3a74352b74 Change animal.py to four space indents.
Simon Cross <hodgestar@gmail.com>
parents: 25
diff changeset
49 def move(self, gameboard):
ac3a74352b74 Change animal.py to four space indents.
Simon Cross <hodgestar@gmail.com>
parents: 25
diff changeset
50 """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
51 chicken"""
29
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
52 if self.full:
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
53 return
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
54 # Find the closest chicken
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
55 min_dist = 999
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
56 min_vec = None
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
57 closest = None
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
58 for chicken in gameboard.chickens:
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
59 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
60 dist = abs(vec[0]) + abs(vec[1])
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
61 if dist < min_dist:
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
62 min_dist = dist
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
63 min_vec = vec
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
64 closest = chicken
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
65 xpos, ypos = self.pos
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
66 if min_vec[0] < 0:
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
67 xpos -= 1
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
68 elif min_vec[0] > 0:
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
69 xpos += 1
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
70 if min_vec[1] < 0:
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
71 ypos -= 1
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
72 elif min_vec[1] > 0:
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
73 ypos += 1
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
74 if closest.pos == self.pos:
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
75 gameboard.remove_chicken(closest)
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
76 self.full = True
32
f5f74f1f3a0b Discourage foxes from stepping on each other
Neil Muller <drnlmuller@gmail.com>
parents: 29
diff changeset
77 for fox in gameboard.foxes:
f5f74f1f3a0b Discourage foxes from stepping on each other
Neil Muller <drnlmuller@gmail.com>
parents: 29
diff changeset
78 if fox is not self:
f5f74f1f3a0b Discourage foxes from stepping on each other
Neil Muller <drnlmuller@gmail.com>
parents: 29
diff changeset
79 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
80 if xpos != self.pos[0]:
f5f74f1f3a0b Discourage foxes from stepping on each other
Neil Muller <drnlmuller@gmail.com>
parents: 29
diff changeset
81 xpos = self.pos[0]
f5f74f1f3a0b Discourage foxes from stepping on each other
Neil Muller <drnlmuller@gmail.com>
parents: 29
diff changeset
82 elif ypos != self.pos[1]:
f5f74f1f3a0b Discourage foxes from stepping on each other
Neil Muller <drnlmuller@gmail.com>
parents: 29
diff changeset
83 ypos = self.pos[1]
f5f74f1f3a0b Discourage foxes from stepping on each other
Neil Muller <drnlmuller@gmail.com>
parents: 29
diff changeset
84 else: # We move a step away
f5f74f1f3a0b Discourage foxes from stepping on each other
Neil Muller <drnlmuller@gmail.com>
parents: 29
diff changeset
85 xpos += 1
29
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
86 self.pos = (xpos, ypos)
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
87
2e88c680672c Minimal fox raid logic
Neil Muller <drnlmuller@gmail.com>
parents: 28
diff changeset
88