Advertisement
manhattanxl

Interfaz para sudoku, Python, Kivy

Apr 11th, 2016
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.96 KB | None | 0 0
  1. # Interfaz en kivy para sudoku, se la debe llamar desde un gestor de ventanas
  2. # para que funcione. Implementa una interfaz grafica para un sudoku generado
  3. # por el siguiente codigo http://davidbau.com/downloads/sudoku.py (desarrollado
  4. # para uso web)
  5. # Desarrollado como parte del voluntariado android UNAJ.
  6. # Contacto afperrens@gmail.com
  7. __version__ = "1.0"
  8. from kivy.app import App
  9. from kivy.lang import Builder
  10. from kivy.uix.label import Label
  11. from kivy.uix.boxlayout import BoxLayout
  12. from kivy.uix.button import Button
  13. from kivy.uix.gridlayout import GridLayout
  14. from kivy.uix.popup import Popup
  15. from kivy.uix.screenmanager import ScreenManager, Screen, NoTransition
  16. from kivy.core.window import Window
  17.  
  18. import sudoku
  19.  
  20. class principal(Screen):
  21.     def __init__(self,**kwargs):
  22.         super(principal, self).__init__(**kwargs)
  23.  
  24.         SudokuBase = sudoku.crearSudoku()
  25.         SolucionBase = sudoku.obtenerSolucion(SudokuBase)
  26.         SudokuMatriz = sudoku.toGrid(SudokuBase)
  27.         SolucionMatriz = sudoku.toGrid(SolucionBase)
  28.         self.contenedor = GridLayout(rows=11,cols=11)
  29.        
  30.         botonera = BoxLayout(orientation="horizontal",size_hint=(1,.15))
  31.         botonera.add_widget(Button(text="guardar partida",on_press=self.guardar,background_color=(0,0,0,50)))
  32.        
  33.         self.mayor = BoxLayout(orientation="vertical")
  34.  
  35.         self.guiones = 0 # numero de guiones bajos
  36.         for x in range(9):
  37.             for y in range(9):
  38.                 if(SudokuMatriz[x][y] != "_"):
  39.                     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)))
  40.                 else:
  41.                     self.guiones += 1
  42.                     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))
  43.                     btn.solucion = SolucionMatriz[x][y]
  44.                     self.contenedor.add_widget(btn)
  45.                    
  46.                 if(y == 2)or(y == 5):
  47.                     # agrego una separacion (linea horizontal)
  48.                     self.contenedor.add_widget(Label(text="",size_hint=(.1,.1)))
  49.             if(x == 2)or(x == 5):
  50.                 for i in range(11):
  51.                     # agrego varias separaciones (linea vertical)
  52.                     self.contenedor.add_widget(Label(text="",size_hint=(.1,.1)))
  53.         self.mayor.add_widget(self.contenedor)
  54.         self.mayor.add_widget(botonera)
  55.         self.add_widget(self.mayor)
  56.    
  57.     def guardar(self,instance):
  58.         print "guardar"
  59.        
  60.     def pausa(self):
  61.         print "Aqui se ejecuta la orden de pausa"
  62.         placa = BoxLayout(orientation="vertical")
  63.         pop = Popup(title="Seleccione numero a ingresar",content=placa)
  64.         placa.add_widget(Button(text="Volver al juego",on_press=pop.dismiss))
  65.         placa.add_widget(Button(text="Salir de este juego",on_press=self.goInicio))
  66.         pop.open()
  67.        
  68.     def goInicio(self,instance):
  69.         for i in self.manager.screens:
  70.             print i
  71.         self.manager.current = 'juegos'
  72.         print "inicio"
  73.        
  74.     def mostrarCuadro(self,instance):
  75.         print instance.solucion
  76.         botonera = GridLayout(cols=3,rows=4)
  77.         pop = Popup(title="Seleccione numero a ingresar",content=botonera)
  78.         for i in range(9):
  79.             bInterna = Button(text=str(i+1),on_press=self.cambiar,on_release=pop.dismiss,font_size=60)
  80.             bInterna.superior = instance
  81.             botonera.add_widget(bInterna)
  82.         botonera.add_widget(Button(text="no cambiar",on_press=pop.dismiss))
  83.         bInterna = Button(text="_",on_press=self.cambiar,on_release=pop.dismiss)
  84.         bInterna.superior = instance
  85.         botonera.add_widget(bInterna)      
  86.         pop.open()
  87.  
  88.     def cambiar(self,instance):
  89.         if(instance.superior.text != instance.text):
  90.             if(instance.superior.text == "_"): self.guiones -= 1
  91.             if(instance.text == "_"): self.guiones += 1
  92.             instance.superior.text = instance.text
  93.         # aca cuando hago el ultimo cambio determino si termino o no
  94.         self.determinarFin()
  95.    
  96.     def determinarFin(self):
  97.         if(self.guiones == 0):
  98.             print "finalizo"
  99.             correcto = 1
  100.             for i in self.contenedor.children:
  101.                 if(i.disabled == False)and(i.text != ""):
  102.                     if(i.solucion !=  int(i.text)):
  103.                         correcto = 0
  104.                         break  
  105.             if(correcto == 1): print "juego correcto"
  106.             else: print "usted no ha ganado todavia"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement