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
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!
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.
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()