Cambio de escena, activar un boton y preg al azar

Hola, tengo que hacer un juego de trivía para la facultad. El juego consiste en que el jugador tiene que responder las 10 preguntas que aparecen en cada mapa y para poder responder la pregunta tiene que mover el personaje que esta en la esquina del mapa. Lo que yo necesito es saber como puedo hacer para que cuando el jugador presione iniciar juego y aparezca la primera pregunta( que también tiene que iniciarse las preguntas al azar). También me gustaría que me ayuden en la activación de un botón que se encuentra en instrucciones para que vuelva al menú.

import pilasengine
pilas = pilasengine.iniciar()

def iniciar_juego():
    pilas.escenas.Juego()
   
def como_jugar():
    pilas.escenas.Instrucciones()
	
def salir_del_juego():
    pilas.terminar()

class Juego(pilasengine.escenas.Escena):
    def iniciar(self):
        puntos= pilas.actores.Puntaje(color= "rojo")
        puntos.x= -260
        puntos.y= 180
        puntos.escala= 1.5
        
        
class Instrucciones(pilasengine.escenas.Escena):
    def iniciar(self):
        pilas.escenas.Normal()
        FondoComoJugar = pilas.fondos.Galaxia()
        texto= pilas.actores.Texto("*INSTRUCCIONES SOBRE EL JUEGO*")
        texto.y= 200
        texto.color= pilas.colores.amarillo
        expli= pilas.actores.Texto("Este juego se trata sobre preguntas y respuesta.")
        expli.y=150          
        expli1= pilas.actores.Texto("Para contestar las preguntas, tiene que mover el actor")
        expli1.y=120
        expli2= pilas.actores.Texto("que se encuentra en la esquina de cada mapa.")
        expli2.y= 90                    
        expli3= pilas.actores.Texto("El actor se movera cuando lo arrastren con el mouse")
        expli3.y= 60                                                    
        expli4= pilas.actores.Texto("y lo acerquen a la respuesta que consideren correcta.")                                                                                                
        expli4.y=30                                                                                                                                            
        expli5= pilas.actores.Texto("Sumando 5 puntos por cada respuesta correcta,")
        expli5.y= 0
        expli6= pilas.actores.Texto("en caso de no responder incorrectamente,")                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
        expli6.y=-30                                                                                                                                                                                                                                    
        expli7= pilas.actores.Texto("no se sumara ningun punto.")                                                                                                                                                                                                                                                                                
        expli7.y= -60      
        mensaje= pilas.actores.Texto("**QUE TE DIVIERTAS!**")
        mensaje.y= -140
        mensaje.color= pilas.colores.verde
        mensaje.escala= 1.5
        volver= pilas.interfaz.Boton("volver")
        volver.y= -200
        volver.x= 260 #Boton que quiero activar y nose como
        
        
#Este mapa quiero incluir cuando inicio el juego y nose como hacerlo#        
def juntar_puntos( v2):
    global puntos
    puntos.aumentar(cantidad="5")
    v2.eliminar()
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
def juntar_puntos( v2):
    global puntos
    puntos.aumentar(cantidad="1")
    v2.eliminar()
    
def comer_respuesta(mono, boton3):
    boton3.eliminar()
    mono.decir("Correcto :)")
    mono.saltar()    
    juntar_puntos( boton1)
    
def comer_incor(mono, boton2):
    boton2.eliminar()
    mono.gritar()
                
def comer_incorrecto(mono, boton1):
    boton1.eliminar()
    mono.gritar()


pilas.fondos.Selva()
mono = pilas.actores.Mono()
mono.escala= 0.8
mono.y=140
mono.x= 230
mono.decir("Pregunta de Geografia")
mono.aprender(pilas.habilidades.Arrastrable)
pregunt= pilas.actores.Texto("Las cataratas se encuentra en la provincia de...")
pregunt.y= 35
boton1= pilas.actores.Texto("Buenos Aires")
boton1.escala= 1.3
boton1.y= -140
boton1.x= -200
boton2= pilas.actores.Texto("La Rioja")
boton2.x= 200
boton2.y= -140
boton2.escala= 1.3
boton3= pilas.actores.Texto("Misiones")
boton3.escala= 1.3
boton3.y= -140
boton3.x=20

