Juego completo sin usar "class"

Hola a todos… tengo un problema. para la facultad tengo que crear un juego pero no me dejan usar CLASS ( no se porque) mas o menos lo tengo, mi problema es que cuando creo los actores me aparecen en pantalla pero cuando los creo dentro de una función dejan de aparecer. como se soluciona eso?? muchas gracias por leer.

 pilas.escenas.Normal ()
    pilas.fondos.Fondo("data/casa.png.")
    puntaje = pilas.actores.Puntaje(color = pilas.colores.amarillo)
    puntaje.x = 200
    puntaje.y = 180
    def crear_miactor():                   
        esponja=pilas.actores.Actor()	
        esponja.imagen=pilas.imagenes.cargar("data/bob2.png")
        esponja.escala = 0.25
        esponja.y = -144
        esponja.aprender(pilas.habilidades.MoverseConElTeclado)
    def crear_hambuerguesa():
        hamburguesa = pilas.actores.Aceituna()
        hamburguesa.imagen = ("data/hambu.png")
        
    def crear_medusas():
        medusa = pilas.actores.Banana()
        medusa.imagen = ("data/medusin")
###coding utf8###

import pilasengine
pilas = pilasengine.iniciar()

#pilas.escenas.Normal ()


pilas.fondos.Tarde()#Fondo("data/casa.png.")
puntaje = pilas.actores.Puntaje(color = pilas.colores.amarillo)
puntaje.x = 200
puntaje.y = 180
def crear_miactor():                   
	esponja=pilas.actores.Mono()	
	#esponja.imagen=pilas.imagenes.cargar("data/bob2.png")
	esponja.escala = 0.25
	esponja.y = -144
	esponja.aprender('MoverseConElTeclado')
def crear_hambuerguesa():
	hamburguesa = pilas.actores.Aceituna()
	#hamburguesa.imagen = ("data/hambu.png")
	
def crear_medusas():
	medusa = pilas.actores.Banana()
	#medusa.imagen = ("data/medusin")

crear_miactor()
crear_hambuerguesa()
crear_medusas()

Buenas, @Maria !

Para crear los actores, hay que hacer una llamada a las defs que los contienen e inicializan.

Otra cosa a considerar en tu código es la versión de pilas que estás usando…[quote=“jordinur, post:2, topic:1127”]
###coding utf8###

import pilasengine
pilas = pilasengine.iniciar()
[/quote]

En las versiones modernas de Pilas se empieza siempre el código con esas líneas, y ya NO se usa el pilas.escenas.Normal(). Quizás por algún motivo que no comprendo estés usando una versión antigua de Pilas-Engine ?

Un saludo :wink:

muchas gracias jordinur!! no se porque la verdad, tenia todo el juego listo y tengo que modificarlo. te sigo molestando.
cuando creo los actores no se como hacer para que bob "se coma " las hamburguesas , ni como hacer que ambos actores ( hamburguesas y medusas)caigan desde lo mas alto de la pantalla, en todo el ancho y desaparezcan en mas o menos y= -300 . lo escribí pero no me funciona, algo debo estar haciendo mal.

import pilasengine
def iniciar_juego():
global esponja
global hamburguesa
global medusa

pilas.escenas.Normal ()
pilas.fondos.Fondo("data/casa.png.")
puntaje = pilas.actores.Puntaje(color = pilas.colores.amarillo)
puntaje.x = 200
puntaje.y = 180
def crear_miactor():                   
    esponja=pilas.actores.Actor()	
    esponja.imagen=pilas.imagenes.cargar("data/bob2.png")
    esponja.escala = 0.25
    esponja.y = -144
    esponja.aprender(pilas.habilidades.MoverseConElTeclado)
def crear_hamburguesa():
    hamburguesa = pilas.actores.Pelota()
    hamburguesa.imagen = ("data/hambu.png")
    hamburguesa.y = 250
    hamburguesa.escala = 0.25
    hamburguesa.x = pilas.azar(-250,250)
    
    if hamburguesa.y < -400:
        hamburguesa.eliminar()
  
    

