annotate mamba/snake.py @ 119:119c0fb758c2

Move key handling into GameWidget and GameWidget into widgets.game.
author Simon Cross <hodgestar@gmail.com>
date Sun, 11 Sep 2011 20:56:13 +0200
parents 1b9b17eb896b
children 45dd79e9ba1b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
78
b1019923cb12 Direction control for snake.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
1 """The player snake object."""
b1019923cb12 Direction control for snake.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
2
110
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
3 from pygame.sprite import Group
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
4
79
f602a8c3d173 Fix bugs. Stubbed out get_entry for now.
Simon Cross <hodgestar@gmail.com>
parents: 78
diff changeset
5 from mamba.sprites import BaseSprite
98
7ce2d2d8381a Refactor BaseSprite.
Simon Cross <hodgestar@gmail.com>
parents: 79
diff changeset
6 from mamba import mutators
78
b1019923cb12 Direction control for snake.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
7
b1019923cb12 Direction control for snake.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
8
110
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
9 class Snake(object):
78
b1019923cb12 Direction control for snake.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
10
110
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
11 UP, DOWN, LEFT, RIGHT = [(0, -1), (0, 1), (-1, 0), (1, 0)]
78
b1019923cb12 Direction control for snake.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
12
b1019923cb12 Direction control for snake.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
13 def __init__(self, tile_pos, orientation):
110
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
14 self.segments = self.create_segments(tile_pos, orientation)
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
15 self.segment_group = Group()
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
16 self.segment_group.add(*self.segments)
78
b1019923cb12 Direction control for snake.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
17 self.set_orientation(orientation)
b1019923cb12 Direction control for snake.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
18
110
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
19 head = property(fget=lambda self: self.segments[0])
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
20 tail = property(fget=lambda self: self.segments[-1])
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
21
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
22 def create_segments(self, tile_pos, orientation):
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
23 x, y = tile_pos
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
24 dx, dy = orientation
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
25 return [Head((x, y)),
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
26 Body((x + dx, y + dy)),
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
27 Tail((x + 2 * dx, y + 2 * dy)),
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
28 ]
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
29
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
30 def draw(self, surface):
111
0c1005c76c87 More worldify.
Simon Cross <hodgestar@gmail.com>
parents: 110
diff changeset
31 self.segment_group.draw(surface)
98
7ce2d2d8381a Refactor BaseSprite.
Simon Cross <hodgestar@gmail.com>
parents: 79
diff changeset
32
119
119c0fb758c2 Move key handling into GameWidget and GameWidget into widgets.game.
Simon Cross <hodgestar@gmail.com>
parents: 118
diff changeset
33 def update(self):
119c0fb758c2 Move key handling into GameWidget and GameWidget into widgets.game.
Simon Cross <hodgestar@gmail.com>
parents: 118
diff changeset
34 pass
119c0fb758c2 Move key handling into GameWidget and GameWidget into widgets.game.
Simon Cross <hodgestar@gmail.com>
parents: 118
diff changeset
35
78
b1019923cb12 Direction control for snake.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
36 def set_orientation(self, orientation):
119
119c0fb758c2 Move key handling into GameWidget and GameWidget into widgets.game.
Simon Cross <hodgestar@gmail.com>
parents: 118
diff changeset
37 self.orientation = orientation
110
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
38 #self.orientation = orientation
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
39 #for segment in self.segments:
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
40 # segment.set_orientation(self)
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
41 print orientation
98
7ce2d2d8381a Refactor BaseSprite.
Simon Cross <hodgestar@gmail.com>
parents: 79
diff changeset
42
7ce2d2d8381a Refactor BaseSprite.
Simon Cross <hodgestar@gmail.com>
parents: 79
diff changeset
43
110
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
44 class Segment(BaseSprite):
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
45
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
46 def __init__(self, image_name, tile_pos):
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
47 super(Segment, self).__init__()
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
48 image_name = "/".join(["snake", image_name])
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
49 self._images = {}
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
50 for orientation, muts in [
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
51 (Snake.RIGHT, (mutators.RIGHT,)),
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
52 (Snake.LEFT, (mutators.LEFT,)),
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
53 (Snake.UP, (mutators.UP,)),
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
54 (Snake.DOWN, (mutators.DOWN,)),
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
55 ]:
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
56 self._images[orientation] = self.load_image(image_name, muts)
118
1b9b17eb896b Change default snake orientation to UP for now.
Simon Cross <hodgestar@gmail.com>
parents: 111
diff changeset
57 self.set_orientation(Snake.UP)
110
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
58 self.set_tile_pos(tile_pos)
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
59
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
60 def set_orientation(self, orientation):
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
61 self.image = self._images[orientation]
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
62
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
63
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
64 class Head(Segment):
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
65 def __init__(self, tile_pos):
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
66 super(Head, self).__init__("snake-head-mouth-open-r", tile_pos)
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
67
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
68
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
69 class Body(Segment):
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
70 def __init__(self, tile_pos):
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
71 super(Body, self).__init__("snake-body-r", tile_pos)
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
72
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
73
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
74 class Tail(Segment):
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
75 def __init__(self, tile_pos):
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 98
diff changeset
76 super(Tail, self).__init__("snake-tail-r", tile_pos)