pilas.colisiones.agregar(mono, boton3, comer_respuesta)
pilas.colisiones.agregar(mono, boton2, comer_incor)
pilas.colisiones.agregar(mono, boton1, comer_incorrecto)
pilas.escenas.vincular(Juego)
pilas.escenas.vincular(Instrucciones)

MenuPrincipal = pilas.fondos.Cesped()
pilas.actores.Menu([('Iniciar juego', iniciar_juego),('Como jugar', como_jugar),('salir', salir_del_juego),])
pilas.ejecutar()

Buenas, @Xiime_Merino !

Estoy tratando de analizar tu código, pero hay un montón de fallos de tabulación/espacio que no deja reproducir el juego. :cold_sweat:

Podrias decirme con qué editor escribiste el código?

Gracias y un saludo.

Buenas, @Xiime_Merino

Ya rehice tu código, te explico lo que hice:

Primero, tuve que indexar todo correctamente :cold_sweat:

Creé una escena para el Menu, para tenerlo todo bien separado y ordenado.

Corregí algún fallo de variables, ya que le asignabas una coordenada x antes de crear el actor.

Incluí todo lo que andaba suelto en la class Juego, que es donde debe ir (el orden cuando se programa es importante)

Suprimí un par de def que me parecieron innecesarias (juntar puntos y comer_incor).

Le añadí para que cuando la respuesta sea correcta sume 5 puntos, y cuando sea incorrecta que reste 1.

Le dí funcionalidad al boton volver para que vuelva al menu de inicio.

Y alguna cosa más que ya no recuerdo… :smile:

Espero que esto te ayude, no dudes en estudiarte bien las diferencias entre este código y el tuyo, ya que es importante que aprendas por tí mismo :wink:

# -*- encoding: utf-8 -*-

import pilasengine
pilas = pilasengine.iniciar()

class Menu(pilasengine.escenas.Escena):
	
	def iniciar(self):
		MenuPrincipal = pilas.fondos.Cesped()
		pilas.actores.Menu([('Iniciar juego', self.juego),('Como jugar', self.como_jugar),('salir', self.salir_del_juego),])

	def juego(self):
		pilas.escenas.Juego()
		
	def como_jugar(self):
		pilas.escenas.Instrucciones()
			
	def salir_del_juego(self):
		pilas.terminar()

class Juego(pilasengine.escenas.Escena):
	
	def iniciar(self):
		self.puntos= pilas.actores.Puntaje(color= "rojo")
		self.puntos.x= -260
		self.puntos.y= 180
		self.puntos.escala= 1.5
		self.fondojuego = pilas.fondos.Selva()
		self.mono = pilas.actores.Mono()
		self.mono.escala= 0.8
		self.mono.y=140
		self.mono.x= 230
		self.mono.decir("Pregunta de Geografia")
		print('EscenaJuego')
		self.mono.aprender(pilas.habilidades.Arrastrable)
		pregunt= pilas.actores.Texto("Las cataratas se encuentra en la provincia de...")
		pregunt.y= 35
		boton1= pilas.actores.Texto("Buenos Aires")
		boton1.escala= 1.3
		boton1.y= -140
		boton1.x= -200
		boton2= pilas.actores.Texto("La Rioja")
		boton2.x= 200
		boton2.y= -140
		boton2.escala= 1.3
		boton3= pilas.actores.Texto("Misiones")
		boton3.escala= 1.3
		boton3.y= -140
		boton3.x=20
		pilas.colisiones.agregar(self.mono, boton3, self.comer_respuesta)
		pilas.colisiones.agregar(self.mono, boton2, self.comer_incorrecto)
		pilas.colisiones.agregar(self.mono, boton1, self.comer_incorrecto)
		
	def comer_respuesta(self, mono, boton3):
		boton3.eliminar()
		mono.decir("Correcto :)")
		mono.saltar()
		self.puntos.aumentar(5)
		
	def comer_incorrecto(self, mono, boton):
		boton.eliminar()
		mono.gritar()
		self.puntos.aumentar(-1)
		
		
