Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # PARA QUE EL JUEGO CORRA, DEBERA INDICAR EN LA CARPETA RELATIVA
- # "imgs" LAS IMAGENES QUE DESEA QUE FORMEN PARTE DEL JUEGO (8 IMAGENES
- # NUMERADAS DEL 1 AL 8 Y CON EXTENSION PNG) Y UNA IMAGEN DE
- # NOMBRE wait.png
- # Desarrollado como parte del voluntariado android UNAJ.
- # Contacto afperrens@gmail.com
- __version__ = "1.0"
- import kivy
- from kivy.app import App
- from kivy.uix.boxlayout import BoxLayout
- from kivy.uix.gridlayout import GridLayout
- from kivy.uix.button import Button
- from kivy.uix.label import Label
- from kivy.uix.screenmanager import ScreenManager, Screen, NoTransition
- from kivy.uix.image import AsyncImage, Image
- from kivy.animation import Animation
- from kivy.clock import Clock
- import random
- import time
- puntaje = 0
- class principal(App):
- intentos = 0
- aciertos = 0
- # COMENTADO, SI SE LLAMA DESDE UN GESTOR DE VENTANAS, DESCOMENTAR ESTA PARTE
- # QUITAR BUILD Y EL LLAMADO A PRINCIPAL AL PIE DE ESTE ARCHIVO
- #def __init__(self,**kwargs):
- #creo la pantalla de juego
- #super(principal,self).__init__(**kwargs)
- def build(self):
- contenedor = GridLayout(cols=4,rows=5)
- self.contenedorImg = [BoxLayout(orientation='horizontal') for x in range(16)]
- for i in range(16):
- self.contenedorImg[i].add_widget(Image(source='imgs/wait.png'))
- contenedor.add_widget(self.contenedorImg[i])
- # agrego widgets de control
- self.variosLabel = Label(text='')
- self.puntajeLabel = Label(text='puntaje')
- self.tiempoLabel = Label(text='tiempo')
- self.hacerButton = Button(text='iniciar',on_press=self.mezclar)
- contenedor.add_widget(self.variosLabel)
- contenedor.add_widget(self.puntajeLabel)
- contenedor.add_widget(self.tiempoLabel)
- contenedor.add_widget(self.hacerButton)
- #self.add_widget(contenedor)
- return contenedor
- def mezclar(self,instance):
- # mezclo los elementos y los cargo a las imagenes
- arrImg = []
- for i in range(8): arrImg.append("imgs/" + str(i+1) + ".png")
- for i in range(8): arrImg.append("imgs/" + str(i+1) + ".png")
- random.shuffle(arrImg)
- for i in range(16):
- self.contenedorImg[i].children[0].source = arrImg[i]
- self.cuentaAtras(5,self.taparGrilla)
- def cuentaAtras(self,tiempo,funcion):
- # countdown que ejecuta funcion cuando llega a cero
- # # # # # # # # # # # # # # # # # # # # # # # # #
- # deberia ser al reves, primero cuenta, luego imprime
- # para que la pila de python no este con 10 funciones
- # en la pila al llamar taparGrilla si no solo con uno
- if(tiempo > 0):
- self.tiempoLabel.text = str(tiempo)
- Clock.schedule_once(lambda dt: self.cuentaAtras(tiempo-1,funcion),1)
- else:
- print "llego"
- funcion()
- def taparGrilla(self):
- # convierto todas las imagenes en botones
- for i in range(16):
- temp = self.contenedorImg[i].children[0].source
- self.contenedorImg[i].remove_widget(self.contenedorImg[i].children[0])
- self.contenedorImg[i].add_widget(Button(text='?',on_press=self.clickInterrogante))
- self.contenedorImg[i].children[0].source = temp # le paso el nombre de img
- self.contenedorImg[i].children[0].idImg = i # le paso la posicion de la imagen
- self.hacerButton.disabled = True
- # con instanciaActual determino si el boton es el primero en ser
- # presionado (setea una imagen) o el segundo (usarlo y pasarlo a "")
- self.instanciaActual = ["",0,"",0]
- def clickInterrogante(self,instance):
- # cuando se hace click se determina si se hizo click sobre uno o
- # sobre el segundo y determina si se eligio correctamente
- self.intentos += 1
- # primer boton
- if(self.instanciaActual[0] == ""):
- self.instanciaActual[0] = instance.source
- self.instanciaActual[1] = instance.idImg
- self.contenedorImg[instance.idImg].remove_widget(self.contenedorImg[instance.idImg].children[0])
- self.contenedorImg[instance.idImg].add_widget(Image(source=instance.source))
- # segundo boton
- else:
- self.contenedorImg[instance.idImg].remove_widget(self.contenedorImg[instance.idImg].children[0])
- self.contenedorImg[instance.idImg].add_widget(Image(source=instance.source))
- # uso instanciaActual en vez de lambda por que en python parece
- # que no se pueden enviar muchos parametros en lambda
- self.instanciaActual[2] = instance.source
- self.instanciaActual[3] = instance.idImg
- if(instance.source == self.instanciaActual[0]):
- self.variosLabel.text = "acerto!"
- self.aciertos += 1
- self.puntajeLabel.text = str(self.aciertos)
- self.instanciaActual = ["",0,"",0]
- else:
- self.switchBotones()
- self.cuentaAtras(1,self.volverBoton)
- self.variosLabel.text = "no acerto!"
- def volverBoton(self):
- # vuelve a poner las imagenes en botones
- self.contenedorImg[self.instanciaActual[3]].add_widget(Button(text="?",on_press=self.clickInterrogante))
- self.contenedorImg[self.instanciaActual[3]].children[0].source = self.instanciaActual[2]
- self.contenedorImg[self.instanciaActual[3]].children[0].idImg = self.instanciaActual[3]
- self.contenedorImg[self.instanciaActual[3]].remove_widget(self.contenedorImg[self.instanciaActual[3]].children[1])
- self.contenedorImg[self.instanciaActual[1]].add_widget(Button(text="?",on_press=self.clickInterrogante))
- self.contenedorImg[self.instanciaActual[1]].children[0].source = self.instanciaActual[0]
- self.contenedorImg[self.instanciaActual[1]].children[0].idImg = self.instanciaActual[1]
- self.contenedorImg[self.instanciaActual[1]].remove_widget(self.contenedorImg[self.instanciaActual[1]].children[1])
- self.instanciaActual = ["",0,"",0]
- self.switchBotones()
- def switchBotones(self):
- # alterna disabled de los botones para que no se puedan presionar
- if(self.instanciaActual[0] != ""):
- for i in range(16):
- self.contenedorImg[i].children[0].disabled = True
- else:
- for i in range(16):
- self.contenedorImg[i].children[0].disabled = False
- def salir(self,instance):
- print "aca se cierra el juego"
- if __name__ == '__main__':
- principal().run()
Add Comment
Please, Sign In to add comment