# HG changeset patch # User Simon Cross # Date 1315758589 -7200 # Node ID b1019923cb12c7b40e6f138166560c693db27a1e # Parent 2aa652b924497cddc8c4a2e3ed3f7978eb1d4ea7 Direction control for snake. diff -r 2aa652b92449 -r b1019923cb12 mamba/habitats/level.py --- 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 diff -r 2aa652b92449 -r b1019923cb12 mamba/snake.py --- /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 diff -r 2aa652b92449 -r b1019923cb12 mamba/world.py --- /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)