class Instrucciones(pilasengine.escenas.Escena):
    def iniciar(self):
        #pilas.escenas.Normal()
        FondoComoJugar = pilas.fondos.Galaxia()
        texto= pilas.actores.Texto("*INSTRUCCIONES SOBRE EL JUEGO*")
        texto.y= 200
        texto.color= pilas.colores.amarillo
        expli= pilas.actores.Texto("Este juego se trata sobre preguntas y respuesta.")
        expli.y=150          
        expli1= pilas.actores.Texto("Para contestar las preguntas, tiene que mover el actor")
        expli1.y=120
        expli2= pilas.actores.Texto("que se encuentra en la esquina de cada mapa.")
        expli2.y= 90                    
        expli3= pilas.actores.Texto("El actor se movera cuando lo arrastren con el mouse")
        expli3.y= 60                                                    
        expli4= pilas.actores.Texto("y lo acerquen a la respuesta que consideren correcta.")                                                                                                
        expli4.y=30                                                                                                                                            
        expli5= pilas.actores.Texto("Sumando 5 puntos por cada respuesta correcta,")
        expli5.y= 0
        expli6= pilas.actores.Texto("en caso de no responder incorrectamente,")
        expli6.y=-30
        expli7= pilas.actores.Texto("no se sumara ningun punto.")
        expli7.y= -60
        mensaje= pilas.actores.Texto("**QUE TE DIVIERTAS!**")
        mensaje.y= -140
        mensaje.color= pilas.colores.verde
        mensaje.escala= 1.5
        volver= pilas.interfaz.Boton("volver")
        volver.y= -200
        volver.x= 260
        
        volver.conectar(self.volver_a_menu) #Conectamos el boton a una def
        
    def volver_a_menu(self): #se ejecuta al pulsar el boton.
		pilas.escenas.Menu()
	
		
		
pilas.escenas.vincular(Menu)
pilas.escenas.vincular(Instrucciones)
pilas.escenas.vincular(Juego)

pilas.escenas.Menu()

pilas.ejecutar()

Hola, muchas gracias :smiley: me ayudaste un montón!!! Ahora voy a estudiar la diferencias.

Hola de nuevo, me gustaría saber como hago para vincular estas dos escenas? Quiere que cuando responda la respuesta correcta, pase de mapa osea a la otra pregunta, pero no me estaría dando. Acá te dejo el código de los dos mapas.

import pilasengine

pilas = pilasengine.iniciar()
class Menu(pilasengine.escenas.Escena):

def iniciar(self):
	MenuPrincipal = pilas.fondos.Cesped()
	pilas.actores.Menu([('Iniciar juego', self.juego),('Como jugar', self.como_jugar),('salir',                self.salir_del_juego),])

def juego(self):
	pilas.escenas.Juego()
	
def como_jugar(self):
	pilas.escenas.Instrucciones()
		
def salir_del_juego(self):
	pilas.terminar()

class Juego(pilasengine.escenas.Escena):
def iniciar(self):
def comer_respuesta( self.actorD, opc3):
opc3.eliminar()
actorD.decir(“Correcto :)”)
self.puntos.aumentar(5)

    def comer_incorrecto(self.actorD, opc1):
        opc1.eliminar()
        opc1.decir("Incorrecto")
        self.puntos.aumentar(-1)

    self.puntos= pilas.actores.Puntaje(color= "rojo")
    self.puntos.x= -260
    self.puntos.y= 180
    self.puntos.escala= 1.5       
    self.pilas.fondos.Volley()
    self.actorD= pilas.actores.Zanahoria()
    self.actorD.y= 135
    self.actorD.x= 250
    self.actorD.decir("Pregunta de Deporte")
    actorD.aprender( pilas.habilidades.Arrastrable)
    pre= pilas.actores.Texto("En que deporte utilizan una pelota ovalada")    
    pre.y= 25
    opc1= pilas.actores.Texto("Futbol")
    opc1.escala= 1.3
    opc1.y= -80
    opc1.x= -200
    opc2= pilas.actores.Texto("Hochey")
    opc2.escala= 1.3
    opc2.y= -120
    opc3= pilas.actores.Texto("Rugby")
    opc3.escala= 1.3
    opc3.x= 200
    opc3.y= -160

    pilas.colisiones.agregar(self.actorD, opc3, self.comer_respuesta)
    pilas.colisiones.agregar(self.actorD, opc1, self.comer_incorrecto)

