changeset 110:e6299eb296ce

Draw the world!
author Simon Cross <hodgestar@gmail.com>
date Sun, 11 Sep 2011 20:17:53 +0200
parents dc0b0be7e2f6
children 0c1005c76c87
files mamba/level.py mamba/snake.py mamba/widgets/level.py mamba/world.py
diffstat 4 files changed, 81 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/mamba/level.py	Sun Sep 11 20:15:32 2011 +0200
+++ b/mamba/level.py	Sun Sep 11 20:17:53 2011 +0200
@@ -121,3 +121,7 @@
 
     def get_entry(self):
         return (self.entry.tile_pos, self.entry.direction)
+
+    def draw(self, surface):
+        self.background.blit(surface, (0, 0))
+        self.sprites.draw(surface)
--- a/mamba/snake.py	Sun Sep 11 20:15:32 2011 +0200
+++ b/mamba/snake.py	Sun Sep 11 20:17:53 2011 +0200
@@ -1,28 +1,72 @@
 """The player snake object."""
 
+from pygame.sprite import Group
+
 from mamba.sprites import BaseSprite
 from mamba import mutators
 
 
-class Snake(BaseSprite):
+class Snake(object):
 
-    UP, DOWN, LEFT, RIGHT = range(4)
+    UP, DOWN, LEFT, RIGHT = [(0, -1), (0, 1), (-1, 0), (1, 0)]
 
     def __init__(self, tile_pos, orientation):
-        super(Snake, self).__init__(image_name="snake/"
-                                    "snake-head-mouth-open-r")
-        self.load_images()
-        self.set_tile_pos(tile_pos)
+        self.segments = self.create_segments(tile_pos, orientation)
+        self.segment_group = Group()
+        self.segment_group.add(*self.segments)
         self.set_orientation(orientation)
 
-    def load_images(self):
-        pass
+    head = property(fget=lambda self: self.segments[0])
+    tail = property(fget=lambda self: self.segments[-1])
+
+    def create_segments(self, tile_pos, orientation):
+        x, y = tile_pos
+        dx, dy = orientation
+        return [Head((x, y)),
+                Body((x + dx, y + dy)),
+                Tail((x + 2 * dx, y + 2 * dy)),
+                ]
+
+    def draw(self, surface):
+        self.segment_sprites.draw(surface)
 
     def set_orientation(self, orientation):
-        self._orientation = orientation
-        print ["UP", "DOWN", "LEFT", "RIGHT"][orientation]
-        # TODO: update image
+        #self.orientation = orientation
+        #for segment in self.segments:
+        #    segment.set_orientation(self)
+        print orientation
 
 
-class Head(object):
-    pass
+class Segment(BaseSprite):
+
+    def __init__(self, image_name, tile_pos):
+        super(Segment, self).__init__()
+        image_name = "/".join(["snake", image_name])
+        self._images = {}
+        for orientation, muts in [
+            (Snake.RIGHT, (mutators.RIGHT,)),
+            (Snake.LEFT, (mutators.LEFT,)),
+            (Snake.UP, (mutators.UP,)),
+            (Snake.DOWN, (mutators.DOWN,)),
+            ]:
+            self._images[orientation] = self.load_image(image_name, muts)
+        self.set_orientation(Snake.RIGHT)
+        self.set_tile_pos(tile_pos)
+
+    def set_orientation(self, orientation):
+        self.image = self._images[orientation]
+
+
+class Head(Segment):
+    def __init__(self, tile_pos):
+        super(Head, self).__init__("snake-head-mouth-open-r", tile_pos)
+
+
+class Body(Segment):
+    def __init__(self, tile_pos):
+        super(Body, self).__init__("snake-body-r", tile_pos)
+
+
+class Tail(Segment):
+    def __init__(self, tile_pos):
+        super(Tail, self).__init__("snake-tail-r", tile_pos)
--- a/mamba/widgets/level.py	Sun Sep 11 20:15:32 2011 +0200
+++ b/mamba/widgets/level.py	Sun Sep 11 20:17:53 2011 +0200
@@ -10,9 +10,24 @@
         super(LevelWidget, self).__init__(level_rect)
 
     def draw(self, surface):
-        surface.blit(self.level.background, (0, 0))
-        self.level.sprites.draw(surface)
+        self.level.draw(surface)
 
     def event(self, event):
         # TODO: Implement
         pass
+
+
+class GameWidget(Widget):
+    def __init__(self, world, level, offset=(0, 0)):
+        self.world = world
+        self.level = level
+        rect = Rect(offset, level.get_size())
+        super(GameWidget, self).__init__(rect)
+
+    def draw(self, surface):
+        self.level.draw(surface)
+        self.world.draw(surface)
+
+    def event(self, ev):
+        # TODO: Implement
+        pass
--- a/mamba/world.py	Sun Sep 11 20:15:32 2011 +0200
+++ b/mamba/world.py	Sun Sep 11 20:17:53 2011 +0200
@@ -8,3 +8,6 @@
         self.level = level
         tile_pos, orientation = level.get_entry()
         self.snake = Snake(tile_pos, orientation)
+
+    def draw(self, surface):
+        self.snake.draw(surface)