Re aparecer puntaje y tiempo

Hola gente, tengo problemas para hacer que vuelva a aparecer el puntaje y el tiempo…

Mi juego se trata de que aparezca un triangulo por vez y debo elegir que tipo de triangulo es, la estructura del juego está solo tengo unos pequeños problemas.

  • Cada vez que se termina el tiempo, el puntaje no vuelve a aparecer
  • Necesito reemplazar el mono y las colisiones por hacer que se pueda elegir la opcion correcta mediante un click
  • Alterno al click tengo que asignar cada caja a un boton del teclado (Ej: ‘z’, ‘x’, & ‘c’)

import pilasengine
pilas = pilasengine.iniciar()

tiempo = 5
contador = pilas.actores.Texto("…")
contador.x = -295
contador.y = 190

vueltas = 0
contavueltas = pilas.actores.Texto("…")
contavueltas.x = -295
contavueltas.y = 165

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()
global vueltas
vueltas=vueltas+1

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

# Genera una pregunta nueva
crear_una_nueva_pregunta()

def finalizar(pts):
texto = pilas.actores.Texto("Puntos obtenidos: "+str(pts))

def crear_una_nueva_pregunta():

global tiempo
tiempo = tiempo - 1
    
# Si puede seguir jugando, reducimos el contador.
if tiempo > 0:
    contador.texto = str(tiempo) 

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

# Si es tiempo de perder.
if tiempo == 0:
# Elimina todos los actores excepto el fondo y el puntaje
    for actor in actores:
        if actor not in [ pilas.escena.fondo]:
            actor.eliminar()
    finalizar(puntaje.texto)
    pilas.tareas.una_vez(4, reiniciar)
global vueltas
vueltas=vueltas+1
contavueltas.texto = str(vueltas) 
#pregunta
import random
listatriangulos = ("isoceles.png","isocelesss.png","isocelesss.png","escaleno.png","escalenoo.png","escalenooo.png","equilatero.png","equilateroo.png","equilaterooo.png", "acutanguloo.png", "acutanguloo.png", "acutangulooo.png","obtusangulo.png","obtusanguloo.png","obtusangulooo.png","rectangulo.png","rectanguloo.png","rectangulooo.png")
nombrestriangulos = ("isoceles","isoceles","isoceles","escaleno","escaleno","escaleno","equilatero","equilatero","equilatero", "acutangulo", "acutangulo", "acutangulo","obtusangulo","obtusangulo","obtusangulo","rectangulo","rectangulo","rectangulo")
indiceazar = pilas.azar(0,5)
trimagen = pilas.actores.Actor(x = 0, y = 100)
trimagen.imagen = listatriangulos [indiceazar]
trianguloazar =   nombrestriangulos[indiceazar]
pregunta = pilas.actores.Texto("Que triangulo es: ",
            y=215,magnitud=25)
#cajas
caja1 = pilas.actores.Actor(x = -200, y = -40)
caja1.imagen = "caja.png"
caja1.escala = 2
caja1.esverdadera = False
caja2 = pilas.actores.Actor(x = 0, y = -40)
caja2.imagen = "caja.png"
caja2.escala = 2
caja2.esverdadera = False
caja3 = pilas.actores.Actor(x = 200, y = -40)
caja3.imagen = "caja.png"
caja3.escala = 2
caja3.esverdadera = False
#respuestas
rta_1 = pilas.actores.Texto("",x=-235, y=-40,magnitud=13)
rta_2 = pilas.actores.Texto("",x = -30, y = -40,magnitud=13)
rta_3 = pilas.actores.Texto("",x = 165, y = -40,magnitud=13)
#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 = trianguloazar
#cajas falsas
if caja1.esverdadera:
    rta_2.texto =  random.choice(nombrestriangulos)
    rta_3.texto =  random.choice(nombrestriangulos)
elif caja2.esverdadera:
        rta_1.texto =  random.choice(nombrestriangulos)
        rta_3.texto =  random.choice(nombrestriangulos)
elif caja3.esverdadera:
        rta_1.texto =  random.choice(nombrestriangulos)
        rta_2.texto = random.choice(nombrestriangulos)
mono = pilas.actores.Mono(y=-160)
mono.aprender(pilas.habilidades.Arrastrable)
cajas = [caja1,caja2,caja3]
pilas.colisiones.agregar(mono,cajas,respuesta)

def respuesta(mono, caja):
if caja.esverdadera:
mono.decir(“BIEN”)
estrella = pilas.actores.Estrella()
estrella.x = caja.x
estrella.y = caja.y
estrella.escala = 0.2
estrella.escala = [2, 1] * 2
puntaje.aumentar()
pilas.tareas.una_vez(2, reiniciar)
else:
mono.decir(“ERROR”)
pilas.camara.vibrar()
caja.eliminar()
# Reinicia el juego pasados los 2 segundos.
pilas.tareas.una_vez(1, reiniciar)

pilas.tareas.siempre(1, descontar_tiempo)
crear_una_nueva_pregunta()

Hola @maxicolla, no llegué a ver mucho tu código… pero me imagino que por el tipo de juego vas a necesitar usar escenas, así no vas a necesitar eliminar y restaurar actores:

http://manual.pilas-engine.com.ar/escenas/

Buenas, @maxicolla

Se ve muy bueno ese juego de preguntas y respuestas al azar. Hay mucha gente preguntando por este tema ultimamente…

No he podido testar tu juego, pero podrias probar a poner los actores puntaje y contador DENTRO de la def reiniciar.