#ESTAS DOS MAPAS QUIERO VINCULAR( EL DE QUIMICA Y EL DE DEPORTE#
def mapa_quimica(self):
self.puntos= pilas.actores.Puntaje(color= “rojo”)
self.puntos.x= -260
self.puntos.y= 180
self.puntos.escala= 1.5
self.fondojuego= pilas.fondos.Pasto()
self.act= pilas.actores.Pacman()
self.act.escala= 3
self.act.x= 260
self.act.y= 130
self.act.decir(“Pregunta de Quimica”)
act.aprender(pilas.habilidades.Arrastrable)
pre= pilas.actores.Texto(“Se pueden mezclar el agua y el aceite”)
pre.escala= 1.3
boton1= pilas.actores.Texto(“Si, se las mezclar”)
boton1.escala= 1
boton1.x= 150
boton1.y= -140
boton2= pilas.actores.Texto(“No, se las puede mezclar”)
boton2.escala= 1
boton2.y= -140
boton2.x= -150
pilas.colisiones.agregar(self.act, boton2, self.comer_respuesta)
pilas.colisiones.agregar(self.act, boton1, self.comer_incorrecto)

def comer_respuesta(self, act, boton2):
    boton2.eliminar()
    act.decir("Correcto :)")
    self.puntos.aumentar(5)
	
def comer_incorrecto(self, act, boton1):
    boton1.eliminar()
    self.puntos.aumentar(-1)

class Instrucciones(pilasengine.escenas.Escena):
def iniciar(self):
#pilas.escenas.Normal()
FondoComoJugar = pilas.fondos.Galaxia()
texto= pilas.actores.Texto(“INSTRUCCIONES SOBRE EL JUEGO”)
texto.y= 200
texto.color= pilas.colores.amarillo
expli= pilas.actores.Texto(“Este juego se trata sobre preguntas y respuesta.”)
expli.y=150
expli1= pilas.actores.Texto(“Para contestar las preguntas, tiene que mover el actor”)
expli1.y=120
expli2= pilas.actores.Texto(“que se encuentra en la esquina de cada mapa.”)
expli2.y= 90
expli3= pilas.actores.Texto(“El actor se movera cuando lo arrastren con el mouse”)
expli3.y= 60
expli4= pilas.actores.Texto(“y lo acerquen a la respuesta que consideren correcta.”)
expli4.y=30
expli5= pilas.actores.Texto(“Sumando 5 puntos por cada respuesta correcta,”)
expli5.y= 0
expli6= pilas.actores.Texto(“en caso de no responder incorrectamente,”)
expli6.y=-30
expli7= pilas.actores.Texto(“no se sumara ningun punto.”)
expli7.y= -60
mensaje= pilas.actores.Texto(“QUE TE DIVIERTAS!”)
mensaje.y= -140
mensaje.color= pilas.colores.verde
mensaje.escala= 1.5
volver= pilas.interfaz.Boton(“volver”)
volver.y= -200
volver.x= 260
volver.conectar(self.volver_a_menu) #Conectamos el boton a una def

def volver_a_menu(self): #se ejecuta al pulsar el boton.
	pilas.escenas.Menu()

pilas.escenas.vincular(Instrucciones)
pilas.escenas.vincular(Juego)
pilas.escenas.vincular(Juego)
pilas.escenas.Menu()

