view mamba/widgets/game.py @ 186:275f0be6946c

Reincarnating Snakes
author Neil Muller <drnlmuller@gmail.com>
date Wed, 14 Sep 2011 16:28:03 +0200
parents 119c0fb758c2
children 926710da8854
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.widgets.base import Widget
from mamba.snake import Snake
from mamba.engine import SnakeDiedEvent


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

    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 event(self, ev):
        if ev.type == KEYDOWN and ev.key in self.actions:
            func, args = self.actions[ev.key]
            func(*args)
            return True
        elif SnakeDiedEvent.matches(ev):
            self.snake_died()
            return True

    def draw(self, surface):
        self.world.update()
        self.world.draw(surface)

    def snake_died(self):
        # Restart
        self.world.restart()
        self.actions = self.create_action_map()