Crear menú con 3 opciones y ir a dos pantallas diferentes

Hola como dice el titulo del tema necesito crear un menu con tres opciones;

Iniciar juego,
Como jugar,
Salir.

En las dos primeras necesito que abra otra escena donde pueda poner otras cosas y en la tercera bueno que salga del juego.

Tengo entendido que se hace con clases, ya estuve viendo varios post del foro, pero a la hora de querer agregarle un fondo o algo me salta error de identado O.o

class PantallaMenu(pilasengine.escenas.Escena):

    def iniciar(self):
            FondoJuego = pilas.fondos.Fondo()
	FondoJuego.imagen = pilas.imagenes.cargar("Archivos\img\map2.png")
        
        pass

    def ejecutar(self):
        pass

pilas.escenas.vincular(PantallaMenu)
pilas.escenas.PantallaMenu()

Ojala alguien pueda ayudarme. Desde ya muchas gracias.

Hola @emah094, si la porción de código que pusiste es igual a la que estas usando entonces el problema de indentado está en

tiene que estar a la misma alineación que

Por otro lado, tené cuidado de no estar mezclando espacios y tabs, a veces algunos editores de texto no están correctamente configurados, o por simple despiste se pueden mezclar.

Muchas gracias por responder primero que nada. Em ese espacio que se muestra en el post no lo tengo en el código, pero voy a tener en cuenta lo de los tabs… de igual forma me es imposible hacer un menú con clases y poder agregarle fondos propios y demás… aun no comprendo porque no funciona…

Cuando puedas comparti el codigo entero asi vemos si lo podemos resolver :slight_smile:

import pilasengine
pilas = pilasengine.iniciar()

def iniciar_juego():
pilas.escenas.Normal()
FondoJuego = pilas.fondos.Fondo()
FondoJuego.imagen = pilas.imagenes.cargar(“FondoJuego.png”)

def como_jugar():
pilas.escenas.Normal()
FondoComoJugar = pilas.fondos.Fondo()
FondoComoJugar.imagen = pilas.imagenes.cargar(“FondoPrincipal.png”)

def salir_del_juego():
pilas.terminar()

MenuPrincipal = pilas.fondos.Fondo()
MenuPrincipal.imagen = pilas.imagenes.cargar(“FondoPrincipal.png”)

pilas.actores.Menu([(‘Iniciar juego’, iniciar_juego),(‘Como jugar’, como_jugar),(‘salir’, salir_del_juego),])

pilas.ejecutar()

Lo hice así, el tema es que después para cuando quiera hacer el juego tengo que meter todo dentro de la función iniciar juego no? y no voy a tener problemas con eso?

No exactamente, lo que podes hacer es usar escenas

Un buen ejemplo es Caza de patos https://github.com/hugoruscitti/pilas/blob/master/pilasengine/ejemplos/juego-con-escenas.py

que utiliza escenas para determinar las pantallas del juego. En este caso especifico te quedaría algo como:

import pilasengine
pilas = pilasengine.iniciar()
def iniciar_juego():
	pilas.escenas.Juego()

def como_jugar():
    pilas.escenas.Instrucciones()
	
def salir_del_juego():
    pilas.terminar()

class Juego(pilasengine.escenas.Escena):
    def iniciar(self):
        FondoJuego = pilas.fondos.Fondo()
        FondoJuego.imagen = pilas.imagenes.cargar("FondoJuego.png")    

class Instrucciones(pilasengine.escenas.Escena):
    def iniciar(self):
        pilas.escenas.Normal()
        FondoComoJugar = pilas.fondos.Fondo()
        FondoComoJugar.imagen = pilas.imagenes.cargar("FondoPrincipal.png")

pilas.escenas.vincular(Juego)
pilas.escenas.vincular(Instrucciones)

MenuPrincipal = pilas.fondos.Fondo()
MenuPrincipal.imagen = pilas.imagenes.cargar("FondoPrincipal.png")
pilas.actores.Menu([('Iniciar juego', iniciar_juego),('Como jugar', como_jugar),('salir', salir_del_juego),])
pilas.ejecutar()

Así todo lo que quieras agregar en la instancia de juego lo podes hacer en la escena Juego.
No lo puedo probar en este momento, pero debería andar. Chequealo y vemos

Excelente ahí si me funciono… Muchas gracias! Tengo una duda, si quiero agregar los actores y demás cosas que forman parte del juego, lo tengo que agregar si o si como funciones dentro de esa escena?

Edit: Ademas me gustaria saber porque hay que vincular abajo de todo, o sea para que sirve? (obviamente para que funcione, pero porque hay que agregarlo como extra…)

Podes hacer todo en la escena o separado e intanciar esas cosas en la escena (como el ejemplo de Caza de patos)

Todo depende de lo modular que quieras que sea tu código.

Por otro lado, lo de vincular es un método de la clase escenas que permite crear escenas personalizadas y usar esa clase