pilas.ejecutar()

Buenas, @Xiime_Merino

Aquí te rehice un poco el juego, la parte de Deportes la haces tú siguiendo el ejemplo de quimica.

Fijate que he solucionado algunos bugs, como que si tocabas 2 veces la respuesta te sumaba puntos 2 veces.

El puntaje ya está definido de inicio, y no hay que ponerlo en cada nueva pregunta.

Un saludo.

# -*- encoding: utf-8 -*-

import pilasengine
pilas = pilasengine.iniciar()

class Menu(pilasengine.escenas.Escena):
	
	def iniciar(self):
		MenuPrincipal = pilas.fondos.Cesped()
		pilas.actores.Menu([('Iniciar juego', self.juego),('Como jugar', self.como_jugar),('salir', self.salir_del_juego),])

	def juego(self):
		pilas.escenas.Juego()
		
	def como_jugar(self):
		pilas.escenas.Instrucciones()
			
	def salir_del_juego(self):
		pilas.terminar()

class Juego(pilasengine.escenas.Escena):
	
	def iniciar(self):
		
		self.es_correcto = False
		
		self.puntos= pilas.actores.Puntaje(color= "rojo")
		self.puntos.x= -260
		self.puntos.y= 180
		self.puntos.escala= 1.5
		
		self.mapa_geografia()
		
	def mapa_geografia(self):	
		self.fondojuego = pilas.fondos.Selva()
		self.mono = pilas.actores.Mono()
		self.mono.escala= 0.8
		self.mono.y=140
		self.mono.x= 230
		self.mono.decir("Pregunta de Geografia")
		self.mono.aprender(pilas.habilidades.Arrastrable)
		self.pregunt= pilas.actores.Texto("Las cataratas se encuentra en la provincia de...")
		self.pregunt.y= 35
		self.boton1= pilas.actores.Texto("Buenos Aires")
		self.boton1.escala= 1.3
		self.boton1.y= -140
		self.boton1.x= -200
		self.boton2= pilas.actores.Texto("La Rioja")
		self.boton2.x= 200
		self.boton2.y= -140
		self.boton2.escala= 1.3
		self.boton3= pilas.actores.Texto("Misiones")
		self.boton3.escala= 1.3
		self.boton3.y= -140
		self.boton3.x=20
		
		pilas.colisiones.agregar(self.mono, self.boton3, self.comer_respuesta_geo)
		pilas.colisiones.agregar(self.mono, self.boton2, self.comer_incorrecto_geo)
		pilas.colisiones.agregar(self.mono, self.boton1, self.comer_incorrecto_geo)
		
	def pasar_a_quimica(self):
		self.pregunt.eliminar()
		self.boton1.eliminar()
		self.boton2.eliminar()
		self.boton3.eliminar()
		self.mono.eliminar()
		
		self. es_correcto = False
		
		self.mapa_quimica()
	
	def comer_respuesta_geo(self, mono, boton3):
		if self.es_correcto == False:	
			boton3.escala = 2
			mono.decir("Correcto :)")
			mono.saltar()
			self.es_correcto = True
			self.puntos.aumentar(5)
			pilas.tareas.agregar(3, self.pasar_a_quimica)
		else:
			pass
			
	def comer_incorrecto_geo(self, mono, boton):
		if self.es_correcto == False:
			boton.eliminar()
			mono.gritar()
			self.puntos.reducir(1)
		else:
			pass
		
