Mercurial > nagslang
view nagslang/screens/menu.py @ 325:52b5a822be26
Load first level on play start.
author | Simon Cross <hodgestar@gmail.com> |
---|---|
date | Fri, 06 Sep 2013 02:11:58 +0200 |
parents | 3153196517fc |
children | 11febdb72296 |
line wrap: on
line source
"""Display a menu screen.""" import pygame from nagslang.screens.base import Screen from nagslang.events import QuitEvent, ScreenChange from nagslang.level import Level from nagslang.widgets.text import TextWidget, MultiLineWidget class MenuScreen(Screen): def setup(self): # Position is hacked later self.cursor = TextWidget((0, 0), u'\N{Rightwards Arrow}', colour='red') self.cursor_pos = 0 self.options = [ self.play, self.restart, self.quit, ] self.widgets = [ TextWidget((10, 10), 'Menu', fontsize=20), TextWidget((40, 50), 'Play the game'), TextWidget((40, 70), 'Start the game from the beginning again'), TextWidget((40, 90), 'Quit'), MultiLineWidget((60, 120), self.world.get_formatted_stats()), self.cursor, ] def handle_event(self, ev): if ev.type == pygame.locals.KEYDOWN: if ev.key == pygame.locals.K_ESCAPE: self.quit() elif ev.key == pygame.locals.K_DOWN: self.cursor_pos = (self.cursor_pos + 1) % len(self.options) elif ev.key == pygame.locals.K_UP: self.cursor_pos = (self.cursor_pos - 1) % len(self.options) elif ev.key == pygame.locals.K_RETURN: self.options[self.cursor_pos]() def render(self, surface): surface.fill(pygame.color.Color(255, 255, 255)) self.cursor.pos = (10, 50 + 20 * self.cursor_pos) self.cursor.rect.top = self.cursor.pos[1] for widget in self.widgets: widget.draw(surface) def play(self): first_level = Level.list_levels()[0] ScreenChange.post(first_level) def restart(self): self.world.reset() self.setup() def quit(self): QuitEvent.post()