tengo un problema a la hora de crear un juego y no se como solucionarlo…
funciona todo pero me salta un error cuando quiero entrar en la escena de juego.
> import pilasengine
> pilas = pilasengine.iniciar()
> MENSAJE_AYUDA = """
> En Space Atack, controlas una nave
> utilizando el teclado.El objetivo del
> juego es disparar a los asteroides
> y ovnis evitando que golpeen tu nave.
> Para disparar debes que usar la
> barra espaciadora y para mover la
> nave debes usar las flechas del teclado.
> """
> class Estado:
> def actualizar(self):
> pass
> class Jugando(Estado):
> def __init__(self,juego,nivel):
> self.nivel = nivel
> self.juego = juego
> self.juego.crear_piedras(cantidad=nivel*3)
> pilasengine.tareas.agregar(1,self.actualizar)
> def actualizar(self):
> if self.juego.ha_eliminado_todas_las_piedras():
> self.juego.cambiar_estado(Iniciando(self.juego,self.nivel+1))
> return False
> return True
> class Iniciando(Estado):
> def __init__(self,juego,nivel):
> self.texto = pilasengine.actores.Texto("Iniciando el nivel %d" %(nivel))
> self.nivel = nivel
> self.texto.color = pilasengine.colores.blanco
> self.contador_de_segundos = 0
> self.juego = juego
> pilasengine.tareas.agregar(1,self.actualizar)
>
> def actualizar(self):
> self.contador_de_segundos += 1
> if self.contador_de_segundos > 2:
> self.juego.cambiar_estado(Jugando(self.juego,self.nivel))
> self.texto.eliminar()
> return False
> return True
>
> class PierdeVida(Estado):
> def __init__(self,juego):
> self.contador_de_segundos = 0
> self.juego = juego
> if self.juego.contador_de_vidas.le_quedan_vidas():
> self.juego.contador_de_vidas.quitar_una_vida()
> pilasengine.tareas.agregar(1,self.actualizar)
> else:
> juego.cambiar_estado(PierdeTodoElJuego(juego))
> def actualizar(self):
> self.contador_de_segundos += 1
> if self.contador_de_segundos > 2:
> self.juego.crear_nave()
> return False
> return True
>
> class PierdeTodoElJuego(Estado):
> def __init__(self,juego):
> mensaje = pilasengine.actores.Texto("Lo siento, has perdido!")
> mensaje.color = pilasengine.colores.blanco
> mensaje.abajo = 240
> mensaje.abajo = [-20]
> def actualizar(self):
> pass
> class PiedraEspacial(pilasengine.actores.Piedra):
> "Represena una piedra espacial que se puede romper con un disparo."
>
> def __init__(self,piedras,x=0,y=0,tamano = "grande"):
> posibles_velocidades = range(-10,-2)+range(2,10)
> dx = random.choice(posibles_velocidades)/10.0
> dy = random.choice(posibles_velocidades)/10.0
> pilasengine.actores.Piedra.__init__(self,x=x,y=y,dx=dx,dy=dy,tamano=tamano)
> self.tamano = tamano
> self.piedras = piedras
>
> def eliminar(self):
> "Este metodo se invoca cuando el disparo colisiona con el objetivo."
> pilasengine.actores.Explosion(self.x,self.y)
> pilasengine.actores.Piedra.eliminar(self)
> if self.tamano == "grande":
> self.crear_dos_piedras_mas_pequenas(self.x,self.y,"media")
> elif self.tamano == "media":
> self.crear_dos_piedras_mas_pequenas(self.x,self.y,"chica")
> def crear_dos_piedras_mas_pequenas(self,x,y,tamano):
> "Genera dos piedras mas chicas, enemigas de la nave."
> piedra_1 = PiedraEspacial(self.piedras,x=x,y=y,tamano=tamano)
> piedra_2 = PiedraEspacial(self.piedras,x=x,y=y,tamano=tamano)
> self.piedras.append(piedra_1)
> self.piedras.append(piedra_2)
> class ContadorDeVidas:
> def __init__(self,cantidad_de_vidas):
> self.crear_texto()
> self.cantidad_de_vidas = cantidad_de_vidas
> self.vidas = [pilas.actores.Actor("data/vida.png")for x in range(cantidad_de_vidas)]
> for indice,vida in enumerate(self.vidas):
> vida.x = -230+indice*30
> vida.arriba = 230
> def crear_texto(self):
> "Genera el texto que dice 'vidas'"
> self.texto = pilasengine.actores.Texto("Vidas:")
> self.texto.color = pilasengine.colores.blanco
> self.texto.magnitud = 20
> self.texto.izquierda = -310
> self.texto.arriba = 220
> def le_quedan_vidas(self):
> self.cantidad_de_vidas -= 1
> vida = self.vidas.pop()
> vida.eliminar()
> class Enemigo(pilasengine.actores.Bomba):
> def iniciar(self):
> pilasengine.actores.Bomba.iniciar(self)
> self.abajo = 320
> self.y = random.randint(-210, 210)
> def actualizar(self):
> self.y -= 5
> pilasengine.actores.Bomba.actualizar(self)
> class Item(pilasengine.actores.Actor):
> def iniciar(self):
> self.imagen = 'estrella.png'
> self.escala = 0.5
> self.abajo = 320
> self.x = random.randint(-210, 210)
>
> def actualizar(self):
> self.abajo -= 5
> if self.arriba < -320:
> self.eliminar()
> class Ayuda(pilasengine.escenas.Escena):
> "Es la escena que da instrucciones de como jugar."
> def iniciar(self):
> pilas.fondos.Fondo("DATA/ayuda.png")
> self.crear_texto_ayuda()
> self.pulsa_tecla_escape.conectar(self.cuando_pulsa_tecla)
>
> def crear_texto_ayuda(self):
> pilas.actores.Texto("Ayuda",y = 200)
> pilas.actores.Texto(MENSAJE_AYUDA, y = 0)
> pilas.avisar("Pulsa ESC para recresar")
>
> def cuando_pulsa_tecla(self, *k, **kw):
> pilas.escenas.MenuPrincipal()
>
> class Jugar(pilasengine.escenas.Escena):
>
> def iniciar(self):
> pilas.fondos.Espacio()
> self.piedras = []
> self.crear_nave()
> self.crear_contador_de_vidas()
> self.cambiar_estado(Iniciando(self,1))
> self.puntaje = pilasengine.actores.Puntaje(x=280,y=220,color=pilasengine.colores.blanco)
> self.pulsa_tecla_escape.conectar(self.volver_al_menu_principal)
> def cambiar_estado(self,estado):
> self.estado = estado
>
> def crear_nave(self):
> nave = pilas.actores.NaveRoja()
> nave.aprender(pilas.habilidades.SeMantieneEnPantalla)
> nave.definir_enemigos(self.piedras,self.cuando_explota_asteroide)
> pilas.colisiones.agregar(nave,self.piedras, self.explotar_y_terminar)
> nave.y = -200
> nave.escala = 0.5
>
>
> def cuando_explota_asteroide(self):
> puntos.aumentar(10)
> puntos.escala = 2
> puntos.escala = [1], 0.2
> puntos.rotacion = random.randint(30, 60)
> puntos.rotacion = [0], 0.2
> def crear_contador_de_vidas(self):
> self.contador_de_vidas = ContadorDeVidas(3)
>
> def explotar_y_terminar(self,nave,piedra):
> "Responde a la colision entre la nave y una piedra."
> nave.eliminar()
> self.cambiar_estado(PierdeVida(self))
> def crear_piedras(self,cantidad):
> fuera_de_la_pantalla = [-600,-650,-700,-750,-800]
> tamanos = ["grande","media","chica"]
> for x in range(cantidad):
> x = random.choice(fuera_de_la_pantalla)
> y = random.choice(fuera_de_la_pantalla)
> t = random.choice(tamanos)
> piedra_nueva = PiedraEspacial(self.piedras,x=x,y=y,tamano=t)
> self.piedras.append(piedra_nueva)
> def ha_eliminado_todas_las_piedras(self):
> return len(self.piedras) == 0
> def volver_al_menu_principal(self, *k, **kw):
> pilas.escenas.MenuPrincipal()
> import random
> class MenuPrincipal(pilasengine.escenas.Escena):
>
> def crear_titulo_del_juego(self):
> logotipo = pilas.actores.Texto("Space Atack")
> logotipo.magnitud = 50
> logotipo.y = 300
> logotipo.y = [200]
>
> def comenzar_a_jugar(self):
> pilas.escenas.Jugar()
>
> def menu_ayuda(self):
> pilas.escenas.Ayuda()
>
> def salir_del_juego(self):
> pilas.terminar()
> def menu_principal(self):
> opciones_menu = [("Jugar",self.comenzar_a_jugar),("Ayuda",self.menu_ayuda),("Salir",self.salir_del_juego)]
> self.menu = pilas.actores.Menu(opciones_menu, y = -50)
>
> def iniciar(self):
> pilas.fondos.Galaxia()
> self.crear_titulo_del_juego()
> pilas.avisar(u"Use el teclado para controlar el menu.")
> self.menu_principal()
> self.crear_asteroides()
> def crear_asteroides(self):
> fuera_de_la_pantalla = [-600,-650,-700,-750,-800]
>
> for x in range(5):
> x = random.choice(fuera_de_la_pantalla)
> y = random.choice(fuera_de_la_pantalla)
>
> PiedraEspacial([],x=x,y=y,tamano="chica")
>
> pilas.actores.vincular(PiedraEspacial)
> pilas.escenas.vincular(Ayuda)
> pilas.escenas.vincular(Jugar)
> pilas.escenas.vincular(MenuPrincipal)
> pilas.escenas.MenuPrincipal()
> pilas.ejecutar()