def crear_medusas():
    medusa = pilas.actores.Pelota()
    medusa.imagen = ("data/medusin.png")
    medusa.escala = 0.25


def comer_rico(crear_miactor , crear_hamburguesa):
  
    crear_hamburguesa.eliminar()
    puntaje.aumentar(10)

def comer_feo(crear_miactor , crear_medusas) :
    crear_miactor.eliminar()
    sonido_de_musica.detener()
    texto = pilas.actores.Texto("P E R D I S T E")
    texto.color = pilas.colores.Color(0, 0, 0)

pilas.colisiones.agregar("crear_miactor",  "crear_hamburguesa" , comer_rico)
pilas.colisiones.agregar("crear_miactor", "crear_medusas" , comer_feo)


  
TSK = pilas.tareas.siempre(1 , crear_hamburguesa)
TSL = pilas.tareas.siempre(3 , crear_medusas)
crear_miactor()

Gracias por la ayuda.

Buenas, @Maria !

No es molestia en absoluto…

Observo que has programado las colisiones entre METODOS ( def), cuando las colisones deben darse entre ACTORES. Por tanto es normal que no te funcionen.

No lo he testado, pero prueba a programar las colisiones entre actores a ver si eso te resulta

pilas.colisiones.agregar(miactor, hamburguesa , comer_rico)
pilas.colisiones.agregar(miactor, medusas, comer_feo)

Insisto en que si estás usando la versión moderna de PIlasEngine al principio debes poner las siguientes lineas:

import pilasengine
pilas=pilasengine.iniciar()

Al final del todo del código debes poner:

pilas.ejecutar()

y que NO es necesario poner la escena Normal()

Haz esos cambios a ver si resultan y ya pasamos al tema de crear los actores que caigan desde arriba.

Un saludo! :wink:

Hola…
el escenas Normal() lo puse porque el juego antes tiene un iniciar juego con un cartel como si fuera la presentación

intente lo que me dijo pero no me funciona.
acá le dejo el juego entero: la idea es que caigan desde la cima las hamburguesas y las medusas, que cuando lleguen al final las hamburguesas que no se comieron desaparezcan y las que se come esponja sumen puntos mientras que si se come una medusa termina el juego. ( con el class seria todo mucho mas fácil). capaz el error lo tengo en otro lado

import pilasengine
pilas = pilasengine.iniciar()
def iniciar_juego():
    global esponja
    global hamburguesa
    global medusa
        	      
    pilas.escenas.Normal()
    pilas.fondos.Fondo("data/casa.png.")
    puntaje = pilas.actores.Puntaje(color = pilas.colores.amarillo)
    puntaje.x = 200
    puntaje.y = 180
    def crear_miactor():                   
        esponja=pilas.actores.Actor()	
        esponja.imagen=pilas.imagenes.cargar("data/bob2.png")
        esponja.escala = 0.25
        esponja.y = -144
        esponja.aprender(pilas.habilidades.MoverseConElTeclado)
    def crear_hamburguesa():
        hamburguesa = pilas.actores.Pelota()
        hamburguesa.imagen = ("data/hambu.png")
        hamburguesa.y = 250
        hamburguesa.escala = 0.25
        hamburguesa.x = pilas.azar(-250,250)
        
        if hamburguesa.y < -400:
            hamburguesa.eliminar()
      
        
    
    def crear_medusas():
        medusa = pilas.actores.Pelota()
        medusa.imagen = ("data/medusin.png")
        medusa.escala = 0.25


    def comer_rico(crear_miactor , crear_hamburguesa):
      
        crear_hamburguesa.eliminar()
        puntaje.aumentar(10)
    
    def comer_feo(crear_miactor , crear_medusas) :
        crear_miactor.eliminar()
        sonido_de_musica.detener()
        texto = pilas.actores.Texto("P E R D I S T E")
        texto.color = pilas.colores.Color(0, 0, 0)
        
        
    pilas.colisiones.agregar("esponja",  "hamburguesa" , comer_rico)
    pilas.colisiones.agregar("miactor", "medusa" , comer_feo)
    
    
      
    TSK = pilas.tareas.siempre(5 , crear_hamburguesa)
    TSL = pilas.tareas.siempre(100 , crear_medusas)
    crear_miactor()
 	
                
