import pygame import breakout_level from engine import * from engine.event import * from breakout_ingame import * from breakout_graphics import * from breakout_edit import * class breakout_levelselect(model.abstract_gamestate): def __init__(self): self.selected = 0 self.filenames = breakout_level.levellist() self.next_available = self.next_filename(self.filenames) self.menu_text = [filename for filename in self.filenames] self.menu_text.append("(new level)") self.menu_options = [filename for filename in self.filenames] self.menu_options.append(self.next_available) self.logo = breakout_sprite() self.logo.set_image(misc.load_image("logo.png")) self.logo.set_pos((110,50)) ## Draws the menu to screen with the selected item in ## a differenct color. def draw_menu(self, screen, pos): x,y = pos for i in range(0, len(self.menu_text)): y += 25 if self.selected == i: color = (255,0,0) else: color = (0,0,0) misc.draw_text(self.menu_text[i],\ 20,\ color,\ screen,\ (x,y)) ## These two methods are used to navigate through the menu. def increase_selection(self): self.selected = (self.selected + 1) % len(self.menu_text) def decrease_selection(self): self.selected = (self.selected - 1) % len(self.menu_text) def next_filename(self, files): num = int(files[-1].split(".")[0][5:]) + 1 filename = "level"+str(num)+".lev" return filename ## Handle keystrokes. def key_pressed(self, key): if key == pygame.locals.K_UP: self.decrease_selection() elif key == pygame.locals.K_DOWN: self.increase_selection() elif key == pygame.locals.K_RETURN: state = breakout_edit(self.menu_options[self.selected]) state.set_announce_method(self.announce_method) self.set_state(state) ## This is only needed so that we can keep contact ## with the main event handler for quiting the game ## properly. def set_announce_method(self, announce_method): self.announce_method = announce_method def draw(self, screen): self.logo.draw(screen) self.draw_menu(screen, (200,140))