Mercurial > mamba
annotate mamba/snake.py @ 125:625b22f92efa
the snake is green
author | Adrianna Pińska <adrianna.pinska@gmail.com> |
---|---|
date | Sun, 11 Sep 2011 21:35:39 +0200 |
parents | 45dd79e9ba1b |
children | 646bb61c9ea6 |
rev | line source |
---|---|
78 | 1 """The player snake object.""" |
2 | |
110 | 3 from pygame.sprite import Group |
125
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
4 from pygame.locals import BLEND_MULT |
110 | 5 |
79
f602a8c3d173
Fix bugs. Stubbed out get_entry for now.
Simon Cross <hodgestar@gmail.com>
parents:
78
diff
changeset
|
6 from mamba.sprites import BaseSprite |
98 | 7 from mamba import mutators |
78 | 8 |
9 | |
110 | 10 class Snake(object): |
78 | 11 |
110 | 12 UP, DOWN, LEFT, RIGHT = [(0, -1), (0, 1), (-1, 0), (1, 0)] |
78 | 13 |
14 def __init__(self, tile_pos, orientation): | |
110 | 15 self.segments = self.create_segments(tile_pos, orientation) |
16 self.segment_group = Group() | |
17 self.segment_group.add(*self.segments) | |
78 | 18 self.set_orientation(orientation) |
19 | |
110 | 20 head = property(fget=lambda self: self.segments[0]) |
21 tail = property(fget=lambda self: self.segments[-1]) | |
22 | |
23 def create_segments(self, tile_pos, orientation): | |
24 x, y = tile_pos | |
25 dx, dy = orientation | |
26 return [Head((x, y)), | |
27 Body((x + dx, y + dy)), | |
28 Tail((x + 2 * dx, y + 2 * dy)), | |
29 ] | |
30 | |
31 def draw(self, surface): | |
111 | 32 self.segment_group.draw(surface) |
98 | 33 |
122
45dd79e9ba1b
Rudimentary FPS and clock ticking.
Simon Cross <hodgestar@gmail.com>
parents:
119
diff
changeset
|
34 def update(self, dt): |
119
119c0fb758c2
Move key handling into GameWidget and GameWidget into widgets.game.
Simon Cross <hodgestar@gmail.com>
parents:
118
diff
changeset
|
35 pass |
119c0fb758c2
Move key handling into GameWidget and GameWidget into widgets.game.
Simon Cross <hodgestar@gmail.com>
parents:
118
diff
changeset
|
36 |
78 | 37 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
|
38 self.orientation = orientation |
110 | 39 #self.orientation = orientation |
40 #for segment in self.segments: | |
41 # segment.set_orientation(self) | |
42 print orientation | |
98 | 43 |
44 | |
110 | 45 class Segment(BaseSprite): |
46 | |
125
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
47 GREEN = mutators.Overlay("tiles/common/snake/green.png", BLEND_MULT) |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
48 BLUE = mutators.BLUE |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
49 RED = mutators.RED |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
50 YELLOW = mutators.YELLOW |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
51 |
110 | 52 def __init__(self, image_name, tile_pos): |
53 super(Segment, self).__init__() | |
125
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
54 self._base_image = "/".join(["snake", image_name]) |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
55 self._orientation = Snake.UP |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
56 |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
57 self.make_images(self.GREEN) |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
58 self.update_image() |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
59 self.set_tile_pos(tile_pos) |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
60 |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
61 def make_images(self, colour_overlay): |
110 | 62 self._images = {} |
63 for orientation, muts in [ | |
64 (Snake.RIGHT, (mutators.RIGHT,)), | |
65 (Snake.LEFT, (mutators.LEFT,)), | |
66 (Snake.UP, (mutators.UP,)), | |
67 (Snake.DOWN, (mutators.DOWN,)), | |
68 ]: | |
125
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
69 self._images[orientation] = self.load_image(self._base_image, muts + (colour_overlay,)) |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
70 |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
71 def update_image(self): |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
72 self.image = self._images[self._orientation] |
110 | 73 |
74 def set_orientation(self, orientation): | |
125
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
75 self._orientation = orientation |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
76 self.update_image() |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
77 |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
78 def set_colour(self, colour_overlay): |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
79 self.make_images(colour_overlay) |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
80 self.update_image() |
110 | 81 |
82 | |
83 class Head(Segment): | |
84 def __init__(self, tile_pos): | |
85 super(Head, self).__init__("snake-head-mouth-open-r", tile_pos) | |
86 | |
87 | |
88 class Body(Segment): | |
89 def __init__(self, tile_pos): | |
90 super(Body, self).__init__("snake-body-r", tile_pos) | |
91 | |
92 | |
93 class Tail(Segment): | |
94 def __init__(self, tile_pos): | |
95 super(Tail, self).__init__("snake-tail-r", tile_pos) |