Mercurial > mamba
annotate mamba/snake.py @ 129:c533b7c9cbe8
Fatter snake.
author | Simon Cross <hodgestar@gmail.com> |
---|---|
date | Sun, 11 Sep 2011 22:11:15 +0200 |
parents | 646bb61c9ea6 |
children | 513037749086 |
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 |
110 | 60 def __init__(self, image_name, tile_pos): |
61 super(Segment, self).__init__() | |
125
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
62 self._base_image = "/".join(["snake", image_name]) |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
63 self._orientation = Snake.UP |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
64 |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
65 self.make_images(self.GREEN) |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
66 self.update_image() |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
67 self.set_tile_pos(tile_pos) |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
68 |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
69 def make_images(self, colour_overlay): |
110 | 70 self._images = {} |
71 for orientation, muts in [ | |
72 (Snake.RIGHT, (mutators.RIGHT,)), | |
73 (Snake.LEFT, (mutators.LEFT,)), | |
74 (Snake.UP, (mutators.UP,)), | |
75 (Snake.DOWN, (mutators.DOWN,)), | |
76 ]: | |
125
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
77 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
|
78 |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
79 def update_image(self): |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
80 self.image = self._images[self._orientation] |
110 | 81 |
82 def set_orientation(self, orientation): | |
125
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
83 self._orientation = orientation |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
84 self.update_image() |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
85 |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
86 def set_colour(self, colour_overlay): |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
87 self.make_images(colour_overlay) |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
122
diff
changeset
|
88 self.update_image() |
110 | 89 |
90 | |
91 class Head(Segment): | |
92 def __init__(self, tile_pos): | |
93 super(Head, self).__init__("snake-head-mouth-open-r", tile_pos) | |
94 | |
95 | |
96 class Body(Segment): | |
97 def __init__(self, tile_pos): | |
98 super(Body, self).__init__("snake-body-r", tile_pos) | |
99 | |
100 | |
101 class Tail(Segment): | |
102 def __init__(self, tile_pos): | |
103 super(Tail, self).__init__("snake-tail-r", tile_pos) |