changeset 78:b1019923cb12

Direction control for snake.
author Simon Cross <hodgestar@gmail.com>
date Sun, 11 Sep 2011 18:29:49 +0200
parents 2aa652b92449
children f602a8c3d173
files mamba/habitats/level.py mamba/snake.py mamba/world.py
diffstat 3 files changed, 49 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/mamba/habitats/level.py	Sun Sep 11 18:30:19 2011 +0200
+++ b/mamba/habitats/level.py	Sun Sep 11 18:29:49 2011 +0200
@@ -1,23 +1,39 @@
 """Where a level object hides."""
 
-from pygame.locals import KEYDOWN
+from pygame.locals import KEYDOWN, K_LEFT, K_RIGHT, K_UP, K_DOWN
 
 from mamba.constants import ESCAPE_KEYS
 from mamba.engine import Habitat, NewHabitatEvent
+from mamba.world import World
 from mamba.widgets.level import LevelWidget
+from mambe.snake import Snake
 from mamba.level import Level
 
 
 class LevelHabitat(Habitat):
     def __init__(self, level_name):
         super(LevelHabitat, self).__init__()
-        self.level = Level(level_name)
-        self.level_widget = LevelWidget(self.level)
-        self.container.add(self.level_widget)
+        level = Level(level_name)
+        level_widget = LevelWidget(level)
+        self.container.add(level_widget)
         self.container.add_callback(KEYDOWN, self.keydown_event)
+        self.world = World(level)
+        self.actions = self.create_action_map()
+
+    def create_action_map(self):
+        actions = {}
+        actions[K_LEFT] = (self.world.snake.set_orientation, (Snake.LEFT,))
+        actions[K_RIGHT] = (self.world.snake.set_orientation, (Snake.RIGHT,))
+        actions[K_DOWN] = (self.world.snake.set_orientation, (Snake.DOWN,))
+        actions[K_UP] = (self.world.snake.set_orientation, (Snake.UP,))
+        return actions
 
     def keydown_event(self, ev, widget):
         if ev.key in ESCAPE_KEYS:
             from mamba.habitats.mainmenu import MainMenu
             NewHabitatEvent.post(MainMenu())
             return True
+        elif ev.key in self.actions:
+            func, args = self.actions[ev.key]
+            func(*args)
+            return True
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mamba/snake.py	Sun Sep 11 18:29:49 2011 +0200
@@ -0,0 +1,19 @@
+"""The player snake object."""
+
+from mamba.sprite import BaseSprite
+
+
+class Snake(BaseSprite):
+
+    UP, DOWN, LEFT, RIGHT = range(4)
+
+    def __init__(self, tile_pos, orientation):
+        super(Snake, self).__init__("snake/"
+                                    "snake-head-mouth-open-r.png")
+        self.set_tile_pos(tile_pos)
+        self.set_orientation(orientation)
+
+    def set_orientation(self, orientation):
+        self._orientation = orientation
+        print ["UP", "DOWN", "LEFT", "RIGHT"][orientation]
+        # TODO: update image
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mamba/world.py	Sun Sep 11 18:29:49 2011 +0200
@@ -0,0 +1,10 @@
+"""World state (level, plus snake, plus other sprites)."""
+
+from mamba.snake import Snake
+
+
+class World(object):
+    def __init__(self, level):
+        self.level = level
+        tile_pos, orientation = level.get_entry()
+        self.snake = Snake(tile_pos, orientation)