Created
May 7, 2024 05:33
-
-
Save yeffrimic/fc439426f7233049db8d07ae87fd0a5d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import os | |
import pygame | |
import sys | |
import pyttsx3 | |
# Inicializar Pygame | |
pygame.init() | |
# Inicializar pyttsx3 | |
engine = pyttsx3.init() | |
# Configurar la velocidad de la voz | |
engine.setProperty('rate', 150) # Aquí puedes ajustar la velocidad, 150 es un buen punto de partida | |
# Definir dimensiones de la ventana | |
ANCHO = 1920 | |
ALTO = 1080 | |
CELDA_ANCHO = ANCHO // 3 | |
CELDA_ALTO = ALTO // 4 | |
# Definir colores | |
BLANCO = (255, 255, 255) | |
NEGRO = (0, 0, 0) | |
# Obtener la lista de archivos de imágenes en el directorio actual | |
imagenes_dir = "./imagenes" | |
imagenes_files = os.listdir(imagenes_dir) | |
imagenes_paths = [os.path.join(imagenes_dir, file) for file in imagenes_files if file.endswith(".png")] | |
# Cargar las imágenes | |
imagenes = [pygame.image.load(path) for path in imagenes_paths] | |
# Escalar las imágenes para que encajen en las celdas | |
imagenes = [pygame.transform.scale(imagen, (CELDA_ANCHO, CELDA_ALTO)) for imagen in imagenes] | |
# Crear la ventana | |
ventana = pygame.display.set_mode((ANCHO, ALTO)) | |
pygame.display.set_caption("Rejilla de Imágenes") | |
# Definir fuente para el texto en Braille | |
fuente_braille = pygame.font.Font("BRAILLE1.ttf",60) | |
# Variable para almacenar el índice de la imagen seleccionada | |
indice_imagen_seleccionada = None | |
# Función para dibujar la rejilla de imágenes | |
def dibujar_rejilla(): | |
for i, imagen in enumerate(imagenes): | |
fila = i // 3 | |
columna = i % 3 | |
x = columna * CELDA_ANCHO | |
y = fila * CELDA_ALTO | |
ventana.blit(imagen, (x, y)) | |
# Dibujar Braille en la esquina superior izquierda | |
letra_asociada = chr(pygame.K_a + i) | |
braille = obtener_braille(letra_asociada) | |
texto_braille = fuente_braille.render(braille, True, NEGRO) | |
ventana.blit(texto_braille, (x + 5, y + 5)) # Ajuste de posición | |
# Función para obtener la representación Braille de una letra | |
def obtener_braille(letra): | |
# Definir representación Braille de las letras del alfabeto en minúsculas | |
braille_letras = { | |
'a': "a", | |
'b': "b", | |
'c': "c", | |
'd': "d", | |
'e': "e", | |
'f': "f", | |
'g': "g", | |
'h': "h", | |
'i': "i", | |
'j': "j", | |
'k': "k", | |
'l': "l" | |
} | |
return braille_letras.get(letra, "⠠⠡") # Devuelve "⠠⠡" si la letra no está en el diccionario (puedes cambiarlo según sea necesario) | |
# Función para dibujar una imagen en el centro de la pantalla | |
def mostrar_imagen_en_centro(imagen): | |
ventana.fill(BLANCO) | |
x = (ANCHO - imagen.get_width()) // 2 | |
y = (ALTO - imagen.get_height()) // 2 | |
ventana.blit(imagen, (x, y)) | |
pygame.display.flip() | |
# Loop principal | |
esperar_input = False | |
mostrar_imagen_central = False | |
clock = pygame.time.Clock() | |
tiempo_inicio_mostrar_imagen = 0 | |
tiempo_mostrar_imagen = 1000 # Tiempo en milisegundos para mostrar la imagen en grande | |
while True: | |
ventana.fill(BLANCO) | |
# Dibujar la rejilla de imágenes | |
dibujar_rejilla() | |
for event in pygame.event.get(): | |
if event.type == pygame.QUIT: | |
pygame.quit() | |
sys.exit() | |
elif event.type == pygame.KEYDOWN and not esperar_input: | |
# Si se presiona una tecla, mostrar la imagen en el centro | |
if event.key in range(pygame.K_a, pygame.K_a + len(imagenes)): | |
indice_imagen_seleccionada = event.key - pygame.K_a | |
imagen_seleccionada = imagenes[indice_imagen_seleccionada] | |
nombre_imagen = os.path.splitext(os.path.basename(imagenes_paths[indice_imagen_seleccionada]))[0] | |
print("Imagen seleccionada:", nombre_imagen) | |
mostrar_imagen_en_centro(imagen_seleccionada) | |
mostrar_imagen_central = True | |
tiempo_inicio_mostrar_imagen = pygame.time.get_ticks() # Iniciar temporizador | |
# Decir el nombre de la imagen seleccionada | |
engine.say(nombre_imagen) | |
engine.runAndWait() | |
elif event.type == pygame.MOUSEBUTTONDOWN and not esperar_input: | |
# Si se hace clic en una imagen, mostrarla en el centro | |
for i, imagen in enumerate(imagenes): | |
x, y = pygame.mouse.get_pos() | |
fila = i // 3 | |
columna = i % 3 | |
celda_x = columna * CELDA_ANCHO | |
celda_y = fila * CELDA_ALTO | |
if celda_x <= x < celda_x + CELDA_ANCHO and celda_y <= y < celda_y + CELDA_ALTO: | |
indice_imagen_seleccionada = i | |
imagen_seleccionada = imagenes[indice_imagen_seleccionada] | |
nombre_imagen = os.path.splitext(os.path.basename(imagenes_paths[indice_imagen_seleccionada]))[0] | |
print("Imagen seleccionada:", nombre_imagen) | |
mostrar_imagen_en_centro(imagen_seleccionada) | |
mostrar_imagen_central = True | |
tiempo_inicio_mostrar_imagen = pygame.time.get_ticks() # Iniciar temporizador | |
# Decir el nombre de la imagen seleccionada | |
engine.say(nombre_imagen) | |
engine.runAndWait() | |
if mostrar_imagen_central: | |
tiempo_actual = pygame.time.get_ticks() | |
if tiempo_actual - tiempo_inicio_mostrar_imagen >= tiempo_mostrar_imagen: | |
mostrar_imagen_central = False | |
pygame.display.flip() | |
clock.tick(60) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment