Mercurial > boomslang
diff pyntnclick/widgets/game.py @ 555:c0474fe18b96 pyntnclick
Copy in widgets from mamba (currently unused)
author | Stefano Rivera <stefano@rivera.za.net> |
---|---|
date | Sat, 11 Feb 2012 14:09:46 +0200 |
parents | |
children | f9f04cb35697 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pyntnclick/widgets/game.py Sat Feb 11 14:09:46 2012 +0200 @@ -0,0 +1,50 @@ +"""Display the game area.""" + +from pygame.rect import Rect +from pygame.locals import (KEYDOWN, K_LEFT, K_RIGHT, K_DOWN, K_UP, K_p, + K_SPACE, K_PAUSE) + +from mamba.constants import UP, DOWN, LEFT, RIGHT +from mamba.widgets.base import Widget +from mamba.engine import FlipArrowsEvent + + +class GameWidget(Widget): + def __init__(self, world, offset=(0, 0)): + self.world = world + self.actions = self.create_action_map() + rect = Rect(offset, world.get_size()) + super(GameWidget, self).__init__(rect) + self.focussable = True + self.add_callback(KEYDOWN, self.action_callback) + self.add_callback(FlipArrowsEvent, self.flip_arrows) + + def create_action_map(self): + actions = {} + pause = (self.world.toggle_pause, ()) + actions[K_LEFT] = (self.world.snake.send_new_direction, (LEFT,)) + actions[K_RIGHT] = (self.world.snake.send_new_direction, (RIGHT,)) + actions[K_DOWN] = (self.world.snake.send_new_direction, (DOWN,)) + actions[K_UP] = (self.world.snake.send_new_direction, (UP,)) + actions[K_p] = pause + actions[K_SPACE] = pause + actions[K_PAUSE] = pause + return actions + + def action_callback(self, ev, widget): + if ev.key in self.actions: + func, args = self.actions[ev.key] + func(*args) + return True + + def flip_arrows(self, ev, widget): + self.world.level.flip_arrows() + + def draw(self, surface): + self.world.update() + self.world.draw(surface) + + def restart(self): + self.world.restart() + self.actions = self.create_action_map() + self.grab_focus()