#ESTAS DOS MAPAS QUIERO VINCULAR( EL DE QUIMICA Y EL DE DEPORTE
	def mapa_quimica(self):
		
		self.fondojuego= pilas.fondos.Pasto()
		self.act= pilas.actores.Pacman()
		
		self.act.radio_de_colision = 50
		
		self.act.escala= 7   
		self.act.x= 260
		self.act.y= 130
		self.act.decir("Pregunta de Quimica")
		self.act.aprender(pilas.habilidades.Arrastrable)
		self.pre= pilas.actores.Texto("Se pueden mezclar el agua y el aceite")
		self.pre.escala=  1.3
		self.botonq1= pilas.actores.Texto("Si, se las mezclar")
		self.botonq1.escala= 1
		self.botonq1.x= 150
		self.botonq1.y= -140
		self.botonq2= pilas.actores.Texto("No se las puede mezclar")
		self.botonq2.escala= 1
		self.botonq2.y= -140
		self.botonq2.x= -150
		pilas.colisiones.agregar(self.act, self.botonq2, self.comer_respuesta_q)
		pilas.colisiones.agregar(self.act, self.botonq1, self.comer_incorrecto_q)

	def pasar_a_deportes(self):
		pass
	# Aqui continuas como yo hice antes :)
	
	
	def comer_respuesta_q(self, act, boton2):
		if self.es_correcto == False:	
			boton2.escala =2
			boton2.x = 0
			self.es_correcto = True
			pilas.tareas.agregar(5, self.pasar_a_deportes)
			
			act.decir("Correcto :)")
			self.puntos.aumentar(5)
		else:
			pass	

	def comer_incorrecto_q(self, act, boton1):
		if self.es_correcto == False:
			boton1.eliminar()
			self.puntos.reducir(1)
		else:
			pass
		






class Instrucciones(pilasengine.escenas.Escena):
    def iniciar(self):
        #pilas.escenas.Normal()
        FondoComoJugar = pilas.fondos.Galaxia()
        texto= pilas.actores.Texto("*INSTRUCCIONES SOBRE EL JUEGO*")
        texto.y= 200
        texto.color= pilas.colores.amarillo
        expli= pilas.actores.Texto("Este juego se trata sobre preguntas y respuesta.")
        expli.y=150          
        expli1= pilas.actores.Texto("Para contestar las preguntas, tiene que mover el actor")
        expli1.y=120
        expli2= pilas.actores.Texto("que se encuentra en la esquina de cada mapa.")
        expli2.y= 90                    
        expli3= pilas.actores.Texto("El actor se movera cuando lo arrastren con el mouse")
        expli3.y= 60                                                    
        expli4= pilas.actores.Texto("y lo acerquen a la respuesta que consideren correcta.")                                                                                                
        expli4.y=30                                                                                                                                            
        expli5= pilas.actores.Texto("Sumando 5 puntos por cada respuesta correcta,")
        expli5.y= 0
        expli6= pilas.actores.Texto("en caso de no responder incorrectamente,")
        expli6.y=-30
        expli7= pilas.actores.Texto("no se sumara ningun punto.")
        expli7.y= -60
        mensaje= pilas.actores.Texto("**QUE TE DIVIERTAS!**")
        mensaje.y= -140
        mensaje.color= pilas.colores.verde
        mensaje.escala= 1.5
        volver= pilas.interfaz.Boton("volver")
        volver.y= -200
        volver.x= 260
        
        volver.conectar(self.volver_a_menu) #Conectamos el boton a una def
        
    def volver_a_menu(self): #se ejecuta al pulsar el boton.
		pilas.escenas.Menu()
	
		
		
pilas.escenas.vincular(Menu)
pilas.escenas.vincular(Instrucciones)
pilas.escenas.vincular(Juego)

pilas.escenas.Menu()

pilas.ejecutar()

La verdad muchas gracias! No sabes lo que me costo el tema de cambio de escena, ahora puedo agregar otras escenas, voy a seguir tu modificación, para ver los mapas nuevos. Saludos!

Buenas, @Xiime_Merino

No hay de qué, sólo un comentario…

En vez de hacerlo con def() se podria hacer creando una class escena para cada escenario o pregunta. De esta manera te evitarias tener que estar borrando los actores de una def para poner los de la siguiente.

Lo único que tendrias que mirar entonces seria como hacer que el actor puntaje “recuerde” la puntuación acumulada, ya que si no se va a reiniciar en 0 a cada nueva escena. :smile:

Un saludo.