Juego de Preguntas y Respuestas. Pilas-engine v1.4.11

Buenas! estas últimas 3 semanas estuve codificando mi juego de proyecto final. Se podía realizar cualquier juego a gusto, por el mismo motivo recurrí a un código que había hecho en el 2013, y traté de amoldarlo a pilas-engine v1.4.11.

El juego elegido se basaba en preguntas, con 3 respuestas posibles de las cuales solo 1 es correcta. Para ello en pilas utilicé al actor banana(3), y al actor mono.

Gracias a el manual de pilas y al foro, logré realizar mi juego. El mismo aún tiene cosas para modificar, como visuales y quizá de movimiento pero mi objetivo y lo que se me pedía era entregar un trabajo funcional mas allá de que carece de “cosas decorativas”.

Les dejo un video que subí a youtube para que vean que funciona correctamente.

Dejo la imagen que coloque de fondo en la opción ayuda:

Sin más les dejo el código debajo para que puedan verlo y modificarlo a gusto.

import pilasengine
pilas = pilasengine.iniciar()

class EscenaMenu(pilasengine.escenas.Escena):
	def iniciar(self):
		self.fondo_menu = pilas.fondos.Volley()
		
		dialogo=pilas.actores.Dialogo()
		self.mono1 = pilas.actores.Mono()
		self.mono1.x=180
	
		dialogo.decir(self.mono1, "Presiona en mi")
		dialogo.decir(self.mono1, "Si respondes 10 veces bien ganas, si erras 3 veces pierdes")
								  

		dialogo.comenzar()
		
		self.Mi_Menu = pilas.actores.Menu(
			[
				(u"Jugar", self.Ir_al_juego),
				(u"Ayuda", self.Ayuda),
				(u"Salir", self.Salir_de_Pilas)
			])
		
		Nombre_de_juego = pilas.actores.Texto(u"Comelon el Respondon")
		Nombre_de_juego.color = pilas.colores.rojo
		Nombre_de_juego.y = 170

	def actualizar(self):
		pass
		
	def Ayuda(self):
		pilas.escenas.EscenaAyuda()
		
	def Salir_de_Pilas(self): 
		pilas.terminar()	
		
	def Ir_al_juego(self): 
		pilas.escenas.EscenaJuego()		

class EscenaAyuda(pilasengine.escenas.Escena):
	def iniciar(self):
		self.fondo_juego=pilas.fondos.Noche()
		self.fondo_juego.imagen="fondodeljuego1.png"
		self.Boton_Volver =pilas.interfaz.Boton("Volver al Menu")
		self.Boton_Volver.y = 220
		self.Boton_Volver.x = 250
		self.Boton_Volver.conectar(self.Volver)
		
	def Volver(self):	
		pilas.escenas.EscenaMenu()
		
	def actualizar(self):
		pass	

