Advertisement
Geovanny

Crucigrama en Python con TKinter

Dec 31st, 2012
850
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 25.30 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. __author__ = 'mendezg'
  3.  
  4. def crear_lista(caracter,n):
  5.     nl=[]
  6.     while n > 0:
  7.         nl.append(caracter)
  8.         n = n - 1
  9.     return nl
  10.  
  11. #print crear_lista("*",6)
  12.  
  13. def crear_tablero(ancho,alto):
  14.     bolitas="■"
  15.     nt=[]
  16.     while alto > 0:
  17.         nt.append(crear_lista(bolitas,ancho))
  18.         alto = alto - 1
  19.     return nt
  20.  
  21. #print crear_tablero(20,20)
  22.  
  23. def insertar_palabra_horizontalmente(palabra,fila,columna,crucigrama):
  24.     if len(palabra) + columna > len(crucigrama) or fila > len(crucigrama) -1:
  25.         return "Error. Está fuera del rango permitido"
  26.     else:
  27.         while palabra != "":
  28.             crucigrama[fila][columna]= str(palabra[0]).upper() # Upper para insertarlas en mayúsculas
  29.             palabra = palabra[1:]
  30.             columna = columna + 1
  31.         return crucigrama
  32.  
  33. def insertar_palabra_verticalmente(palabra,fila,columna,crucigrama):
  34.     if len(palabra) + fila > len(crucigrama) or columna > len(crucigrama) -1:
  35.         return "Error. Está fuera del rango permitido"
  36.     else:
  37.         while palabra != "":
  38.             crucigrama[fila][columna] = str(palabra[0]).upper()
  39.             palabra = palabra[1:]
  40.             fila = fila + 1
  41.         return crucigrama
  42.  
  43. lista1 = [
  44. ["CANGURO",0,0,"h","Brinca y boxea, es de australia"],
  45. ["ABEJA",1,3,"h","Hace miel"],
  46. ["TIGRE",2,3,"h","Felino salvaje con hermosos colores"],
  47. ["PATO",3,5,"h","Hace cuack"],
  48. ["CABRA",3,12,"h","Animal de granja que come madera y papel"],
  49. ["TORTUGA",4,6,"h",u"Es lenta y tiene caparazón, mascota del maestro Roshi"],
  50. ["CERDO",9,8,"h","Vive en el chiquero"],
  51. ["HIENA",12,15,"h","Hace un sonido similar a una risa, es un can"],
  52. ["HUMANO",14,0,"h","Animal capaz de programar"],
  53. #["IGUANA",16,3,"h","Reptil que disfruta del sol"],
  54. #["BALLENA",18,10,"h"],
  55. ["GATO",0,3,"v",u"Come atún y destroza los sillones de la casa donde vive con las uñas"],
  56. ["RATON",2,6,"v","Come queso"],
  57. ["TIBURON",0,19,"v","Es un depredador del mar al que muchos temen"],
  58. ["PIRANA",5,0,"v","Pez del amazonas muy peligroso"], # Pendiente resolver problema con ñ
  59. ["CAMELLO",3,12,"v","Vive en el desierto y tiene joroba"],
  60. ["ARANA",3,16,"v",u"Tiene muchas patas y hay un héroe que escala paredes en su honor"],
  61. ["JIRAFA",7,10,"v","Tiene el cuello largo"],
  62. ["ELEFANTE",5,17,"v","Tiene trompa larga"]
  63. ]
  64.  
  65. lista2 = [
  66. ["AKATSUKI",2,1,"h","Grupo terrorista de Naruto, que visten capas"],
  67. ["ALUCARD",4,8,"h","Protagonista de Helling"],
  68. ["KURONO",3,8,"h","Protagonista de Gantz"],
  69. ["ICHIGO",10,8,"h","Protagonista de Bleach"],
  70. ["VECTORES",11,0,"h","Manos invisibles de los Diclonius"],
  71. ["HYOGA",7,2,"h","Personaje que ejecuta el Polvo de Diamante"],
  72. ["EVANGELION",13,4,"h",u"Serie de unos mechas que combaten contra ángeles"],
  73. ["KON",14,12,"h","Un osillo que sale en Bleach"],
  74. ["LUCY",15,9,"h","Protagonista de Elfen Lied"],
  75. ["GOKU",17,1,"h","Protagonista de Dragon Ball Z"],
  76. ["HARUHI",1,1,"v","Nombre del personaje que sale en Suzumiya"],
  77. ["UCHIHA",2,6,"v","Apellido de Sasuke"],
  78. ["NARUTO",3,12,"v","Fue discipulo de Jiraiya"],
  79. ["PIKACHU",1,8,"v","Rata amarilla que lanza rayos"],
  80. ["GANTZ",5,17,"v","Serie que trata sobre una bola negra y un juego sangriento"],
  81. ["HELLSING",10,1,"v","Serie de Vampiros donde sale Alucard"],
  82. ["TOKYO",12,12,"v",u"Capital de Japón"],
  83. ["BECK",11,17,"v","Nombre del perro que sale en la serie Beck"],
  84. ["INUYASHA",11,19,"v","Personaje que busca los fragmentos de la Perla de Shikon"],
  85. ["FMA",16,15,"v","Abreviatura de Full Metal Alchemist"]
  86. ]
  87.  
  88. lista3 = [
  89. ["PHP",0,0,"h",u"Lenguaje de Programación Web que funciona del lado del servidor"],
  90. ["BYTE",0,15,"h","1024kb "],
  91. ["JAVA",2,7,"h",u"Lenguaje de programación desarrollado por Sun Microsystems"],
  92. ["GATES",3,6,"h","Apellido del Fundador de Microsoft"],
  93. ["SCHEME",6,7,"h",u"Lenguaje de programación funcional y dialecto de Lisp"],
  94. ["CPU",7,7,"h","Unidad Central de Procesamiento"],
  95. ["EXCEL",7,1,"h",u"Programa de Microsoft para crear hojas de cálculo71"],
  96. ["FIREFOX",9,6,"h","Navegador Web desarrollado por Mozilla"],
  97. ["PYTHON",10,7,"h",u"Lenguaje de programación con nombre de serpiente"],
  98. ["OCLE",12,13,"h",u"Organización de Computadores y Lenguaje Ensamblador"],
  99. ["TORVALDS",14,2,"h",u"Apellido de Linus, Ingeniero de Software Finlandés"],
  100. ["WINDOWS",15,13,"h","Sistema Operativo de Microsoft"],
  101. ["VIDEO",16,5,"h",u"Un archivo con extensión .avi es un archivo de...?"],
  102. ["OPERA",17,6,"h",u"Navegador que implementó por primera vez las pestañas"],
  103. ["HARDWARE",0,1,"v","Parte tangible de la computadora"],
  104. ["PAINT",0,2,"v","Programa para dibujar que trae Windows"],
  105. ["JAVASCRIPT",2,7,"v",u"Lenguaje de programación web del lado del cliente"],
  106. ["MOUSE",4,19,"v",u"Nombre en inglés del ratón de la computadora"],
  107. ["BINARIO",11,6,"v",u"Sistema de numeración donde se usan solo unos y ceros"],
  108. ["SOFTWARE",11,13,"v","Programas del computador"],
  109. ]
  110.  
  111. def montar_crucigrama(l,crucigrama):
  112.     nc = crucigrama
  113.     while l != []:
  114.         if l[0][3] == "h":
  115.             nc = insertar_palabra_horizontalmente(l[0][0],l[0][1],l[0][2],nc)
  116.         elif l[0][3] == "v":
  117.             nc = insertar_palabra_verticalmente(l[0][0],l[0][1],l[0][2],nc)
  118.         l = l[1:]
  119.     return nc
  120.  
  121. def preparar_palabra(s):
  122.     ns = ""
  123.     ns = ns + ("_" * (len(s)))
  124.     return ns
  125.  
  126. def numerar_crucigrama(l,crucigrama):
  127.     while l != []:
  128.         if l[0][3] == "h":
  129.             crucigrama = insertar_palabra_horizontalmente(preparar_palabra(l[0][0]),l[0][1],l[0][2],crucigrama)
  130.         elif l[0][3] == "v":
  131.             crucigrama = insertar_palabra_verticalmente(preparar_palabra(l[0][0]),l[0][1],l[0][2],crucigrama)
  132.         l = l[1:]
  133.     return crucigrama
  134.  
  135. def ver_palabra(n,l):
  136.     ind = 0
  137.     while l != []:
  138.         if ind == n - 1:
  139.             return l[0][0]
  140.         n = n - 1
  141.         l = l[1:]
  142.  
  143. def eliminar_palabra(numero,orientacion,lista,crucigrama):
  144.     if orientacion == "h":
  145.         lista = sacar_horizontales(lista)
  146.         if numero > len(lista):
  147.             return "Error, las horizontales del crucigrama tienen solo " + str(len(lista)) + " palabras"
  148.         else:
  149.             return insertar_palabra_horizontalmente(preparar_palabra(ver_palabra(numero,lista)),lista[numero - 1][1],lista[numero - 1][2],crucigrama)
  150.     elif orientacion == "v":
  151.         lista = sacar_verticales(lista)
  152.         if numero > len(lista):
  153.             return "Error, las verticales del crucigrama tienen solo " + str(len(lista)) + " palabras"
  154.         else:
  155.               return insertar_palabra_verticalmente(preparar_palabra(ver_palabra(numero,lista)),lista[numero - 1][1],lista[numero - 1][2],crucigrama)
  156.  
  157. logo = """CCCCCCCCCCC  RRRRRRRRRRR UUU    UUU CCCCCCCCCCC III GGGGGGGGGG RRRRRRRRRRR AAAAAAAAAA MMMMMMMMMMMMM AAAAAAAAAA
  158. CCCCCCCCCCC  RRRRRRRRRRR UUU    UUU CCCCCCCCCCC III GGGGGGGGGG RRRRRRRRRRR AAAAAAAAAA MMMMMMMMMMMMM AAAAAAAAAA
  159. CCCC         RRR     RRR UUU    UUU CCCC        III GGG        RRR     RRR AAA    AAA MMM  MMM  MMM AAA    AAA
  160. CCCC         RRR     RRR UUU    UUU CCCC        III GGG        RRR     RRR AAA    AAA MMM  MMM  MMM AAA    AAA
  161. CCCC         RRRRRRRRRRR UUU    UUU CCCC        III GGG        RRRRRRRRRRR AAAAAAAAAA MMM  MMM  MMM AAAAAAAAAA
  162. CCCC         RRRRRRRRRRR UUU    UUU CCCC        III GGG        RRRRRRRRRRR AAAAAAAAAA MMM  MMM  MMM AAAAAAAAAA
  163. CCCC         RRRRRR      UUU    UUU CCCC        III GGG  GGGGG RRRRRR      AAA    AAA MMM  MMM  MMM AAA    AAA
  164. CCCC         RRR RRR     UUU    UUU CCCC        III GGG    GGG RRR RRR     AAA    AAA MMM  MMM  MMM AAA    AAA
  165. CCCC         RRR   RRR   UUU    UUU CCCC        III GGG    GGG RRR   RRR   AAA    AAA MMM       MMM AAA    AAA
  166. CCCC         RRR    RRR  UUU    UUU CCCC        III GGG    GGG RRR    RRR  AAA    AAA MMM       MMM AAA    AAA
  167. CCCCCCCCCCC  RRR    RRR   UUUUUUUU  CCCCCCCCCCC III GGGGGGGGGG RRR    RRR  AAA    AAA MMM       MMM AAA    AAA
  168. CCCCCCCCCCC  RRR    RRR   UUUUUUUU  CCCCCCCCCCC III GGGGGGGGGG RRR    RRR  AAA    AAA MMM       MMM AAA    AAA
  169. .............................................................................................................."""
  170.  
  171. acercade = """★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
  172. Crucigrama por Geovanny Méndez Marín
  173. ITCR Sede San Carlos, Segundo Semestre 2010
  174. Elaborado en Python 2.7 utilizando el IDE Pycharm 1.0 beta
  175. Lunes 13 de Setiembre 2010 (Versión Consola)
  176. Lunes 20 de Setiembre 2010 (Versión Interfaz)
  177. http://python-tec.blogspot.com/
  178. ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★"""
  179.  
  180. def graficar(c):
  181.     indfilas,indcolumnas,largofilas,largocolumnas=0,0,len(c),len(c[0])
  182.     linea=""
  183.     cf=""
  184.     while indfilas < largofilas:
  185.         while indcolumnas < largocolumnas:
  186.             linea = linea +  str(c[indfilas][indcolumnas])  + " "
  187.             indcolumnas = indcolumnas + 1
  188.         cf = cf + linea
  189.         cf = cf + "\n"
  190.         linea = ""
  191.         indfilas = indfilas + 1
  192.         indcolumnas = 0
  193.     return cf
  194.  
  195. # ► Saca de una lista, todas las palabras horizontales
  196. def sacar_horizontales(l):
  197.     nl = []
  198.     while l != []:
  199.         if l[0][3] == "h":
  200.             nl.append(l[0])
  201.         l = l[1:]
  202.     return nl
  203.  
  204. # ► Saca de una lista, todas las palabras horizontales
  205. def sacar_verticales(l):
  206.     nl = []
  207.     while l != []:
  208.         if l[0][3] == "v":
  209.             nl.append(l[0])
  210.         l = l[1:]
  211.     return nl
  212.  
  213. def acertijos(l):
  214.     ind = 1
  215.     lhorizontal = sacar_horizontales(l)
  216.     lvertical = sacar_verticales(l)
  217.     ns=""
  218.     ns = ns + u"₪ Horizontales" + "\n"
  219.     while lhorizontal != []:
  220.         ns = ns +  u"◆ " + str(ind) + ". " + lhorizontal[0][4] + " (Tiene " + str(len(lhorizontal[0][0])) + " letras)" + "\n"
  221.         lhorizontal = lhorizontal[1:]
  222.         ind = ind + 1
  223.     ind = 1
  224.     ns = ns + "\n"
  225.     ns = ns +  u"₪ Verticales"  + "\n"
  226.     while lvertical != []:
  227.         ns = ns +  u"◆ " + str(ind) + ". " + lvertical[0][4] + " (Tiene " + str(len(lvertical[0][0])) + " letras)" + "\n"
  228.         lvertical = lvertical[1:]
  229.         ind = ind + 1
  230.     return ns
  231.  
  232. def jugar(palabra,numero,orientacion,lista,crucigrama):
  233.     mensaje = "La palabra debe tener " + str(len(palabra)) + " letras"
  234.     if orientacion == "h":
  235.         lista = sacar_horizontales(lista)
  236.         if numero > len(lista):
  237.             return "Error, las horizontales del crucigrama tienen solo " + str(len(lista)) + " palabras"
  238.         else:
  239.             if len(palabra) == len(lista[numero - 1][0]):
  240.                 return insertar_palabra_horizontalmente(palabra,lista[numero - 1][1],lista[numero - 1][2],crucigrama)
  241.             else:
  242.                 mensaje = "La palabra debe tener " + str(len(lista[numero - 1][0])) + " letras"
  243.                 return mensaje
  244.     elif orientacion == "v":
  245.         lista = sacar_verticales(lista)
  246.         if numero > len(lista):
  247.             return "Error, las verticales del crucigrama tienen solo " + str(len(lista)) + " palabras"
  248.         else:
  249.             if len(palabra) == len(lista[numero - 1][0]):
  250.                 return insertar_palabra_verticalmente(palabra,lista[numero - 1][1],lista[numero - 1][2],crucigrama)
  251.             else:
  252.                 mensaje = "La palabra debe tener " + str(len(lista[numero - 1][0])) + " letras"
  253.                 return mensaje
  254.  
  255. def ayudar_palabra(s):
  256.     ns = ""
  257.     ns = ns + s[0]
  258.     ns = ns + ("_" * (len(s) - 1))
  259.     return ns
  260.  
  261. # ► Ayuda al usuario enseñándole la primera letra de la palabra que él quiere
  262. def ayuda(numero,orientacion,lista,crucigrama):
  263.     if orientacion == "h":
  264.         lista = sacar_horizontales(lista)
  265.         if numero > len(lista):
  266.             return "Error, las horizontales del crucigrama tienen solo " + str(len(lista)) + " palabras"
  267.         else:
  268.             return insertar_palabra_horizontalmente(ayudar_palabra(ver_palabra(numero,lista)),lista[numero - 1][1],lista[numero - 1][2],crucigrama)
  269.     elif orientacion == "v":
  270.         lista = sacar_verticales(lista)
  271.         if numero > len(lista):
  272.             return "Error, las verticales del crucigrama tienen solo " + str(len(lista)) + " palabras"
  273.         else:
  274.               return insertar_palabra_verticalmente(ayudar_palabra(ver_palabra(numero,lista)),lista[numero - 1][1],lista[numero - 1][2],crucigrama)
  275.  
  276. # ► Determina si un elemento es miembro de una lista
  277. def miembro(ele,l):
  278.     while l != []:
  279.         if ele == l[0]:
  280.             return True
  281.             break
  282.         else:
  283.             l = l[1:]
  284.     if l == []:
  285.         return False
  286.  
  287. # ► Verifica si el crucigrama está lleno
  288. def verificar_tablero_lleno(crucigrama):
  289.     while crucigrama != []:
  290.         if miembro("_",crucigrama[0]):
  291.             return False
  292.             break
  293.         else:
  294.             crucigrama = crucigrama[1:]
  295.     if crucigrama == []:
  296.         return True
  297.  
  298. def verificar_gane(c1,c2):
  299.     if c1 == c2:
  300.         return True
  301.     else:
  302.         return False
  303.  
  304. listausada = []# lista1
  305. crucigrama1 = [] #crear_tablero(20,20)
  306. crucigrama1aux = []#crear_tablero(20,20)
  307. #crucigrama1resuelto = montar_crucigrama(listausada,crucigrama1)
  308. #montar_crucigrama(listausada,crucigrama1aux)
  309. crucigrama1numerado = []# numerar_crucigrama(listausada,crucigrama1)
  310. #graficar(crucigrama1resuelto)
  311. #acertijos(listausada)
  312.  
  313. #print graficar(crucigrama1)
  314.  
  315. #▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄▀▄
  316. #► INTERFAZ GRÁFICA
  317.  
  318. import Tkinter
  319. from Tkinter import *
  320. from functools import partial
  321.  
  322. ventana1 = Tkinter.Tk() # Ventana principal
  323. v1=ventana1 # Arreglo
  324. ventana1.config(bg="white") # Fondo blanco para la ventana de crucigramas
  325. ventana0 = Tkinter.Tk() # Menú para elegir el crucigrama
  326. dialogo1 = Tkinter.Tk() # Con las opciones para jugar
  327. dialogo2 = Toplevel(ventana1) # Cuadro de texto para introducir palabra
  328. dialogo3 = Toplevel(ventana1) # About
  329. dialogo4 = Toplevel(ventana1) # Mensajes al usuario cuando el tablero está lleno
  330. ancho,alto=1024,600
  331.  
  332. # ► Arregla el tamaño de las ventanas
  333. ventana0.geometry(str(ancho) + "x" + str(alto)), ventana1.geometry(str(ancho) + "x" + str(alto))
  334.  
  335. # ► Cambia a modo de splash screen
  336. ventana0.overrideredirect(1), ventana1.overrideredirect(1),dialogo3.overrideredirect(1)
  337.  
  338. # ► Evita que se puedan redimencionar los diálogos
  339. dialogo1.resizable(0,0),dialogo2.resizable(0,0),dialogo3.resizable(0,0),dialogo4.resizable(0,0)
  340.  
  341. # ► Evita que una ventana pueda ser cerrada
  342. dialogo1.protocol("WM_DELETE_WINDOW", "onexit"), dialogo2.protocol("WM_DELETE_WINDOW", "onexit")
  343. dialogo3.protocol("WM_DELETE_WINDOW", "onexit"), dialogo4.protocol("WM_DELETE_WINDOW", "onexit")
  344.  
  345. # ► Títulos de las ventanas
  346. ventana1.title("Crucigrama"), dialogo1.title("Opciones disponibles"), dialogo2.title("Inserte la palabra")
  347. dialogo3.title("Acerca de..."), dialogo4.title("¡Diagnóstico!")
  348.  
  349. # ► Dialogo para jugar
  350. v2= Frame(dialogo1, height=500,width=500,bg="white")
  351. v2.pack(side=TOP, expand=YES, fill=BOTH)
  352. v3= Frame(dialogo2, height=500,width=500,bg="white")
  353. v3.pack(side=TOP, expand=YES, fill=BOTH)
  354.  
  355. # ► Descripción de las palabras a encontrar, usando StringVar
  356. losacertijos = StringVar()
  357. losacertijos.set(acertijos(listausada))
  358.  
  359. # ► Funciones
  360.  
  361. def establecer_crucigrama(n):
  362.     global listausada
  363.     global crucigrama1
  364.     global crucigrama1aux
  365.     global crucigrama1numerado
  366.     if n == 1:
  367.         listausada = lista1
  368.     if n == 2:
  369.         listausada = lista2
  370.     if n == 3:
  371.         listausada = lista3
  372.     crucigrama1 = crear_tablero(20,20)
  373.     crucigrama1aux = crear_tablero(20,20)
  374.     crucigrama1numerado = numerar_crucigrama(listausada,crucigrama1)
  375.     elcrucigrama.set(graficar(crucigrama1))
  376.     losacertijos.set(acertijos(listausada))
  377.     crear_botones(len(sacar_horizontales(listausada)),frameh,"h")
  378.     crear_botones(len(sacar_verticales(listausada)),framev,"v")
  379.  
  380. def mostrar(ventana): return ventana.deiconify
  381. def ocultar(ventana): return ventana.withdraw
  382. def cerrar(ventana): return ventana.quit
  383. def imprimir(ele):  print ele
  384. def doit(f): ventana1.after(100, f)
  385.  
  386. procesando = "" # Variable cambiante, es el número y la orientación
  387.  
  388. avev = StringVar()
  389. avev.set("")#doit(avev.set("xzxz"))
  390. avs = Label(v3,textvariable=avev,bg="white",width=23,font=("Arial", 12))
  391. avs.pack()
  392.  
  393. tupalabra=StringVar() # ► Es la palabra que el usuario introduce. Si la palabra es incorrecta, entonces no se inserta
  394. tupalabra.set("")
  395. intropal = Entry(v3,textvariable=tupalabra,bg="white",font=("Arial", 30),justify="center") # Aquí el usuario introduce la palabra para jugar
  396. intropal.pack()
  397.  
  398. # ► Esta función calcula si hay más de 10 palabras ya sea horizontales y verticales para el correcto funcionamiento
  399. def calculo_protegon(s,calculo):
  400.     if calculo == "letra":
  401.         return s[-1]
  402.     elif calculo == "cifra":
  403.         if len(s) > 2:
  404.             return int(s[0:2])
  405.         else:
  406.             return int(s[0])
  407.  
  408. def almacenar_procesando(nuevovalor):
  409.     global procesando
  410.     procesando = nuevovalor
  411.     print "Ahora se está evaluando", nuevovalor
  412.  
  413. def verificar_insertable(palabra,numero,orientacion,lista,crucigrama):
  414.     if type(jugar(palabra,numero,orientacion,lista,crucigrama)) != list:
  415.         return False
  416.     else:
  417.         return True
  418.  
  419. def cambiar_por_insertable(palabra,numero,orientacion,lista,crucigrama):
  420.     if verificar_insertable(palabra,numero,orientacion,lista,crucigrama):
  421.         print "Éxito"
  422.         jugar(palabra,numero,orientacion,lista,crucigrama   )
  423.         elcrucigrama.set(graficar(crucigrama1))
  424.         doit(ocultar(dialogo2))
  425.         doit(tupalabra.set(""))
  426.         doit(avev.set(""))
  427.     else:
  428.         print "Error:"
  429.         print jugar(palabra,numero,orientacion,lista,crucigrama)
  430.         #avisoerrvariable.set(jugar(palabra,numero,orientacion,lista,crucigrama))
  431.         doit(avev.set(jugar(palabra,numero,orientacion,lista,crucigrama)))
  432.         #avev.set("h")
  433.  
  434. def graficar_el_eliminar(numero,orientacion,lista,crucigrama):
  435.         doit(ocultar(dialogo2))
  436.         doit(ocultar(dialogo1))
  437.         eliminar_palabra(numero,orientacion,lista,crucigrama)
  438.         elcrucigrama.set(graficar(crucigrama1))
  439.  
  440. def graficar_el_ayudar(numero,orientacion,lista,crucigrama):
  441.         doit(ocultar(dialogo2))
  442.         doit(ocultar(dialogo1))
  443.         ayuda(numero,orientacion,lista,crucigrama)
  444.         elcrucigrama.set(graficar(crucigrama1))
  445.         eliminar_palabra(numero,orientacion,lista,crucigrama)
  446.  
  447. # ► Verifica si el tablero está lleno y además, si está correctamente lleno o si hay errores
  448. def graficar_tablero_lleno(crucigrama):
  449.     if verificar_tablero_lleno(crucigrama):
  450.         if verificar_gane(crucigrama,montar_crucigrama(listausada,crucigrama1aux)):
  451.             doit(dialogo4.title("Ganaste"))
  452.             doit(mostrar(dialogo4))
  453.         else:
  454.             doit(dialogo4.title("Perdiste"))
  455.             doit(mostrar(dialogo4))
  456.             #doit(cerrar(ventana1))
  457.  
  458. def imprimir_label(btn):
  459.     s = "%s" % btn
  460.     ventana1.after(100, mostrar(dialogo1))
  461.     ventana1.after(100, almacenar_procesando(s))
  462.     doit(intropal.delete(0,END))
  463.  
  464. # ► Crea botones dinámicamente, utilizando el módulo partial para que impriman su propio label al darle click
  465. def crear_botones(n,panel,orientacion):
  466.     btn = range(1,n+1)
  467.     if orientacion == "h":
  468.         desition=LEFT
  469.     else:
  470.         desition=LEFT
  471.     for label in btn:
  472.         cmd = partial(imprimir_label, str(label)+orientacion)
  473.         buzo = Button(panel, text=label, width=5,command=cmd,fg="white",bg="black",activebackground="black",activeforeground="red")
  474.         buzo.pack(side=desition)
  475.  
  476. # ► Función de interfaz para escoger entre un crucigrama y otro en el menú del inicio
  477. def elegir_crucigrama(n):
  478.     if n == 1:
  479.         establecer_crucigrama(1)
  480.     if n == 2:
  481.         establecer_crucigrama(2)
  482.     if n == 3:
  483.         establecer_crucigrama(3)
  484.     doit(ocultar(ventana0))
  485.     doit(mostrar(ventana1))
  486.     doit(ventana1.wm_attributes("-topmost", 1))
  487.  
  488. # ► Ventana para elegir el juego
  489.  
  490. # ► Prueba sobre como insertar imágenes
  491. #p0001 = PhotoImage(file="images/0001.gif")
  492. #fondo1 = Label(ventana0, image=p0001)
  493. #fondo1.photo = p0001
  494. #fondo1.pack()
  495.  
  496. frame6 = Frame(ventana0)
  497.  
  498. ventana0.title("Bienvenido al Crucigrama")  # Título
  499. ventana0.config(bg="black")
  500. Label(ventana0, text=logo,font=("Courier", 8),bg="black",fg="white").pack(side=TOP)
  501. Button(ventana0,command=lambda:elegir_crucigrama(1), text="ANIMALES",font=("Courier", 20),bg="black",fg="white",bd=0,activebackground="black",activeforeground="red").pack(side=TOP)
  502. Button(ventana0,command=lambda:elegir_crucigrama(2), text="ANIME",font=("Courier", 20),bg="black",fg="white",bd=0,activebackground="black",activeforeground="red").pack(side=TOP)
  503. Button(ventana0,command=lambda:elegir_crucigrama(3), text="COMPUTACIÓN",font=("Courier", 20),bg="black",fg="white",bd=0,activebackground="black",activeforeground="red").pack(side=TOP)
  504. Button(ventana0,command=lambda:ventana1.quit(), text="SALIR",font=("Courier", 20),bg="black",fg="white",bd=0).pack(side=BOTTOM)
  505.  
  506. ###########################################################################
  507. # ► Ventana Principal de Juego
  508.  
  509. # ► Decoración de la ventana
  510. ventana1.title("Crucigrama")  # Título
  511. ventana1.geometry(str(ancho) + "x" + str(alto))  # Ancho y Alto inicial
  512. #ventana1.wm_state('zoomed')
  513.  
  514. # ► Elementos y Widgets
  515. frame5 = Frame(v1,bg="white")
  516.  
  517. frame5.pack(side=BOTTOM)
  518. Label(frame5, text="  ",font=("Courier", 12),bg="white").pack(side=BOTTOM)
  519. b1 = Button(frame5, text="CERRAR",command=cerrar(ventana1),bg="white")
  520. b1.pack(side=LEFT)
  521. Label(frame5, text=" ",font=("Courier", 8),bg="white").pack(side=LEFT)
  522. b2 = Button(frame5, text="ABOUT",command=mostrar(dialogo3),bg="white")
  523. b2.pack(side=LEFT)
  524.  
  525. frame5 = Frame(v1,bg="white")
  526. frame5.pack(side=BOTTOM, expand=YES, fill=BOTH)
  527.  
  528. frame4 = Frame(frame5,bg="white")
  529. frame4.pack(side=TOP)
  530.  
  531. #happy1 = Label(frame4, text="☻  ",font=("Courier", 100),bg="white").pack(expand=YES, fill=BOTH,side=LEFT)
  532. #happy2 = Label(frame4, text="  ☻",font=("Courier", 100),bg="white").pack(expand=YES, fill=BOTH,side=RIGHT)
  533.  
  534. frame2 = Frame(frame4,bg="white")
  535. lh = Label(frame2, text="₪ HORIZONTALES ₪",font=("Impact", 16),bg="white").pack(side=TOP)
  536. frameh = Frame(frame2,bg="white")
  537. frameh.pack()
  538. frame2.pack(side=TOP, expand=YES, fill=BOTH)
  539.  
  540. frame3 = Frame(frame4,bg="white")
  541. lh = Label(frame3, text="₪ VERTICALES ₪",font=("Impact", 16),bg="white").pack(side=TOP)
  542. framev = Frame(frame3,bg="white")
  543. framev.pack()
  544.  
  545. frame3.pack(side=BOTTOM, expand=YES, fill=BOTH)
  546.  
  547. elcrucigrama=StringVar()
  548. #elcrucigrama.set(graficar(crucigrama1))
  549.  
  550. l0 = Label(v1, text='''☼ CRUCIGRAMA ☼''',font=("Arial", 30),bg="white").pack(side=TOP)
  551. frame1 = Frame(v1,height=1024,width=768,bg="white")
  552. frame1.pack()
  553. l1 = Label(frame1, textvariable=elcrucigrama,font=("Courier", 12),bg="white").pack(side=LEFT)
  554. l4 = Label(frame1, text="""▲\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n▼""",font=("Courier", 12),bg="white").pack(side=LEFT)
  555. l3 = Label(frame1, textvariable=losacertijos,font=("Arial", 10),justify=LEFT,bg="white").pack(side=TOP)
  556.  
  557. Label(v2, text="QUÉ DESEAS HACER?",font=("Courier", 18),justify=CENTER,bg="white").pack()
  558. Button(v2, text="COLOCAR PALABRA",font=("Courier", 12),bg="white",command=lambda: doit(ocultar(dialogo1)) or doit(mostrar(dialogo2))).pack()
  559. Button(v2, text="ELIMINAR PALABRA",font=("Courier", 18),bg="white",command=lambda: (graficar_el_eliminar(calculo_protegon(procesando,"cifra"),calculo_protegon(procesando,"letra"),listausada,crucigrama1
  560. ))).pack()
  561. Button(v2, text="AYUDA CON PALABRA",font=("Courier", 14),bg="white",command=lambda: (graficar_el_ayudar(calculo_protegon(procesando,"cifra"),calculo_protegon(procesando,"letra"),listausada,crucigrama1))).pack()
  562. Button(v2, text="ACEPTAR",bg="white",command=ocultar(dialogo1)).pack()
  563.  
  564. Button(v3, text="ACEPTAR",bg="white",command=lambda: doit(tupalabra.set(Entry.get(intropal))) or doit(imprimir(Entry.get(intropal))) or doit((cambiar_por_insertable(Entry.get(intropal),calculo_protegon(procesando,"cifra"),calculo_protegon(procesando,"letra"),listausada,crucigrama1))) or doit(graficar_tablero_lleno(crucigrama1))).pack()
  565. # ►Cierra la ventana donde se introduce la palabra
  566.  
  567. Button(dialogo3, text=acercade,font=("Courier", 12),justify=CENTER,bg="white",command=lambda: doit(ocultar(dialogo3))).pack()
  568.  
  569. # ► Función para centrar una ventana en Windows (No sé si la centrará el Linux)
  570. def centrar(ventana):
  571.     ventana.update_idletasks()
  572.     w=ventana.winfo_width()
  573.     h=ventana.winfo_height()
  574.     extraW=ventana.winfo_screenwidth()-w
  575.     extraH=ventana.winfo_screenheight()-h
  576.     ventana.geometry("%dx%d%+d%+d" % (w,h,extraW/2,extraH/2))
  577.  
  578. # ► Withdraw desaparece las ventanas al principio
  579. dialogo1.withdraw(), dialogo2.withdraw(), dialogo3.withdraw(), dialogo4.withdraw()
  580.  
  581. # ► wm_attributes -topmost se usa para hacer el Always on Top, ventanas siempre encima de otras
  582. dialogo1.wm_attributes("-topmost", 1), dialogo2.wm_attributes("-topmost", 1)
  583. dialogo3.wm_attributes("-topmost", 1), dialogo4.wm_attributes("-topmost", 1)
  584.  
  585. # ► Otra forma de hacer desaparecer las ventanas
  586. doit(ocultar(ventana1))
  587. doit(mostrar(ventana0))
  588. doit(ventana0.wm_attributes("-topmost", 1))
  589.  
  590. # ► Con esta función las ventanas de la aplicación quedan centradas
  591. centrar(dialogo1), centrar(dialogo2), centrar(dialogo3), centrar(dialogo4), centrar(ventana1), centrar(ventana0)
  592. ventana0.mainloop()
  593.  
  594. exit()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement