Repetir el juego o nivel

Hola, como andan. Esto realizando un juego, consiste en una pregunta de matematica, donde me aprecen 3 respuestas y arrastrando el mono elijo la respuesta correcta. Todo esto lo puede hacer, ahora lo que quiero es que cuando la respuesta sea correcta o incorrecta me mande otra pregunta (es decir, como inicie el juego) y sumar a un contador el puntaje.

Les dejo el codigo hasta ahora, probe hacer esto que les comente con un for pero me aparecen todos los actores uno arriba del otro.

import pilasengine
pilas = pilasengine.iniciar()




#PREGUNTA

preg1 = pilas.azar(0,20)
preg2 = pilas.azar(0,20)
pregunta = pilas.actores.Texto("Cuanto es: " + str(preg1) + " + " + str(preg2),
            y=180,magnitud=25)
            
#DEFINO LAS CAJAS
caja1 = pilas.actores.Actor(x = -200, y = 70)
caja1.imagen = "caja.png"
caja1.escala = 2
caja1.esverdadera = False


caja2 = pilas.actores.Actor(x = 0, y = 70)
caja2.imagen = "caja.png"
caja2.escala = 2
caja2.esverdadera = False



caja3 = pilas.actores.Actor(x = 200, y = 70)
caja3.imagen = "caja.png"
caja3.escala = 2
caja3.esverdadera = False


#DEFINO RESPUESTAS
rta_1 = pilas.actores.Texto("",x=-200, y=70)
rta_2 = pilas.actores.Texto("",x = 0, y = 70)
rta_3 = pilas.actores.Texto("",x = 200, y = 70)

    #caja verdader
cajas_posibles = [caja1,caja2,caja3]
textos_posibles = [rta_1,rta_2,rta_3]
indiceok = pilas.azar(0,2)
respuesta_verdadera = cajas_posibles[indiceok]
respuesta_verdadera.esverdadera = True
texto_de_respuestaok = textos_posibles[indiceok]
texto_de_respuestaok.texto = str(preg1+preg2)
   #cajas falsas
    
if caja1.esverdadera:
    rta_2.texto = str(pilas.azar(0,100))
    rta_3.texto = str(pilas.azar(0,100))
elif caja2.esverdadera:
        rta_1.texto = str(pilas.azar(0,100))
        rta_3.texto = str(pilas.azar(0,100))
elif caja3.esverdadera:
        rta_1.texto = str(pilas.azar(0,100))
        rta_2.texto = str(pilas.azar(0,100))


#ACA EL MONO

mono = pilas.actores.Mono(y=-150)
mono.aprender(pilas.habilidades.Arrastrable)

#ACCION RESPUESTA

def eliminarcajas():
            if caja1.esverdadera:
                caja2.eliminar()
                rta_2.eliminar()
                caja3.eliminar()
                rta_3.eliminar()
            elif caja2.esverdadera:
                caja1.eliminar()
                rta_1.eliminar()
                caja3.eliminar()
                rta_3.eliminar()
            else:
                caja1.eliminar()
                rta_1.eliminar()
                caja2.eliminar()
                rta_2.eliminar()
def eliminarcajasconexplosion():
            caja1.aprender(pilas.habilidades.PuedeExplotar)
            caja2.aprender(pilas.habilidades.PuedeExplotar)
            caja3.aprender(pilas.habilidades.PuedeExplotar)
            if caja1.esverdadera:
                caja2.eliminar()
                rta_2.eliminar()
                caja3.eliminar()
                rta_3.eliminar()
            elif caja2.esverdadera:
                caja1.eliminar()
                rta_1.eliminar()
                caja3.eliminar()
                rta_3.eliminar()
            else:
                caja1.eliminar()
                rta_1.eliminar()
                caja2.eliminar()
                rta_2.eliminar()
def respuesta (mono,caja):
    if caja.esverdadera:
        mono.eliminar()
        mono2 = pilas.actores.Mono(y=-150)
        mono2.decir("MUY BIEN")             
        eliminarcajas()
        
        
    else:
        mono.eliminar()
        mono2 = pilas.actores.Mono(y=-150)
        mono2.decir("CUALQUIERA")
        eliminarcajasconexplosion()
            