def instrucciones_juego():
	
    pilas.escenas.Normal()
    texto = pilas.actores.Texto("Instrucciones")
    texto.color = pilas.colores.Color(0, 0, 0)
    texto.y = 150
    texto.x = 0
    
    texto1 = pilas.actores.Texto("Atrapa las hamburguesas")
    texto1.color = pilas.colores.Color(0, 0, 0)
    texto.escala = 1.5
    texto1.escala = 0.5
    texto1.y = 65
    texto1.x = 40
    in1 = pilas.actores.Aceituna()
    in1.imagen = "data/hambu.png."
    in1.escala = 0.3
    in1.x = -100
    in1.y = 65
    texto2 = pilas.actores.Texto("Evita las medusas")
    texto2.color = pilas.colores.Color(0, 0, 0)
    texto2.escala = 0.5 
    texto2.x = 20
    in2 = pilas.actores.Banana()
    in2.imagen = "data/medusin.png."
    in2.escala = 0.3
    in2.x = -100
    in2.y = -5
    
    in3 = pilas.actores.Estrella()
    in3.imagen = "data/bob1.png."
    in3.escala = 0.2
    in3.x = 115
    in3.y = -100
    
    ins = pilas.interfaz.Boton("S")
    ins.x = -100
    ins.y = -75
    textoins = pilas.actores.Texto("Salir")
    textoins.color = pilas.colores.Color(0, 0, 0)
    textoins.escala = 0.5
    textoins.x = 20
    textoins.y = -75
    
    ini = pilas.interfaz.Boton("I")
    ini.x = -100
    ini.y = -130
    textoini = pilas.actores.Texto(" instrucciones ")
    textoini.color = pilas.colores.Color(0, 0, 0)
    textoini.escala = 0.5
    textoini.x = 20
    textoini.y = -130
    
    
    salir1 = pilas.interfaz.Boton("salir")
    salir1.conectar(salir_juego)
    salir1.y = -175
    
    pilas.fondos.Fondo("data/die.png.")
    
def salir_juego():
	pilas.escenas.Normal()
	pilas.fondos.Fondo("data/juegoi.png.")
	textofinal = pilas.actores.Texto(" Gracias por jugar conmigo ")
	textofinal.color = pilas.colores.Color(255, 0, 0, 128)
	textofinal.x = 80
	textofinal.y = 100
	salir = pilas.interfaz.Boton("salir")
	salir.conectar(salida)
	salir.y = -150
	salir.x = 200
def salida ():
    pilas.terminar()
	
pilas = pilasengine.iniciar(500, 400)
mono = pilas.actores.Mono()
mono.eliminar()

pilas.fondos.Fondo("data/lau.png.")

cartel= pilas.actores.Banana()
cartel.imagen = "data/cartel.png."
cartel.escala = 0.3
cartel.x = -2
cartel.y = 132

sonido_de_musica = pilas.musica.cargar("data/bob.wav")
sonido_de_musica.reproducir(repetir=True)

    
pilas.actores.Menu( [ ( " Iniciar Juego" , iniciar_juego ) , ( " Instrucciones " , instrucciones_juego ) , ( " Salir " , salida ) , ] )
                        
pilas.ejecutar()

Buenas, @Maria !

Antes que nada, disculpa por decirte que quitaras el

pilas.escenas.Normal()

ya que testando tu código me he dado cuenta de su utilidad, al iniciar una nueva “escena” en un juego sin escenas.

Seguro que el hecho de no poder usar class en tu juego limita algunas funcionalidades, pero me has demostrado que es posible hacer un juego con menú en Pilas-Engine sin necesidad de usar ninguna class. Nunca es tarde para aprender, y yo agradezco cada nueva oportunidad de hacerlo que este foro me aporta. En este sentido tu código me ha enseñado unas cuantas cosas que hasta ahora desconocia!

Pero pasemos a lo que interesa, que es la corrección de algunas cosas que no te funcionaban. Más abajo te expongo tu código con algunas modificaciones.

