Problema con colisiones con el mono

hola.como estan. nesecito si alguien me puede ayudar con un juego, el mono no colisiona con las respuestas y en una parte donde define la respuesta si son verdaderas me salta un error. no puedo encontrar la falla. si alguin me ayuda se lo agradeceria mucho

import pilasengine
pilas = pilasengine.iniciar()
fondo = pilas.fondos.Fondo()
fondo.imagen = pilas.imagenes.cargar('ab.png')

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

vuelta = pilas.actores.Puntaje(color="rojo")
vuelta.x = 300
vuelta.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 [fondo, puntaje, vuelta, pilas.escena.fondo]:
             actor.eliminar()

    # Genera una pregunta nueva
     crear_una_nueva_pregunta()
def crear_una_nueva_pregunta():
    #PREGUNTA
     e = ("3x-2=1"), ("x2=-9"), ("2x-1=3x+3-x-4"), ("4+x=30"), ("5+10-x=8"), ("x+5=x-2"), ("x/2-x/3=x/6"), ("2x+3y=15"), ("x-3=2+x"), ("8+26-3+x=70"), ("x+y=55"), ("x2=-6"), ("5+20-x=-5"), ("2(x+1)=2x+2"), ("x/2=1-x+3x/2")
     posicion = pilas.azar(0, len(e)-1)
     o = e[posicion]
     pregunta = pilas.actores.Texto(u"cuantas soluciones tiene: " + o ,y=180,magnitud=25) 

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


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



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

     mono = pilas.actores.Mono()
     mono.aprender("Arrastrable")
    #DEFINO RESPUESTAS
     rta_1 = pilas.actores.Texto("no tiene",x=-200, y=-150)
     rta_2 = pilas.actores.Texto("una",x = 0, y =-150)
     rta_3 = pilas.actores.Texto("infinitas",x = 200, y =-150)

     lis =("una", "no tiene", "infinitas", "una", "una", "no tiene", "infinitas", "infinitas", "no tiene", "una", "infinitas", "no tiene", "una", "infinitas", "no tiene")
     
     cajas_posibles = [caja1,caja2,caja3]
     textos_posibles = [rta_1,rta_2,rta_3]
     
     respuesta_verdadera = cajas_posibles[lis[posicion]]
     respuesta_verdadera.esverdadera = True
     texto_de_respuestaok = textos_posibles[indiceok]
     texto_de_respuestaok.texto = lis[posicion]


    #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(5)
        vuelta.aumentar()

        # Reinicia el juego pasados los 2 segundos.
        pilas.tareas.una_vez(2, reiniciar)
     else:
        mono.decir("INTENTA DE NUEVO")
        pilas.camara.vibrar()
        caja.eliminar()
        puntaje.reducir(3)


crear_una_nueva_pregunta()       
        


pilas.ejecutar()

Buenas, @javier_cerrudo

Deberias editar tu post y colocar esto

` <------esa pequeña tilde, copiala y pegala en tu post

TRES veces antes del código y TRES veces al final. De esta manera tu código quedará bien indexado y podremos comprobar los errores.

De todas formas, y sin testarlo, podrias probar a programar las colisiones usando etiquetas. Para eso seria necesario que las cajas fueran a partir de un actor personalizado. Por ejemplo:

class Mis_Cajas(pilasengine.actores.Actor):
    def iniciar(self):
        self imagen = 'caja.png'
        self.escala = 2
        self.esverdadera = false
pilas.actores.vincular(Mis_Cajas)

caja1 = pilas.actores.Mis_Cajas()
# Así todas las cajas que necesites, y luego en las colisiones:

pilas.colisiones.agregar('Mono', 'Mis_Cajas', respuesta)

Un saludo.

gracias . ya edite el post. siguedando el error haciando esos cambios igual.

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



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

Buenas, @javier_cerrudo

Veo que las colisiones las has programado dentro de la def crear_una_nueva_pregunta():

Puedes probar a mover las colisiones hacia el final del código, después de la def respuesta(mono,caja).

Dime si te sirvió… Si no te funciona vuelve a exponer el código actualizado y seguimos revisando.

Un saludo.

@jordinur me salta ese error

buenas, @javier_cerrudo

La verdad es que este tema se escapa a mis conocimientos… no es de Pilas, sinó de Python. Quizás alguien con más conocimientos que yo pueda ayudarte mejor.

He testado tu juego, y anulando un par de lineas de código es funcional aunque no detecta la respuesta correcta. La lineas que dan el problema son estas:

     #respuesta_verdadera = cajas_posibles[lis[posicion]]
     #respuesta_verdadera.esverdadera = True
     #texto_de_respuestaok = textos_posibles[indiceok]
     #texto_de_respuestaok.texto = lis[posicion]

Concretamente la primera y la tercera.

La primera linea si te soy sincero no sé ni qué pretendes hacer, ya que no entiendo que pases esos parámetros (no me extrañaria que tu fueras más experto que yo, que al fin y al cabo llevo cuatro dias mal contados en Python y aún no domino la mayoria de funcionalidades :blush: )

A la.tercera, le estás pasando un parámetro “indiceok” que no veo por ningún otro lado, no sé si es algo que no conozco o es equivocación tuya…

Siento no poder ayudarte mejor… :cold_sweat:

Un saludo.