Pruebalo y ya nos dices si te funcionó.

Un saludo.

Buenas, @maxicolla

Disculpa por mi respuesta anterior, fruto de mirar sin tiempo tu código. Obviamente te di una respuesta totalmente erronea. :blush:

Te dejo tu código modificado, verás que he hecho algunos cambios por que no tengo tus imagenes, y el tiempo me daba a mal traer, asi que lo anulé para hacer las pruebas. El indice_azar lo he cambiado a (0,2) para hacer las pruebas.

He cambiado de lugar algunas def., y he tenido que inventarme donde y como estaba todo indexado, ya que al copiar y pegar se pierde el formato de tabulaciones.

A mi se me ejecuta sin ningun error.

Espero que esto te ayude.

Un saludo.

import pilasengine
import random

pilas = pilasengine.iniciar()

tiempo = 5
contador = pilas.actores.Texto("...")
contador.x = -295
contador.y = 190

vueltas = 0
contavueltas = pilas.actores.Texto("...")
contavueltas.x = -295
contavueltas.y = 165

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()
	global vueltas
	vueltas=vueltas+1
# Elimina todos los actores excepto el fondo y el puntaje
	for actor in actores:
		if actor not in [puntaje, pilas.escena.fondo,contador]:
			actor.eliminar()

# Genera una pregunta nueva
	pilas.tareas.agregar(1,crear_una_nueva_pregunta)
	
def finalizar(pts):
	texto = pilas.actores.Texto("Puntos obtenidos: "+str(pts))

def crear_una_nueva_pregunta():
	global tiempo
	tiempo = tiempo - 1
	
	#Obtiene todos los actores de la pantalla.
	actores = pilas.actores.listar_actores()

	"""	
	# Si puede seguir jugando, reducimos el contador.
		if tiempo > 0:
			contador.texto = str(tiempo)

	# Si es tiempo de perder.
		else:
	# Elimina todos los actores excepto el fondo y el puntaje
			for actor in actores:
				if actor not in [ pilas.escena.fondo]:
					actor.eliminar()


			finalizar(puntaje.texto)
			pilas.tareas.una_vez(4, reiniciar)


			global vueltas
			vueltas=vueltas+1
			contavueltas.texto = str(vueltas) 

		#pregunta
		
		listatriangulos = ("isoceles.png","isocelesss.png","isocelesss.png","escaleno.png","escalenoo.png","escalenooo.png","equilatero.png","equilateroo.png","equilaterooo.png", "acutanguloo.png", "acutanguloo.png", "acutangulooo.png","obtusangulo.png","obtusanguloo.png","obtusangulooo.png","rectangulo.png","rectanguloo.png","rectangulooo.png")
		nombrestriangulos = ("isoceles","isoceles","isoceles","escaleno","escaleno","escaleno","equilatero","equilatero","equilatero", "acutangulo", "acutangulo", "acutangulo","obtusangulo","obtusangulo","obtusangulo","rectangulo","rectangulo","rectangulo")
		"""

	listatriangulos = ('data/aceituna.png', 'data/mono.png', 'data/alien.png')
	nombrestriangulos = ('olivia', 'matias', 'antonio')

	indiceazar = pilas.azar(0,2)
	trimagen = pilas.actores.Actor(x = 0, y = 100)
	trimagen.imagen = listatriangulos [indiceazar]
	trianguloazar =   nombrestriangulos[indiceazar]
	pregunta = pilas.actores.Texto("Que triangulo es: ",
				y=215,magnitud=25)

	#cajas
	caja1 = pilas.actores.Actor(x = -200, y = -40)
	caja1.imagen = "caja.png"
	caja1.escala = 2
	caja1.esverdadera = False

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

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


	#respuestas
	rta_1 = pilas.actores.Texto("",x=-235, y=-40,magnitud=13)
	rta_2 = pilas.actores.Texto("",x = -30, y = -40,magnitud=13)
	rta_3 = pilas.actores.Texto("",x = 165, y = -40,magnitud=13)

	#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 = trianguloazar


	#cajas falsas
	if caja1.esverdadera:
		rta_2.texto =  random.choice(nombrestriangulos)
		rta_3.texto =  random.choice(nombrestriangulos)
	elif caja2.esverdadera:
			rta_1.texto =  random.choice(nombrestriangulos)
			rta_3.texto =  random.choice(nombrestriangulos)
	elif caja3.esverdadera:
			rta_1.texto =  random.choice(nombrestriangulos)
			rta_2.texto = random.choice(nombrestriangulos)


	mono = pilas.actores.Mono(y=-160)
	mono.aprender(pilas.habilidades.Arrastrable)
	cajas = [caja1,caja2,caja3]

	def respuesta(mono, caja):
		if caja.esverdadera:
			mono.decir("BIEN")
			estrella = pilas.actores.Estrella()
			estrella.x = caja.x
			estrella.y = caja.y
			estrella.escala = 0.2
			estrella.escala = [2, 1] * 2
			puntaje.aumentar()
			pilas.tareas.agregar(2, reiniciar)
		else:
			mono.decir("ERROR")
			pilas.camara.vibrar()
			caja.eliminar()
			# Reinicia el juego pasados los 2 segundos.
			pilas.tareas.agregar(2, reiniciar)



	pilas.colisiones.agregar(mono,cajas,respuesta)


#pilas.tareas.siempre(1, descontar_tiempo) # no veo esta def !

crear_una_nueva_pregunta()

pilas.ejecutar()