示例#1
0
class Menu:
    "Representa un menú con opciones para un juego"
    
    def __init__(self, opciones):
        self.opciones = []
        fuente = pygame.font.Font('fonts/FEASFBI_.TTF', 25)
        x = 710
        y = 10
        paridad = 1

        self.cursor = Cursor(x - 30, y, 33)
        for titulo, funcion in opciones:
            self.opciones.append(Opcion(fuente, titulo, x, y, paridad, funcion))
            y += 30
            if paridad == 1:
                paridad = -1
            else:
                paridad = 1

        self.seleccionado = 0
        self.total = len(self.opciones)
        self.mantiene_pulsado = False

    def actualizar(self):
        """Altera el valor de 'self.seleccionado' con los direccionales."""

        k = pygame.key.get_pressed()

        if not self.mantiene_pulsado:
            if k[K_UP]:
                self.seleccionado -= 1
            elif k[K_DOWN]:
                self.seleccionado += 1
            elif k[K_RETURN]:
                # Invoca a la función asociada a la opción.
                self.opciones[self.seleccionado].activar()

        # procura que el cursor esté entre las opciones permitidas
        if self.seleccionado < 0:
            self.seleccionado = 0
        elif self.seleccionado > self.total - 1:
            self.seleccionado = self.total - 1
        
        self.cursor.seleccionar(self.seleccionado)

        # indica si el usuario mantiene pulsada alguna tecla.
        self.mantiene_pulsado = k[K_UP] or k[K_DOWN] or k[K_RETURN]

        self.cursor.actualizar()
     
        for o in self.opciones:
            o.actualizar()

    def imprimir(self, screen):
        """Imprime sobre 'screen' el texto de cada opción del menú."""

        self.cursor.imprimir(screen)

        for opcion in self.opciones:
            opcion.imprimir(screen)
示例#2
0
class Menu:
    def __init__(self, opciones):
        self.fondo = pygame.image.load("imagen/fondo-menu.jpg").convert()
        self.fuente = pygame.font.Font('fuentes/ninja-turtles-regular.otf', 80)
        self.texto = self.fuente.render('TURTLE NINJA ', True, Color.VERDE)
        self.opciones = list()
        self.cursor = Cursor()
        self.seleccionado = 0
        self.total = len(opciones)
        self.mantiene_pulsado = False
        self.sonido_menu = pygame.mixer.Sound('audio/an_8_bit_story.ogg')
        self.sonido_menu.play(loops=-1)
        self.construir_opciones(opciones)

    def construir_opciones(self, opciones):
        fuente = pygame.font.Font('fuentes/hkgrotesk-bold.otf', 22)
        fuente.set_bold(True)

        y_pos = 205
        for titulo, funcion in opciones:
            self.opciones.append(Opcion(fuente, titulo, y_pos, funcion))
            y_pos += 30

    def actualizar(self):
        key = pygame.key.get_pressed()
        if not self.mantiene_pulsado:
            if key[pygame.K_UP] and self.seleccionado > 0:
                self.seleccionado -= 1
            elif key[pygame.K_DOWN] and self.seleccionado < self.total - 1:
                self.seleccionado += 1
            elif key[pygame.K_RETURN]:
                self.sonido_menu.stop()
                self.opciones[self.seleccionado].activar()
                self.sonido_menu.play(loops=-1)

        self.mantiene_pulsado = \
            key[pygame.K_UP] \
            or key[pygame.K_DOWN] \
            or key[pygame.K_RETURN]
        self.cursor.seleccionar(self.seleccionado)
        self.cursor.actualizar()

        for opt in self.opciones:
            opt.destacar(False)
        self.opciones[self.seleccionado].destacar(True)

    def imprimir(self, pantalla):
        pantalla.blit(self.fondo, (0, 0))
        pantalla.blit(self.texto, [10, 10])
        self.cursor.imprimir(pantalla)
        for opcion in self.opciones:
            opcion.imprimir(pantalla)