Mercurial > mamba
annotate mamba/snake.py @ 131:513037749086
eye
author | Adrianna Pińska <adrianna.pinska@gmail.com> |
---|---|
date | Sun, 11 Sep 2011 22:28:13 +0200 |
parents | c533b7c9cbe8 |
children | 2c643ec8dc4e |
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 |
129 | 5 from pygame.draw import lines |
110 | 6 |
128 | 7 from mamba.sprites import BaseSprite, tile_sizify |
98 | 8 from mamba import mutators |
78 | 9 |
10 | |
110 | 11 class Snake(object): |
78 | 12 |
110 | 13 UP, DOWN, LEFT, RIGHT = [(0, -1), (0, 1), (-1, 0), (1, 0)] |
129 | 14 SPEED = 60.0 # pixels / s |
78 | 15 |
16 def __init__(self, tile_pos, orientation): | |
110 | 17 self.segments = self.create_segments(tile_pos, orientation) |
18 self.segment_group = Group() | |
19 self.segment_group.add(*self.segments) | |
78 | 20 self.set_orientation(orientation) |
128 | 21 self.pos = tile_sizify(tile_pos) |
129 | 22 self.length = 60.0 |
78 | 23 |
110 | 24 head = property(fget=lambda self: self.segments[0]) |
25 tail = property(fget=lambda self: self.segments[-1]) | |
26 | |
27 def create_segments(self, tile_pos, orientation): | |
28 x, y = tile_pos | |
29 dx, dy = orientation | |
30 return [Head((x, y)), | |
31 Body((x + dx, y + dy)), | |
32 Tail((x + 2 * dx, y + 2 * dy)), | |
33 ] | |
34 | |
35 def draw(self, surface): | |
128 | 36 # self.segment_group.draw(surface) |
129 | 37 (x, y), l = self.pos, self.length |
38 lines(surface, (0, 0, 255), False, [(x, y), (x + l, y)], 20) | |
98 | 39 |
122
45dd79e9ba1b
Rudimentary FPS and clock ticking.
Simon Cross <hodgestar@gmail.com>
parents:
119
diff
changeset
|
40 def update(self, dt): |
128 | 41 x, y = self.pos |
42 ox, oy = self.orientation | |
43 ds = self.SPEED * dt | |
44 self.pos = (x + ox * ds, y + oy * ds) | |
119
119c0fb758c2
Move key handling into GameWidget and GameWidget into widgets.game.
Simon Cross <hodgestar@gmail.com>
parents:
118
diff
changeset
|
45 |
78 | 46 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
|
47 self.orientation = orientation |
110 | 48 #self.orientation = orientation |
49 #for segment in self.segments: | |
50 # segment.set_orientation(self) | |
98 | 51 |
52 | |
110 | 53 class Segment(BaseSprite): |
54 | |
125
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
55 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
|
56 BLUE = mutators.BLUE |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
57 RED = mutators.RED |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
58 YELLOW = mutators.YELLOW |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
59 |
131 | 60 _detail_mutators = () |
61 | |
110 | 62 def __init__(self, image_name, tile_pos): |
63 super(Segment, self).__init__() | |
125
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
64 self._base_image = "/".join(["snake", image_name]) |
131 | 65 self._colour_overlay = self.GREEN |
125
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
66 self._orientation = Snake.UP |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
67 |
131 | 68 self.make_images() |
125
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
69 self.update_image() |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
70 self.set_tile_pos(tile_pos) |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
71 |
131 | 72 def make_images(self): |
110 | 73 self._images = {} |
74 for orientation, muts in [ | |
75 (Snake.RIGHT, (mutators.RIGHT,)), | |
76 (Snake.LEFT, (mutators.LEFT,)), | |
77 (Snake.UP, (mutators.UP,)), | |
78 (Snake.DOWN, (mutators.DOWN,)), | |
79 ]: | |
131 | 80 all_muts = (self._colour_overlay,) + self._detail_mutators + muts |
81 self._images[orientation] = self.load_image(self._base_image, all_muts) | |
125
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
82 |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
83 def update_image(self): |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
84 self.image = self._images[self._orientation] |
110 | 85 |
86 def set_orientation(self, orientation): | |
125
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
87 self._orientation = orientation |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
88 self.update_image() |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
89 |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
90 def set_colour(self, colour_overlay): |
131 | 91 self._colour_overlay = colour_overlay |
92 self.make_images() | |
125
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
93 self.update_image() |
110 | 94 |
95 | |
96 class Head(Segment): | |
97 def __init__(self, tile_pos): | |
131 | 98 self._eye = mutators.Overlay("tiles/common/snake/snake-head-eye-r.png") |
99 self._tongue = mutators.Overlay("tiles/common/snake/snake-head-tongue-r.png") | |
100 self._detail_mutators = (self._eye,) | |
110 | 101 super(Head, self).__init__("snake-head-mouth-open-r", tile_pos) |
102 | |
131 | 103 def tongue_out(self): |
104 self._detail_mutators = (self._eye, self._tongue) | |
105 self.make_images() | |
106 self.update_image() | |
107 | |
108 def tongue_in(self): | |
109 self._detail_mutators = (self._eye,) | |
110 self.make_images() | |
111 self.update_image() | |
112 | |
110 | 113 |
114 class Body(Segment): | |
115 def __init__(self, tile_pos): | |
116 super(Body, self).__init__("snake-body-r", tile_pos) | |
117 | |
118 | |
119 class Tail(Segment): | |
120 def __init__(self, tile_pos): | |
121 super(Tail, self).__init__("snake-tail-r", tile_pos) |