#COLISIONES
cajas = [caja1,caja2,caja3]
pilas.colisiones.agregar(mono,cajas,respuesta)

Gracias

1 Like

Hola @maticava, para mí lo más sencillo es crear la escena dentro de una función, una función que arme toda la escena y que se pueda llamar varias veces para reiniciar el nivel.

Haciéndole unos cambios a tu código logré que me quede algo así:

Te paso el código. El cambio más importante fué la creación de la función crear_una_nueva_pregunta y la función reiniciar que se llama dos segundos después de haber contestado bien:

import pilasengine
pilas = pilasengine.iniciar()

puntaje = pilas.actores.Puntaje(color='blanco')
puntaje.x = -300
puntaje.y = 220


def reiniciar():
    # Obtiene todos los actores de la pantalla.
    actores = pilas.actores.listar_actores()

    # Elimina todos los actores excepto el fondo y el puntaje
    for actor in actores:
        if actor not in [puntaje, pilas.escena.fondo]:
            actor.eliminar()

    # Genera una pregunta nueva
    crear_una_nueva_pregunta()

def crear_una_nueva_pregunta():
    #PREGUNTA

    preg1 = pilas.azar(0,20)
    preg2 = pilas.azar(0,20)
    pregunta = pilas.actores.Texto("Cuanto es: " + str(preg1) + " + " + str(preg2),
                y=180,magnitud=25)

    #DEFINO LAS CAJAS
    caja1 = pilas.actores.Actor(x = -200, y = 70)
    caja1.imagen = "caja.png"
    caja1.escala = 2
    caja1.esverdadera = False


    caja2 = pilas.actores.Actor(x = 0, y = 70)
    caja2.imagen = "caja.png"
    caja2.escala = 2
    caja2.esverdadera = False



    caja3 = pilas.actores.Actor(x = 200, y = 70)
    caja3.imagen = "caja.png"
    caja3.escala = 2
    caja3.esverdadera = False


    #DEFINO RESPUESTAS
    rta_1 = pilas.actores.Texto("",x=-200, y=70)
    rta_2 = pilas.actores.Texto("",x = 0, y = 70)
    rta_3 = pilas.actores.Texto("",x = 200, y = 70)

        #caja verdader
    cajas_posibles = [caja1,caja2,caja3]
    textos_posibles = [rta_1,rta_2,rta_3]
    indiceok = pilas.azar(0,2)
    respuesta_verdadera = cajas_posibles[indiceok]
    respuesta_verdadera.esverdadera = True
    texto_de_respuestaok = textos_posibles[indiceok]
    texto_de_respuestaok.texto = str(preg1+preg2)
       #cajas falsas

    if caja1.esverdadera:
        rta_2.texto = str(pilas.azar(0,100))
        rta_3.texto = str(pilas.azar(0,100))
    elif caja2.esverdadera:
            rta_1.texto = str(pilas.azar(0,100))
            rta_3.texto = str(pilas.azar(0,100))
    elif caja3.esverdadera:
            rta_1.texto = str(pilas.azar(0,100))
            rta_2.texto = str(pilas.azar(0,100))


    #ACA EL MONO

    mono = pilas.actores.Mono(y=-150)
    mono.aprender(pilas.habilidades.Arrastrable)


    #COLISIONES
    cajas = [caja1,caja2,caja3]
    pilas.colisiones.agregar(mono,cajas,respuesta)



def respuesta(mono, caja):
    if caja.esverdadera:
        mono.decir("MUY BIEN")

        # Genera una estrella para mostrar que contesto
        # bien
        estrella = pilas.actores.Estrella()
        estrella.x = caja.x
        estrella.y = caja.y
        estrella.escala = 0.2
        estrella.escala = [2, 1] * 2

        # aumenta el puntaje
        puntaje.aumentar()

        # Reinicia el juego pasados los 2 segundos.
        pilas.tareas.una_vez(2, reiniciar)
    else:
        mono.decir("CUALQUIERA")
        pilas.camara.vibrar()
        caja.eliminar()


crear_una_nueva_pregunta()

@hugoruscitti Muchisimas gracias, te pasaste!!! :blush:

Una pregunta a ese videojuego le quise agregar un menu pero no pude , como lo harias , disculpa por la molestia