Lo primero, las colisiones. Verás que he modificado tu actor principal, y le he cambiado de “Actor” a “Mono”. Esto es para poder usar las etiquetas en las colisiones. Tus actores ahora son “mono”, “pelota” y “aceituna”, y eso nos permite usar las etiquetas para detectar las colisiones. Te recomiendo que repases este tema en el manual de Pilas_Engine…

Lo segundo, que “aceituna” no usa el motor de física, lo que nos permite eliminarlo si sale de pantalla, simplemente aprendiendo esa habilidad.

Lo tercero, “pelota” si usa el motor de física y tiene programado el rebote al tocar con las paredes y el suelo, por lo que para eliminarlo he usado una simple tarea, en la que es eliminada al cabo de unos segundos.

Algunos cambios menores para lograr una funcionalidad más fluida, algunas def nuevas que lo unifican mejor todo… bueno echa un vistazo y decide tú misma si es lo que tú buscabas y si te sirve…

Verás que he anulado todas las líneas que hacen referencia a la música, las imágenes de actores, y los fondos. Esto ha sido simplemente para poder testar tu código, ya que yo no tengo esos ficheros y me daría error.

Mención especial al actor principal:

def crear_miactor():                   
        esponja=pilas.actores.Mono() #Actor()	
        #esponja.imagen=pilas.imagenes.cargar("data/bob2.png")
        esponja.escala = 0.25
        esponja.y = -144
        esponja.aprender('MoverseConElTeclado')
        esponja.aprender('LimitadoABordesDePantalla')
        esponja.radio_de_colision= 20
        esponja.aprender('puedeexplotar')

ya que le he limitado para que no salga de pantalla, que explote al morir, y le he cambiado el radio de colisión (que era demasiado grande). Si al volver a usar tu imagen el radio de colisión es demasiado grande o demasiado pequeño podrás modificarlo desde ahí.

Bueno, seguro que aún quedan muchos ajustes por hacer, pero espero que esto sirva como punto de partida, y como ejemplo a futuras personas que no puedan usar “class” por exigencias de sus profesores :wink:

###coding utf8###

import pilasengine
pilas = pilasengine.iniciar(500,400)

def entrada():
	pilas.escenas.Normal()
	pilas.actores.Menu( [ ( " Iniciar Juego" , iniciar_juego ) , ( " Instrucciones " , instrucciones_juego ) , ( " Salir " , salida ) , ] )
	
	#mi_fondo = pilas.fondos.Fondo("data/lau.png.")
	cartel= pilas.actores.Banana()
	#cartel.imagen = "data/cartel.png."
	cartel.escala = 0.3
	cartel.x = -2
	cartel.y = 132

def iniciar_juego():
    
    pilas.escenas.Normal()
    #pilas.fondos.Fondo("data/casa.png.")
    puntaje = pilas.actores.Puntaje(color = pilas.colores.amarillo)
    puntaje.x = 200
    puntaje.y = 180
    
    def crear_miactor():                   
        esponja=pilas.actores.Mono()#Actor()	
        #esponja.imagen=pilas.imagenes.cargar("data/bob2.png")
        esponja.escala = 0.25
        esponja.y = -144
        esponja.aprender('MoverseConElTeclado')
        esponja.aprender('LimitadoABordesDePantalla')
        esponja.radio_de_colision= 20
        esponja.aprender('puedeexplotar')
    
    def crear_hamburguesa():
                
        hamburguesa = pilas.actores.Pelota(x = pilas.azar(-250,250), y = 180)
        #hamburguesa.imagen = ("data/hambu.png")
        hamburguesa.escala = 0.25
        
        def eliminar_hamburguesa():
			hamburguesa.eliminar()
        
        pilas.tareas.agregar(4,eliminar_hamburguesa)       
                      
    def crear_medusas():
        medusa = pilas.actores.Aceituna(x = pilas.azar(-250,250), y = 200)
        medusa.y = [200,-220],3
        #medusa.imagen = ("data/medusin.png")
        medusa.escala = 0.25
        medusa.aprender('eliminarsesisaledepantalla')

    def comer_rico(crear_miactor , crear_hamburguesa):
      
        crear_hamburguesa.eliminar()
        puntaje.aumentar(10)
    
    def comer_feo(crear_miactor , crear_medusas) :
        crear_miactor.eliminar()
        #sonido_de_musica.detener()
        texto = pilas.actores.Texto("P E R D I S T E")
        texto.color = pilas.colores.Color(0, 0, 0)
        TSK.terminar()
        TSL.terminar()
        pilas.tareas.agregar(5, entrada)
        
    pilas.colisiones.agregar('mono',  'pelota', comer_rico)
    pilas.colisiones.agregar('mono', 'aceituna', comer_feo)
    
    TSK = pilas.tareas.siempre(5 , crear_hamburguesa)
    TSL = pilas.tareas.siempre(10 , crear_medusas)
    crear_miactor()
 	
                
