#!/usr/bin/env python3
#-------------------------------
from gi.repository import Gtk
import random
#-------------------------------
def empezar(widget):
pass
def minimizar(widget):
window.unmaximize()
def maximizar(widget):
window.maximize()
def quitar_guiones_dieresis(palabra):
palabra_cambiada = ''
for letra in palabra:
if letra in ['á', 'à', 'ä', 'â']:
palabra_cambiada += 'a'
elif letra in ['é', 'è', 'ë', 'ê']:
palabra_cambiada += 'e'
elif letra in ['í', 'ì', 'ï', 'î']:
palabra_cambiada += 'i'
elif letra in ['ó', 'ò', 'ö', 'ô']:
palabra_cambiada += 'o'
elif letra in ['ú', 'ù', 'ü', 'û']:
palabra_cambiada += 'u'
else:
palabra_cambiada += letra
return palabra_cambiada
def cambiar_persona_ahorcada(widget, opcion):
global tipo_imagen
tipo_imagen = opcion
def cambiar_imagen(fallos, tipo_imagen): # Terminado
if tipo_imagen == 'blanco':
imagenes = ["fallo1.png", "fallo2.png", "fallo3.png", "fallo4.png", "fallo5.png", "fallo6.png", "fallo7.png"]
elif tipo_imagen == 'negro':
imagenes = ["fallo1.png", "fallo2.png", "fallo3.png", "fallo4.png", "fallo5.png", "fallo6.png", "fallo7.png"]
elif tipo_imagen == 'chino':
imagenes = ["fallo1.png", "fallo2.png", "fallo3.png", "fallo4.png", "fallo5.png", "fallo6.png", "fallo7.png"]
imagen.set_from_file(imagenes[fallos-1])
def terminar_partida(restante_escondida): # Terminado
global fallos
if fallos == 7:
introducir_letra.set_editable(False)
label_error.set_text("El juego ha terminado, has perdido. La palabra era: " + palabra_escondida.upper())
elif restante_escondida == palabra_escondida:
introducir_letra.set_editable(False)
label_error.set_text("ENHORABUENA, HAS GANADO")
def cambiar_letras_falladas(letra): # Terminado
letras_falladas.append(letra)
if label_letras_falladas.get_text() == '-':
label_letras_falladas.set_text(letra)
else:
label_letras_falladas.set_text(label_letras_falladas.get_text() + ',' + letra)
def comprobar_palabra(widget):
global fallos
if guiones_solucion.get_text().lower() == palabra_escondida or fallos == 7:
return
#--------
lista_letras = list("bcdfghjklmnñpqrstuvwxyzaeiouáéíóúàèìòùäëïöüâêîôû")
letra = introducir_letra.get_text().lower()
if letra not in lista_letras:
label_error.set_text("Error: Introduce solo una letra")
introducir_letra.grab_focus()
return
elif letra in letras_falladas:
label_error.set_text("Error: Ya has fallado esa letra")
introducir_letra.grab_focus()
return
elif letra in letras_acertadas:
label_error.set_text("Error: Ya has acertado esa letra")
introducir_letra.grab_focus()
return
else:
label_error.set_text("")
#--------
acertar = False
guiones_actuales = guiones_solucion.get_text().lower()
restante_escondida = ''
for letra_escondida in palabra_escondida:
if letra_escondida not in guiones_actuales: # Si la letra no está puesta ya en la palabra:
if letra == letra_escondida or letra == quitar_guiones_dieresis(letra_escondida): # Si la letra es igual...
acertar = True
letras_acertadas.append(letra)
letras_acertadas.append(letra_escondida) # Añadimos las 2(para las vocales con guiones)
restante_escondida += letra_escondida
else:
restante_escondida += '_ '
else: # Si la letra ya está dicha la ponemos
restante_escondida += letra_escondida
guiones_solucion.set_text(restante_escondida.upper())
terminar_partida(restante_escondida)
if acertar == False:
fallos += 1
cambiar_letras_falladas(letra)
cambiar_imagen(fallos)
terminar_partida(restante_escondida)
introducir_letra.set_text('')
introducir_letra.grab_focus()
#===========================
#===========================
diccionario = ['casá', 'cigüeña', 'esternocleidomastoideo', 'murciélago']
letras_falladas = []
letras_acertadas = []
fallos = 0
tipo_imagen = '1'
#===========================
window = Gtk.Window()
window.set_title("Ahorcado")
window.connect("delete-event", Gtk.main_quit)
#=========
contenedor_grid = Gtk.Grid()
contenedor_grid.set_row_spacing(5)
contenedor_grid.set_column_spacing(5)
#=========
menu_general = Gtk.MenuBar()
#---Categorías del menú
menu_item_archivo = Gtk.MenuItem(label='Archivo')
menu_general.append(menu_item_archivo)
menu_item_edicion = Gtk.MenuItem(label='Edición')
menu_general.append(menu_item_edicion)
menu_item_ver = Gtk.MenuItem(label='Ver')
menu_general.append(menu_item_ver)
menu_item_configuracion = Gtk.MenuItem(label='Configuración')
menu_general.append(menu_item_configuracion)
menu_item_salir = Gtk.MenuItem(label='Salir')
menu_general.append(menu_item_salir)
#---Subcategorías del menú
submenu_archivo = Gtk.Menu()
menu_item_archivo.set_submenu(submenu_archivo)
submenu_edicion = Gtk.Menu()
menu_item_edicion.set_submenu(submenu_edicion)
submenu_ver = Gtk.Menu()
menu_item_ver.set_submenu(submenu_ver)
submenu_configuracion = Gtk.Menu()
menu_item_configuracion.set_submenu(submenu_configuracion)
submenu_salir = Gtk.Menu()
menu_item_salir.set_submenu(submenu_salir)
#---Elementos subcategorías(1º)
item_repetir = Gtk.MenuItem(label='Empezar de nuevo')
item_repetir.connect('activate', empezar)
submenu_archivo.append(item_repetir)
item_cambiar_imagen = Gtk.MenuItem(label='Cambiar imagen')
submenu_edicion.append(item_cambiar_imagen)
item_minimizar = Gtk.MenuItem(label='Minimizar')
item_minimizar.connect('activate', minimizar)
submenu_ver.append(item_minimizar)
item_maximizar = Gtk.MenuItem(label='Maximizar')
item_maximizar.connect('activate', maximizar)
submenu_ver.append(item_maximizar)
item_cerrar = Gtk.MenuItem(label='Cerrar aplicación')
item_cerrar.connect('activate', Gtk.main_quit)
submenu_salir.append(item_cerrar)
#---Elementos subcategorías(2º, no se ve a simple vista)
menu_cambiar_imagenes = Gtk.Menu()
item_cambiar_imagen.set_submenu(menu_cambiar_imagenes)
#---Elementos subcategorías(3º, opciones)
cambiar_imagen_1 = Gtk.MenuItem(label='Imagen')
cambiar_imagen_1.connect('select', cambiar_persona_ahorcada, '1')
menu_cambiar_imagenes.append(cambiar_imagen_1)
cambiar_imagen_2 = Gtk.MenuItem(label='Blanco')
cambiar_imagen_2.connect('select', cambiar_persona_ahorcada, '2')
menu_cambiar_imagenes.append(cambiar_imagen_2)
cambiar_imagen_3 = Gtk.MenuItem(label='Chino')
cambiar_imagen_3.connect('select', cambiar_persona_ahorcada, '3')
menu_cambiar_imagenes.append(cambiar_imagen_3)
#---
contenedor_grid.attach(menu_general, 0, 0, 2, 1)
#=====
imagen = Gtk.Image()
imagen.set_from_file("fallo0.png")
contenedor_grid.attach(imagen, 0, 2, 1, 1)
#=====
frame = Gtk.Frame()
contenedor_frame = Gtk.Grid()
palabra_escondida = random.choice(diccionario)
contenedor_frame.attach(Gtk.Label("Solución:"), 0, 0, 1, 1)
guiones_solucion = Gtk.Label(len(palabra_escondida) * '_ ')
contenedor_frame.attach(guiones_solucion, 1, 0, 1, 1)
#=====
contenedor_frame.attach(Gtk.Label('Letras falladas:'), 0, 1, 1, 1)
label_letras_falladas = Gtk.Label("-")
contenedor_frame.attach(label_letras_falladas, 1, 1, 1, 1)
#=====
contenedor_frame.attach(Gtk.Label('Introduce una letra: '), 0, 2, 1, 1)
introducir_letra = Gtk.Entry()
contenedor_frame.attach(introducir_letra, 1, 2, 1, 1)
#=====
boton_enviar_letra = Gtk.Button(label='Enviar')
boton_enviar_letra.connect('clicked', comprobar_palabra)
contenedor_frame.attach_next_to(boton_enviar_letra, introducir_letra, Gtk.PositionType.RIGHT, 1, 1)
label_error = Gtk.Label('-')
contenedor_frame.attach_next_to(label_error, introducir_letra, Gtk.PositionType.BOTTOM, 1, 1)
#=====
frame.add(contenedor_frame)
contenedor_grid.attach_next_to(frame, imagen, Gtk.PositionType.RIGHT, 1, 1)
window.add(contenedor_grid)
#=========
window.show_all()
Gtk.main()