Advertisement
manhattanxl

Interfaz para sudoku, Python, Kivy

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