# Interfaz en kivy para sudoku, se la debe llamar desde un gestor de ventanas # para que funcione. Implementa una interfaz grafica para un sudoku generado # por el siguiente codigo http://davidbau.com/downloads/sudoku.py (desarrollado # para uso web) # Desarrollado como parte del voluntariado android UNAJ. # Contacto afperrens@gmail.com __version__ = "1.0" from kivy.app import App from kivy.lang import Builder from kivy.uix.label import Label from kivy.uix.boxlayout import BoxLayout from kivy.uix.button import Button from kivy.uix.gridlayout import GridLayout from kivy.uix.popup import Popup from kivy.uix.screenmanager import ScreenManager, Screen, NoTransition from kivy.core.window import Window import sudoku class principal(Screen): def __init__(self,**kwargs): super(principal, self).__init__(**kwargs) SudokuBase = sudoku.crearSudoku() SolucionBase = sudoku.obtenerSolucion(SudokuBase) SudokuMatriz = sudoku.toGrid(SudokuBase) SolucionMatriz = sudoku.toGrid(SolucionBase) self.contenedor = GridLayout(rows=11,cols=11) botonera = BoxLayout(orientation="horizontal",size_hint=(1,.15)) botonera.add_widget(Button(text="guardar partida",on_press=self.guardar,background_color=(0,0,0,50))) self.mayor = BoxLayout(orientation="vertical") self.guiones = 0 # numero de guiones bajos for x in range(9): for y in range(9): if(SudokuMatriz[x][y] != "_"): self.contenedor.add_widget(Button(color=(0,0,0,100),text=str(SudokuMatriz[x][y]),disabled=False,font_size=40,background_color=(255,255,204,50))) else: self.guiones += 1 btn = Button(color=(255,0,0,100),text=str(SudokuMatriz[x][y]),on_press=self.mostrarCuadro,font_size=40,background_color=(255,255,0,50)) btn.solucion = SolucionMatriz[x][y] self.contenedor.add_widget(btn) if(y == 2)or(y == 5): # agrego una separacion (linea horizontal) self.contenedor.add_widget(Label(text="",size_hint=(.1,.1))) if(x == 2)or(x == 5): for i in range(11): # agrego varias separaciones (linea vertical) self.contenedor.add_widget(Label(text="",size_hint=(.1,.1))) self.mayor.add_widget(self.contenedor) self.mayor.add_widget(botonera) self.add_widget(self.mayor) def guardar(self,instance): print "guardar" def pausa(self): print "Aqui se ejecuta la orden de pausa" placa = BoxLayout(orientation="vertical") pop = Popup(title="Seleccione numero a ingresar",content=placa) placa.add_widget(Button(text="Volver al juego",on_press=pop.dismiss)) placa.add_widget(Button(text="Salir de este juego",on_press=self.goInicio)) pop.open() def goInicio(self,instance): for i in self.manager.screens: print i self.manager.current = 'juegos' print "inicio" def mostrarCuadro(self,instance): print instance.solucion botonera = GridLayout(cols=3,rows=4) pop = Popup(title="Seleccione numero a ingresar",content=botonera) for i in range(9): bInterna = Button(text=str(i+1),on_press=self.cambiar,on_release=pop.dismiss,font_size=60) bInterna.superior = instance botonera.add_widget(bInterna) botonera.add_widget(Button(text="no cambiar",on_press=pop.dismiss)) bInterna = Button(text="_",on_press=self.cambiar,on_release=pop.dismiss) bInterna.superior = instance botonera.add_widget(bInterna) pop.open() def cambiar(self,instance): if(instance.superior.text != instance.text): if(instance.superior.text == "_"): self.guiones -= 1 if(instance.text == "_"): self.guiones += 1 instance.superior.text = instance.text # aca cuando hago el ultimo cambio determino si termino o no self.determinarFin() def determinarFin(self): if(self.guiones == 0): print "finalizo" correcto = 1 for i in self.contenedor.children: if(i.disabled == False)and(i.text != ""): if(i.solucion != int(i.text)): correcto = 0 break if(correcto == 1): print "juego correcto" else: print "usted no ha ganado todavia"