import pilasengine
import random
pilas = pilasengine.iniciar()
class EscenaMenu(pilasengine.escenas.Escena):
def iniciar(self):
MenuPrincipal = pilas.fondos.Tarde()
mennu = pilas.actores.Menu([('Iniciar juego', self.iniciar_juego),
('Records', self.records),
('Salir', self.salir_del_juego)])
mennu.color = "rosa"
self._crear_el_titulo_del_juego()
def volveralmenu(self):
pilas.escenas.EscenaMenu()
"""class IngresoTexto(pilasengine.interfaz.ingreso_de_texto):"""
def iniciar_juego(self):
pilas.escenas.EscenaPrincipal()
def records(self):
pilas.escenas.EscenaRecords()
def salir_del_juego(self):
pilas.terminar()
cancion_de_fondo.detener()
def _crear_el_titulo_del_juego(self):
titulo = self.pilas.actores.Texto("MATA PALABRAS", magnitud=30, y=50)
titulo.y = 300
titulo.rotacion = 30
titulo.y = [100], 1
titulo.rotacion = [0], 1.2
palabras_posibles_1 = ["pato","papa","dado","dodo","piso","pizza","gota","gato"]
nivel = 1
indice_palabras = 1
class EscenaPrincipal(pilasengine.escenas.Escena):
def iniciar(self):
##iniciamos la tarea de crear las palabras
self.tarea_crear = pilas.tareas.siempre(4, self.crear_palabras)
##en este caso se crea una palabra cada 2 segundos
self.fondo = pilas.fondos.Cesped()
self.entrada = pilas.interfaz.IngresoDeTexto(texto="",ancho=200,x=0,y=-220)
self.entrada.tiene_el_foco=True
self.puntos = pilas.actores.Puntaje(x=-280,y=220,color=pilas.colores.amarillo)
self.puntos.valor_inicial = "0"
self.contador_retrocesos = 0
self.puntaje_retrocesos = pilas.actores.Puntaje()
self.puntaje_retrocesos.valor_inicial = 0
self.puntaje_retrocesos.x=-280
self.puntaje_retrocesos.y=180
self.puntaje_retrocesos.color=pilas.colores.rojo
pilas.eventos.pulsa_tecla.conectar(self.al_pulsar_retroceso)
def al_pulsar_retroceso(self, tecla):
if tecla.codigo == 16777219:
self.contador_retrocesos +=1
self.puntaje_retrocesos.aumentar(1)
def crear_palabras(self):
global indice_palabras
if indice_palabras < 12:
if nivel == 1:
palabra = random.choice(palabras_posibles_1)
pala = pilas.actores.Texto(palabra, x=pilas.azar(-260,260), y=230)
pala.y=[-250],7
#creadas.append(self.pala.texto)
indice_palabras += 1
def comprobar():##se comprueban las palabras cada 0.2 segundos
## estamos anidando la comprobacion en la misma creacion
if pala.y <= -190:
#creadas.remove(self.pala.texto)
pala.eliminar()
elif self.entrada.texto == pala.texto:
#pala.aprender('puedeexplotar')##DA PROBLEMAS !!!
pala.eliminar()
self.puntos.aumentar()
#creadas.remove(self.pala.texto)
self.entrada.texto=("")
else:
pass
self.tarea_comprobar = pilas.tareas.siempre(0.1, comprobar)
else:
pilas.avisar("Fin del Nivel"+ str(nivel))
self.tarea_crear.terminar()##finalizamos la creacion de palabras
pilas.tareas.agregar(7, self.final_de_nivel)
def final_de_nivel(self):
##finalizamos todas las tareas por si quedaron abiertas
pilas.tareas.eliminar_todas()
tex1 = pilas.actores.Texto("Tu Puntaje fue:",y=200, magnitud=30)
tex1.color=pilas.colores.amarillo
tex2 = pilas.actores.Texto(str(self.puntos.valor), y= 150, magnitud=25)
tex2.color = pilas.colores.Color(255, 255, 0)
tex3 = pilas.actores.Texto("Total de errores:",y=100, magnitud=25)
tex3.color=pilas.colores.rojo
tex4 = pilas.actores.Texto(str(self.contador_retrocesos), y= 60, magnitud=25)
tex4.color = pilas.colores.Color(255, 0, 0)
pilas.escenas.vincular(EscenaPrincipal)
pilas.escenas.EscenaPrincipal()
pilas.escenas.vincular(EscenaMenu)
pilas.escenas.EscenaMenu()
pilas.ejecutar()
Buenas, @jessirodriguez16!
Antes que nada te comento algo que no está en tu pregunta, pero que va a darte problemas:[quote=“jessirodriguez16, post:1, topic:1596”]
pilas.escenas.vincular(EscenaPrincipal)
pilas.escenas.EscenaPrincipal()
pilas.escenas.vincular(EscenaMenu)
pilas.escenas.EscenaMenu()
pilas.ejecutar()
[/quote]
Debes comentar esa linea donde llamas a la escenaprincipal, ya que ahora mismo estás llamando a dos escenas consecutivamente, y lo que tú quieres es que entre directamente a la escena del menú
pilas.escenas.vincular(EscenaPrincipal)
#pilas.escenas.EscenaPrincipal() <-- LINEA COMENTADA
pilas.escenas.vincular(EscenaMenu)
pilas.escenas.EscenaMenu()
pilas.ejecutar()
Ahora entrando a tu duda, la mecánica de este juego no está preparada para comprobar palabras erróneas, sólo si la palabra escrita coincide con la que ha sido creda y va bajando por la pantalla.
Por tanto, si intentas controlar eso va a ser un tanto difícil, ya que la comprobación de la palabra se hace cada 0.1 segundos y va a detectar que la palabra no coincide y te va a dar fallo de palabra cada vez. Habría que cambiar la tarea_comprobar, y en vez de hacer la comprobación automáticamente añadirle que la palabra se compruebe (por ejemplo) al pulsar la tecla de ENTER.
Por tanto, deberías anular esta linea:
self.tarea_comprobar = pilas.tareas.siempre(0.1, comprobar)
y crear una def pulsa_tecla dentro de la def comprobar() (como la que comprueba el borrado, pero con la tecla ENTER). De esta manera al pulsar ENTER se comprueba si la palabra es correcta, y en caso de que no sea así se pierda una vida (hay que crear tambien la variable self.vidas e iniciarla en 3 en la def iniciar de la escena del juego)
Otra opción sería aprovechar que el código ya tiene un control de cuantas veces se pulsa la tecla de retroceso (borrado). Podrías aprovechar esto y añadir que si el valor del contador de retrocesos es, por ejemplo 10, se acabe el juego y muestre un mensaje de que perdiste.
EDITO PARA AÑADIR:
Otra opción sería que si las palabras que llegan abajo de la pantalla sin haberse destruido fueran sumando, y al llegar por ejemplo a 10 se acabara la partida.
Creo que sería interesante el implementar varios métodos de “perder” (palabras erróneas, cuantas veces se usa el retroceso, y cuantas palabras llegaron abajo de la pantalla sin ser destruidas) por que haría el juego mucho más completo y difícil.
Un saludo!
self.tarea_comprobar = pilas.tareas.siempre
def vidasdadas=(self,tecla)
if tecla.codigo == 6
- en la parte de comprobar como coloco pilas.tareas.siempre (enter, comprobar)
y abajo definir ? vidasdadas < 0 y asi ? - estuve viendo y a vidas primero la crean en class y despues la definen, pero creo que seria mas complejo
MUCHAS GRACIAS POR RESPONDER, soy nueva en todo esto
Buenas, @jessirodriguez16
Como ya te he dicho, debes anular esa linea (con anular me refiero a borrarla del todo).
Despues debes crear una def pulsa_tecla() que compruebe si se pulsó la tecla ENTER y llame a esa def comprobar.
Y debes poner las vidas en la def iniciar(self) de la EscenaPrincipal para poderle hacer referencia más tarde.
self.vidas=3
Un saludo.
import pilasengine
import random
pilas = pilasengine.iniciar()
class EscenaMenu(pilasengine.escenas.Escena):
def iniciar(self):
MenuPrincipal = pilas.fondos.Tarde()
mennu = pilas.actores.Menu([('Iniciar juego', self.iniciar_juego),
('Records', self.records),
('Salir', self.salir_del_juego)])
mennu.color = "amarillo"
self._crear_el_titulo_del_juego()
def volveralmenu(self):
pilas.escenas.EscenaMenu()
"""class IngresoTexto(pilasengine.interfaz.ingreso_de_texto):"""
def iniciar_juego(self):
pilas.escenas.EscenaPrincipal()
def records(self):
pilas.escenas.EscenaRecords()
def salir_del_juego(self):
pilas.terminar()
cancion_de_fondo.detener()
def _crear_el_titulo_del_juego(self):
titulo = self.pilas.actores.Texto("MATA PALABRAS", magnitud=30, y=50)
titulo.y = 300
titulo.rotacion = 30
titulo.y = [100], 1
titulo.rotacion = [0], 1.2
palabras_posibles_1 = ["mama","papa","dado","flor","piso","cama","puma","nene"]
nivel = 1
indice_palabras = 1
#creadas = [] NO HACE FALTA !!!
class EscenaPrincipal(pilasengine.escenas.Escena):
def iniciar(self):
##iniciamos la tarea de crear las palabras
self.tarea_crear = pilas.tareas.siempre(4, self.crear_palabras)
##en este caso se crea una palabra cada 2 segundos
self.fondo = pilas.fondos.Cesped()
self.vidas= 3
self.entrada = pilas.interfaz.IngresoDeTexto(texto="",ancho=200,x=0,y=-220)
self.entrada.tiene_el_foco=True
self.puntos = pilas.actores.Puntaje(x=-280,y=220,color=pilas.colores.amarillo)
self.puntos.valor_inicial = "0"
self.contador_retrocesos = 0
self.puntaje_retrocesos = pilas.actores.Puntaje()
self.puntaje_retrocesos.valor_inicial = 0
self.puntaje_retrocesos.x=-280
self.puntaje_retrocesos.y=180
self.puntaje_retrocesos.color=pilas.colores.rojo
pilas.eventos.pulsa_tecla.conectar(self.al_pulsar_retroceso)
def al_pulsar_retroceso(self, tecla):
if tecla.codigo == 16777219:
self.contador_retrocesos +=1
self.puntaje_retrocesos.aumentar(1)
#print(str(self.contador_retrocesos))
def tecla_enter(self, enter)
if tecla.enter == 6
self.comprobar <= pala.texto
self.vidas -=1
def crear_palabras(self):##se crean las palabras
global indice_palabras
if indice_palabras < 10:#ponemos un límite al tiempo de juego
if nivel == 1:
palabra = random.choice(palabras_posibles_1)
pala = pilas.actores.Texto(palabra, x=pilas.azar(-260,260), y=230)
pala.y=[-250],7
#creadas.append(self.pala.texto)
indice_palabras += 1
def comprobar():##se comprueban las palabras cada 0.2 segundos
## estamos anidando la comprobacion en la misma creacion
if pala.y <= -190:
#creadas.remove(self.pala.texto)
pala.eliminar()
elif self.entrada.texto == pala.texto:
#pala.aprender('puedeexplotar')##DA PROBLEMAS !!!
pala.eliminar()
self.puntos.aumentar()
#creadas.remove(self.pala.texto)
self.entrada.texto=("")
else:
pass
self.tarea_comprobar = pilas.tareas.siempre(0.1, comprobar)
else:
pilas.avisar("Fin del Nivel"+ str(nivel))
self.tarea_crear.terminar()##finalizamos la creacion de palabras
pilas.tareas.agregar(7, self.final_de_nivel)
def final_de_nivel(self):
##finalizamos todas las tareas por si quedaron abiertas
pilas.tareas.eliminar_todas()
tex1 = pilas.actores.Texto("Tu Puntaje fue:",y=200, magnitud=30)
tex1.color=pilas.colores.amarillo
tex2 = pilas.actores.Texto(str(self.puntos.valor), y= 150, magnitud=25)
tex2.color = pilas.colores.Color(255, 255, 0)
tex3 = pilas.actores.Texto("Total de errores:",y=100, magnitud=25)
tex3.color=pilas.colores.rojo
tex4 = pilas.actores.Texto(str(self.contador_retrocesos), y= 60, magnitud=25)
tex4.color = pilas.colores.Color(255, 0, 0)
pilas.escenas.vincular(EscenaPrincipal)
pilas.escenas.EscenaPrincipal()
pilas.escenas.vincular(EscenaMenu)
pilas.escenas.EscenaMenu()
pilas.ejecutar()
cree la definicion de enter y puse como usted me dijo self vidas, pero no me aparecieron las vidas y al final cuando sale el puntaje no vuelve a la pantalla de inicio