Mercurial > mamba
view mamba/widgets/game.py @ 213:7a9be9add4c7
Hook up exit.
author | Simon Cross <hodgestar@gmail.com> |
---|---|
date | Wed, 14 Sep 2011 21:12:19 +0200 |
parents | b92f705bd8ea |
children | 321f2eef40e3 |
line wrap: on
line source
"""Display the game area.""" from pygame.rect import Rect from pygame.locals import KEYDOWN, K_LEFT, K_RIGHT, K_DOWN, K_UP from mamba.constants import UP, DOWN, LEFT, RIGHT from mamba.widgets.base import Widget from mamba.widgets.messagebox import MessageBox from mamba.engine import SnakeDiedEvent, LevelCompletedEvent, NewHabitatEvent from mamba.habitats.mainmenu import MainMenu 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(SnakeDiedEvent, self.snake_died) self.add_callback(LevelCompletedEvent, self.level_completed) def create_action_map(self): actions = {} actions[K_LEFT] = (self.world.snake.set_orientation, (LEFT,)) actions[K_RIGHT] = (self.world.snake.set_orientation, (RIGHT,)) actions[K_DOWN] = (self.world.snake.set_orientation, (DOWN,)) actions[K_UP] = (self.world.snake.set_orientation, (UP,)) 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 draw(self, surface): self.world.update() self.world.draw(surface) def snake_died(self, ev, widget): self.world.pause() messagebox = MessageBox((300, 200), 'You died!', self.restart) self.parent.add(messagebox) messagebox.grab_focus() return True def restart(self): self.world.restart() self.actions = self.create_action_map() self.grab_focus() def level_completed(self, ev, widget): self.world.pause() messagebox = MessageBox((300, 200), 'Level complete!', self.go_mainmenu) self.parent.add(messagebox) messagebox.grab_focus() return True def go_mainmenu(self): self.grab_focus() NewHabitatEvent.post(MainMenu())