def instrucciones_juego():
	
    pilas.escenas.Normal()
    texto = pilas.actores.Texto("Instrucciones")
    texto.color = pilas.colores.Color(0, 0, 0)
    texto.y = 150
    texto.x = 0
    
    texto1 = pilas.actores.Texto("Atrapa las hamburguesas")
    texto1.color = pilas.colores.Color(0, 0, 0)
    texto.escala = 1.5
    texto1.escala = 0.5
    texto1.y = 65
    texto1.x = 40
    in1 = pilas.actores.Aceituna()
    #in1.imagen = "data/hambu.png."
    in1.escala = 0.3
    in1.x = -100
    in1.y = 65
    texto2 = pilas.actores.Texto("Evita las medusas")
    texto2.color = pilas.colores.Color(0, 0, 0)
    texto2.escala = 0.5 
    texto2.x = 20
    in2 = pilas.actores.Banana()
    #in2.imagen = "data/medusin.png."
    in2.escala = 0.3
    in2.x = -100
    in2.y = -5
    
    in3 = pilas.actores.Estrella()
    #in3.imagen = "data/bob1.png."
    in3.escala = 0.2
    in3.x = 115
    in3.y = -100
    
    ins = pilas.interfaz.Boton("S")
    ins.x = -100
    ins.y = -75
    textoins = pilas.actores.Texto("Salir")
    textoins.color = pilas.colores.Color(0, 0, 0)
    textoins.escala = 0.5
    textoins.x = 20
    textoins.y = -75
    
    ini = pilas.interfaz.Boton("I")
    ini.x = -100
    ini.y = -130
    textoini = pilas.actores.Texto(" instrucciones ")
    textoini.color = pilas.colores.Color(0, 0, 0)
    textoini.escala = 0.5
    textoini.x = 20
    textoini.y = -130
    
    
    salir1 = pilas.interfaz.Boton("salir")
    salir1.conectar(salir_juego)
    salir1.y = -175
    
    #fondo_instruc = pilas.fondos.Fondo("data/die.png.")
    
def salir_juego():
	pilas.escenas.Normal()
	#pilas.fondos.Fondo("data/juegoi.png.")
	textofinal = pilas.actores.Texto(" Gracias por jugar conmigo ")
	textofinal.color = pilas.colores.Color(255, 0, 0, 128)
	textofinal.x = 80
	textofinal.y = 100
	salir = pilas.interfaz.Boton("salir")
	salir.conectar(salida)
	salir.y = -150
	salir.x = 200

def salida():
    pilas.terminar()
	



#sonido_de_musica = pilas.musica.cargar("data/bob.wav")
#sonido_de_musica.reproducir(repetir=True)

entrada()
                        
pilas.ejecutar() 

Hola Jordinur te agradezco infinitamente tu ayuda… me sirvió de mucho para poder realizar el juego como quería. Me alegro de que mi limitación de usar el class te haya servido de algo pero espero que para el próximo cuatrimestre en mi universidad se den cuenta de que no usarlo no tiene ningún sentido.

Si vivieras cerca de mi casa te regalaría te llevaba un alfajor de dulce de leche… jaja

Fue muy importante contar con tu ayuda, y de mi parte y seguramente la de muchos mas : GRACIAS!!!

2 Likes