Dos dudas y podre terminar el juego

Hola Comunidad, estoy terminando mi juego con pilas, me pidieron un juego educativo para la facultad y ya casi lo estoy terminando, se trata sobre una nave donde debe disparar a los numeros pares e impares. Los pares suman puntos y los impares restan, pero hay meteoritos y un enemigo que te persigue.

En primer lugar :
Lo que me faltan es saber como hacer que mi actor tenga 3 vidas y que cada vez que me choque un enemigo te descuente 1 vida.

En segundo lugar:
tenia pensado que cuando la nave explote me tire "TU PUNTAJE ES : XXX "

Aclaro que todo el juego lo hice sin class (clases) , por eso queria saber si pueden darme un ejemplo sencillo!! perdón por las molestias. Saludos

Pude hacer aparecer las tres vidas como actores,pero como hago que se eliminen cada vez que explota y ademas que la nave despues de cada vida sea inmune a los enemigos con un tiempo de 5 segundos por ejemplo!!

vida1= pilas.actores.Actor()
vida1.imagen = "nave1.png"
vida1.escala = 0.02
vida1.rotacion = 90
vida1.x = -300
vida1.y = 220

vida2 = pilas.actores.Actor()
vida2.imagen = "nave1.png"
vida2.escala = 0.02
vida2.rotacion = 90
vida2.x = -270
vida2.y = 220


vida3 = pilas.actores.Actor()
vida3.imagen = "nave1.png"
vida3.escala = 0.02
vida3.rotacion = 90
vida3.x = -240
vida3.y = 220

Buenas, @Guille_Diaz !

por Diós… si es que no me das tiempo a responder que ya me haces otra pregunta :joy:

Aquí te dejo un ejemplo sobre tu primera pregunta…

import pilasengine

pilas = pilasengine.iniciar()

mono = pilas.actores.Mono()

mono.vidas = 3

mono.aprender('arrastrable')

mono.colisionable = True

aceitu = pilas.actores.Aceituna(y=-200)

banana = pilas.actores.Banana()*10

puntos = pilas.actores.Puntaje(x= 250,y=200)
puntos.valor_inicial = 0

def restar_vida(mico, oliva):
	
	if mico.colisionable:
		mico.gritar()
	
		if mico.vidas>1:
			mico.vidas -=1
			pilas.avisar('vidas restantes = ' + str(mono.vidas))
	
		else:
			mico.colisionable = False
			
			text = pilas.actores.Texto('Tu puntaje es: ')
		
			textpuntos = pilas.actores.Texto(str(puntos.valor))
			textpuntos.y = -50
	else:
		pass

def sumar_puntos(mico, bana):
	
	if mico.colisionable:
		mico.sonreir()
		bana.eliminar()
		puntos.aumentar(10)
	
	else:
		pass


pilas.colisiones.agregar('Mono', 'Aceituna', restar_vida)

pilas.colisiones.agregar('Mono', 'Banana', sumar_puntos)


pilas.ejecutar()

En cuanto a la segunda consulta, puedes ver en el ejemplo que no hace falta crear las “vidas” como actores… simplemente se le da ese valor al actor

mono.vidas = 3

y podrias aprovechar el valor “mono.colisionable = False” para que durante cierto tiempo no pueda ser colisionado.

Un saludo! :wink:

Muchas gracias jordi , jajajajajaajaj perdón por la segunda pregunta, es que pense que estaba cerca de encontrarlo, me ha sido de mucha ayuda!! enserio gracias!!

Con respecto a lo de cierto tiempo para que no pueda ser colisionado como tendría que hacer ?

Buenas, @Guille_Diaz !

Siguiendo el ejemplo anterior, y basándome en un post anterior contestado por Hugo, aquí dejo el ejemplo completo con colisiones, tiempo de inmunidad y puntaje.

Verás que sigo con mi estilo, y en vez de programar variables y funciones le asigno al actor mono diferentes valores según mi conveniencia (colisionable, vidas, colisionable_con_bananas, tiempo_inmune…). Esto lo hago así por que me parece mucho más fácil de manejar al realizar las colisiones, y no tener que estar declarando variables globales.

Espero que sea lo que estabas pidiendo…

Un saludo. :wink:

import pilasengine

pilas = pilasengine.iniciar()

mono = pilas.actores.Mono()

mono.vidas = 3
mono.aprender('arrastrable')
mono.colisionable = True
mono.colisionable_con_bananas = True
mono.tiempo_inmune = 5

aceitu = pilas.actores.Aceituna(y=-200)

banana = pilas.actores.Banana()*10

puntos = pilas.actores.Puntaje(x= 250,y=200)
puntos.valor_inicial = 0


def restar_vida(mico, oliva):
	
	if mico.colisionable:
		mico.gritar()
	
		if mico.vidas>1:
			mico.vidas -=1
			
			mico.colisionable = False
			
			pilas.avisar('Inmune durante 5 segundos... vidas restantes = ' + str(mono.vidas))
	
			contador = pilas.actores.Texto("5")
			
			# Esta funcion se ejecutara 1 vez por segundo
			def descontar_tiempo():
				
				mico.tiempo_inmune -= 1
        
				if mico.tiempo_inmune > 0:
					contador.texto = str(mico.tiempo_inmune) # tiempo es un numero, asi que lo tenemos que convertir a texto con str.
									
				if mico.tiempo_inmune == 0:
					mico.colisionable = True
					
					tarea_descontar.eliminar()
					
					mico.tiempo_inmune = 5
					
					contador.eliminar()
					    

			# le indicamos a pilas que llame a la funcion cada 1 segundo
			tarea_descontar = pilas.tareas.siempre(1, descontar_tiempo)
		
		
		else:
			mico.colisionable = False
			mico.colisionable_con_bananas = False
			
			text = pilas.actores.Texto('GAME OVER',magnitud = 50)
		
			textpuntos = pilas.actores.Texto(u'Tu puntuación: '+ str(puntos.valor))
			textpuntos.y = -50
	else:
		pass

	
def sumar_puntos(mico, bana):
	
	if mico.colisionable_con_bananas:
		mico.sonreir()
		bana.eliminar()
		puntos.aumentar(10)
	
	else:
		pass


pilas.colisiones.agregar('Mono', 'Aceituna', restar_vida)

pilas.colisiones.agregar('Mono', 'Banana', sumar_puntos)


pilas.ejecutar()