Está en la página 1de 7

INFORME PROYECTO FINAL PROLOG

Samuel Toledo Hdez alu0101337821@ull.edu.es

1
ÍNDICE:
PROLOG: 2
INTERFAZ GRÁFICA: 4

2
PROLOG:
La idea es colocar N reinas en un tablero de ajedrez NxN de tal manera que ninguna reina
amenace a otra. La solución se busca mediante backtracking.
La función principal es solucionar_puzzle(Cantidad, Sol), que utiliza tres reglas auxiliares:
generar_tablero_inicial, permutar_tablero, y tablero_apto.

La regla generar_tablero_inicial(0, []) se utiliza para generar un tablero vacío, mientras que
generar_tablero_inicial(X, [X|Siguientes]) se utiliza para generar un tablero con una reina en
cada columna.

La regla permutar_tablero([], []) se utiliza para permutar un tablero vacío, mientras que
permutar_tablero(X, [Elegido|Permutacion]) se utiliza para permutar las reinas en un tablero
no vacío. Esto se hace mediante la regla elegir, que elige una reina de un tablero y la mueve
a una posición específica.

La regla tablero_apto([]) se utiliza para determinar si un tablero es apto.Esto se hace


mediante la regla auxiliar amenaza_reina, que determina si una reina dada amenaza a otras
reinas en un tablero dado.

3
La regla amenaza_reina tiene dos definiciones, una recursiva que toma 3 argumentos (X,
Prof, [C|_]) y otra que toma 2 argumentos(X,Y) , la primera comprueba si existe alguna
amenaza en las posiciones diagonales, horizontales y verticales, mientras que la segunda
es una función auxiliar que llama la primera y le pasa el valor de Prof como 1.

En resumen, el código genera todos los tableros posibles, permuta las reinas en esos
tableros y determina si alguno de estos tableros es una solución válida para el problema de
las N reinas.

4
INTERFAZ GRÁFICA:
Se compone de dos clases principales: Reina y Tablero. La clase Reina se utiliza para crear
objetos representando reinas en un tablero de ajedrez y dibujarlas en la interfaz gráfica. La
clase Tablero se utiliza para crear un tablero de ajedrez en la interfaz gráfica y dibujar las
reinas en las posiciones especificadas en la solución dada.

La clase Reina tiene un constructor __init__ y un método create_queen el constructor


inicializa un objeto de tipo Reina y recibe como parametros una ventana principal, una fila,
una columna y un tamaño de casilla. El método create_queen dibuja un rectángulo en la
posición dada en el canvas, representando la Reina.

La clase Tablero tiene un constructor __init__ y un método crear_tablero el constructor


inicializa un objeto de tipo Tablero con una ventana principal, un tamaño, un número de
casillas y una solucion. El método crear_tablero crea un tablero de ajedrez con el número
de casillas y colores dados y dibuja las reinas en las posiciones especificadas en la
solución.

5
Se utiliza el módulo Prolog para resolver el problema y la biblioteca gráfica tkinter para crear
una interfaz gráfica.
La función principal es resolver_y_mostrar(tamano,numero, solucion), toma como
parámetros el tamaño de la ventana, el número de casillas y la solución, y se encarga de
mostrar el tablero y las reinas en las posiciones especificadas en la solución en una interfaz
gráfica.

La función func(input) se utiliza para convertir el formato de salida del Prolog a un formato
utilizable para el resto del código.

6
Luego mediante una pequeña interfaz denominada Menú podemos introducir inputs de
tamaños y de número de reinas y mandar a funcionar todo el programa.

También podría gustarte