class EscenaJuego(pilasengine.escenas.Escena):		
	def iniciar(self):
		self.nombre=raw_input("Ingrese su nombre: ")
		self.lista=[["El albinismo se presenta por la carencia de:", "Pigmentacion", "Calcio", "Vitamina A"],["Al periodico que se publica en horas de la tarde, se denomina", "Vespertino", "Clandestino", "Matutino"],["Es el paso del agua del estado liquido al estado gaseoso", "Evaporacion", "Sublimacion", "Infiltracion"], ["Que elemento quimico es representado por el simbolo P?", "Fosforo", "Boro", "Rubidio"],["Segun el refran, el que se acuesta a dormir, es porque cria:", "Fama", "Flojera", "Suenio"], ["Cual es el idioma oficial de Israel?", "Hebreo", "Griego", "Japones"], ["El timbal es un instrumento de:", "Percusion", "Viento metal", "Cuerda"],["A que tipo de animales se refiere la palabra aviario?", "Aves", "Peces", "Moluscos"],["En la mitologia griega, Eros es considerado el dios del:", "Amor", "Miedo", "Odio"], ["Cual de estos animales es un rumiante?", "La vaca", "La Ardilla", "El loro"],["En que pais se encuentra la torre de Pisa:", "Italia", "Francia", "Espania"],["Quien pinto la ultima cena:", "Leonardo Da Vinci", "Miguel Angel Buonarrotti", "Benito Quinquela Martin"],["Que son los humanos?:","Omnivoros", "Carnivoros", "Herbivoros"],["En que anio llego Cristobal Colon a America?:", "1492", "1490", "1495"],["Quien es el padre del Psicoanalisis?:","Sigmund Freud", "Carl Jung","Thomas Freud"],["Cual es el pais mas grande del mundo?:", "Rusia", "Estados Unidos", "Alemania"],["Donde se encuentra la famosa Torre Eiffel?:", "Francia", "Ecuador", "Croacia"],["Que deporte practicaba Michael Jordan?:","Basquet","Tenis","Futbol"],["En que anio comenzo la Segunda Guerra Mundial?:","1939","1918","1945"],["Cual es el pais mas poblado de la tierra?", "China", "Japon", "Suecia"]]
		
		self.fondo_juego = pilas.fondos.Tarde()
		
		self.puntaje = pilas.actores.Puntaje(color="rojo") #self
		self.puntaje.x = -150 #self
		self.puntaje.y = -190 #self
		self.puntaje.valor = 0 #añadido
		self.correctosaparecer=pilas.actores.Texto("Correctos:")
		self.correctosaparecer.x=-220
		self.correctosaparecer.y=-190
		
		self.error=pilas.actores.Puntaje(color="rojo")
		self.error.valor=0
		self.error.x=-150
		self.error.y=-220
		self.incorrectosaparecer=pilas.actores.Texto("Incorrectos:")
		self.incorrectosaparecer.x=-230
		self.incorrectosaparecer.y=-220
		
		self.mono = pilas.actores.Mono()
		self.mono.escala = 0.8 #añadido, el mono era muy grande
		self.mono.aprender('arrastrable') #modificado
		self.mono.aprender('MoverseConElTeclado') #modificado
		self.mono.decir("Bienvenido/a "+ self.nombre + " puedes arrastrarme")
		self.mono.x=[0,200],1
		
		self.Boton_Volver =pilas.interfaz.Boton("Volver al Menu")
		self.Boton_Volver.y = -220
		self.Boton_Volver.x = 250
		self.Boton_Volver.conectar(self.Volver)
		
		
		#Agrego las colisiones
		pilas.colisiones.agregar('banana', 'mono', self.el_mono_come)#añadido
		
		#Agrego tarea
		pilas.tareas.agregar(3, self.Preguntando)
		
	def Reiniciar(self):
    # Obtiene todos los actores de la pantalla.
		actores = pilas.actores.listar_actores()

    # Elimina todos los actores excepto el fondo y el puntaje
		for actor in actores:
			if actor not in [self.puntaje, self.fondo_juego, self.mono,self.error,self.correctosaparecer,self.incorrectosaparecer,self.Boton_Volver]:
				actor.eliminar()

    # Genera una pregunta nueva
		self.Preguntando()
		
	
	def Preguntando(self):	
		self.b1=pilas.actores.Banana()
		self.b1.x=-300
		self.b1.y=100
		self.b1.esverdadera=False
		self.b2=pilas.actores.Banana()
		self.b2.x=-300
		self.b2.y=0
		self.b2.esverdadera=False
		self.b3=pilas.actores.Banana()
		self.b3.x=-300
		self.b3.y=-100
		self.b3.esverdadera=False
		
		self.poslista=pilas.azar(0,19)
		self.encuentrapreg=self.lista[self.poslista][0]
		self.mostrar_pregunta=pilas.actores.Texto(self.encuentrapreg)
		self.mostrar_pregunta.y=220
		self.mostrar_pregunta.escala=0.8
		
		self.respuesta_correcta = self.lista[self.poslista][1] #Respuesta Correcta
		self.respuesta_incorrecta_1 = self.lista[self.poslista][2] #Respuesta incorrecta 1
		self.respuesta_incorrecta_2 = self.lista[self.poslista][3] #Respuesta incorrecta 2
		
		self.rta_1 = pilas.actores.Texto("")
		self.rta_1.x=-250
		self.rta_1.y=100
		self.rta_2 = pilas.actores.Texto("")
		self.rta_2.x=-250
		self.rta_2.y=0
		self.rta_3 = pilas.actores.Texto("")
		self.rta_3.x=-250
		self.rta_3.y=-100
		
		#Banana verdadera
		self.bananas_posibles = [self.b1,self.b2,self.b3]
		self.textos_posibles = [self.rta_1,self.rta_2,self.rta_3]
		self.indiceok=pilas.azar(0,2)
		self.banana_verdadera=self.bananas_posibles[self.indiceok]
		self.banana_verdadera.esverdadera=True
		self.texto_respuesta_verdadera=self.textos_posibles[self.indiceok]
		self.texto_respuesta_verdadera.texto=str(self.respuesta_correcta)
		
		if self.b1.esverdadera:
			self.rta_1.texto=str(self.respuesta_correcta)
			self.rta_2.texto = str(self.respuesta_incorrecta_1)
			self.rta_3.texto = str(self.respuesta_incorrecta_2)
		elif self.b2.esverdadera:
			self.rta_2.texto=str(self.respuesta_correcta)
			self.rta_1.texto = str(self.respuesta_incorrecta_1)
			self.rta_3.texto = str(self.respuesta_incorrecta_2)
		elif self.b3.esverdadera:
			self.rta_3.texto= str(self.respuesta_correcta)
			self.rta_1.texto = str(self.respuesta_incorrecta_1)
			self.rta_2.texto = str(self.respuesta_incorrecta_2)
				
	def ganaste(self):
		actores = pilas.actores.listar_actores()

    # Elimina todos los actores excepto el fondo y el puntaje
		for actor in actores:
			if actor not in [self.mono]:
				actor.eliminar()
		self.fondo_juego=pilas.fondos.Noche()
		self.Boton_Volver =pilas.interfaz.Boton("Volver al Menu")
		self.Boton_Volver.y = 220
		self.Boton_Volver.x = 250
		self.Boton_Volver.conectar(self.Volver)
		self.puntajefinal=pilas.actores.Texto(str(self.puntaje.valor))
		self.puntajefinal.escala=2
		self.cartelfelicidades=pilas.actores.Texto("Felicidades "+self.nombre+" has ganado")
		self.cartelfelicidades.y=220
		self.cartelfelicidades=pilas.actores.Texto("Comelon esta feliz y lleno")
		self.cartelfelicidades.y=150
		self.cartelpuntaje=pilas.actores.Texto("Tu puntaje es: ")
		self.cartelpuntaje.x=-100
		self.errorestotales=pilas.actores.Texto(str(self.error.valor))
		self.errorestotales.y=-100
		self.errorestotales.escala=2
		self.cartelerror=pilas.actores.Texto("Cantidad de errores: ")
		self.cartelerror.x=-150
		self.cartelerror.y=-100
		self.mono.sonreir()
	
	def perdiste(self):
		actores = pilas.actores.listar_actores()

    # Elimina todos los actores excepto el fondo y el puntaje
		for actor in actores:
			if actor not in [self.mono]:
				actor.eliminar()
		self.fondo_juego=pilas.fondos.Noche()
		self.Boton_Volver =pilas.interfaz.Boton("Volver al Menu")
		self.Boton_Volver.y = 220
		self.Boton_Volver.x = 250
		self.Boton_Volver.conectar(self.Volver)
		self.puntajefinal=pilas.actores.Texto(str(self.puntaje.valor))
		self.puntajefinal.escala=2
		self.cartelfelicidades=pilas.actores.Texto(self.nombre+ " PERDISTE :(")
		self.cartelfelicidades.y=220
		self.cartelfelicidades=pilas.actores.Texto("Comelon se enfermo")
		self.cartelfelicidades.y=150
		self.cartelpuntaje=pilas.actores.Texto("Tu puntaje es: ")
		self.cartelpuntaje.x=-100
		self.errorestotales=pilas.actores.Texto(str(self.error.valor))
		self.errorestotales.y=-100
		self.errorestotales.escala=2
		self.cartelerror=pilas.actores.Texto("Cantidad de errores: ")
		self.cartelerror.x=-150
		self.cartelerror.y=-100
		self.mono.gritar()
		
	def Volver(self):	
		pilas.escenas.EscenaMenu()
		
	def actualizar(self):
		pass	
		

	def el_mono_come(self, bananas, mono):
		if not bananas.esverdadera: #bananas es la banana colisionada
			if self.error.valor<2:
				pilas.camara.vibrar()
				bananas.eliminar()
				mono.gritar()
				mono.decir("MAL MAL MAL")
				self.error.aumentar() #aumenta 1 error. En total puede ser hasta 3 errores.
				pilas.tareas.agregar(3, self.Reiniciar)
				
			else:
				pilas.avisar("Fin del juego")
				self.error.aumentar()
				self.perdiste()
				
		else:
			if self.puntaje.valor<9:
				bananas.eliminar() #hay que eliminar la banana colisionada
				mono.rotacion=[0,360]
				mono.decir("Muy bien")
				estrella = pilas.actores.Estrella()
				estrella.x = bananas.x
				estrella.y = bananas.y
				estrella.escala = 0.2
				estrella.escala = [2, 1] * 2
				self.puntaje.aumentar()
				pilas.tareas.agregar(3, self.Reiniciar)
			else:
				pilas.avisar("Felicidades has ganado")
				self.puntaje.aumentar()
				self.ganaste()
				
				
		
	def Volver(self):	
		pilas.escenas.EscenaMenu()
		
	def actualizar(self):
		pass
		

pilas.escenas.vincular(EscenaAyuda)
pilas.escenas.vincular(EscenaMenu)
pilas.escenas.vincular(EscenaJuego)

pilas.escenas.EscenaMenu()

pilas.ejecutar()

Le agradezco a @jordinur por la ayuda que me brindó y el tiempo que se tomó en contestar mis consultas.

Espero les sirva y les guste.

Saludos, Maxi.

3 me gusta

Buenas, @MaxiAlbarenque !

Muchas gracias por compartirlo !!! :smile:

Son muchas las consultas que se hacen en este foro sobre juegos de preguntas “al azar” y a partir de ahora ya podremos dirigir las dudas a este gran ejemplo, que a buen seguro ayudará a muchos usuarios en un futuro.

Un abrazo! :wink:

1 me gusta