Entrega final Escenario 7 - Sustentación Escenario 8
Carlos A. Hernández
Cristian Camilo Correa Cuesta
Danyela Vivian Munza Suarez
Jhanpol Parra Barreto
Institución Universitaria Politécnico Grancolombiano
Paradigmas de Programación B01
Instructor Ricardo David Camargo Lemos
05 noviembre de 2024
2
Tabla de Contenido
Tabla de Contenido 2
Diagrama de clases UML 3
Clases del modelo: 3
Clases de la vista: 5
Clases del controlador: 5
Relaciones entre Clases 5
Pantallazos explicativos de la ejecución del programa 6
Detalles de la implementación 6
Problemas encontrados y solución en grupo. 6
Interfaz grafica JavaFX 7
Interfaz gráfica WindowBuilder 8
Sudoku sin resolver: 8
Sudoku resuelto: 8
3
Diagrama de clases UML
El diagrama está dividido en tres paquetes principales según el patrón MVC:
Modelo: Contiene la lógica de negocio.
Vista: Maneja la interfaz de usuario.
Controlador: Gestiona la comunicación entre la vista y el modelo.
Clases del modelo:
Principal: Clase principal que inicia el programa.
Métodos:
1. main(String[] args): void - Punto de entrada del programa.
Posiciones: Contiene lógica para validar posiciones y subcuadrículas.
4
Métodos:
1. validarCuadricula(int[][] tabla, int fila, int columna, int valor):
boolean - Verifica si el valor es válido en la subcuadrícula.
2. validarFila(int[][] tabla, int fila, int valor): boolean - Valida si el
valor es correcto en la fila.
3. validarColumna(int[][] tabla, int columna, int valor): boolean -
Valida si el valor es correcto en la columna.
4. subCuadriculaActual(int fila): int - Obtiene la subcuadrícula actual
a partir de la fila.
5. subCuadricula(int pos): int - Retorna la subcuadrícula a partir de la
posición.
Tablero: Representa la estructura del tablero de Sudoku.
Métodos:
1. getTabla(): int[][] - Devuelve el estado del tablero.
2. resolverSudoku(Posiciones validador): boolean - Resuelve el
Sudoku usando validaciones.
MostrarSudoku: Muestra el tablero en consola.
Métodos:
1. imprimirSudoku(int[][] tabla): void - Imprime el tablero en
consola.
5
Clases de la vista:
VistaSudoku: Maneja la interfaz gráfica.
Atributos:
1. controlador: ControladorSudoku - Controlador asociado a la vista.
2. camposSudoku: TextField[][] - Campos de texto que representan el
tablero en la interfaz gráfica.
Métodos:
1. start(Stage primaryStage): void - Inicia la interfaz gráfica.
2. resolverSudoku(): void - Inicia la resolución del Sudoku desde la
interfaz.
3. main(String[] args): void - Alternativa de ejecución.
Clases del controlador:
ControladorSudoku: Maneja la lógica entre la vista y el modelo.
Métodos:
1. getTabla(): int[][] - Obtiene el tablero desde el modelo.
2. resolverSudoku(): boolean - Resuelve el tablero llamando métodos
del modelo.
Relaciones entre Clases
Dependencia ("usa"):
1. VistaSudoku usa a ControladorSudoku.
2. ControladorSudoku usa a Tablero.
3. Tablero usa a Posiciones para validar.
6
Asociación:
1. Principal tiene instancias de Tablero y Posiciones.
Instancia:
1. Principal instancia Posiciones.
2. VistaSudoku instancia su ControladorSudoku.
Pantallazos explicativos de la ejecución del programa
Detalles de la implementación
El proyecto comenzó con la definición de las reglas básicas del Sudoku: una cuadrícula
de 9x9 dividida en 9 subcuadrículas de 3x3, donde cada fila, columna y subcuadrícula debe
contener los números del 1 al 9 sin repeticiones. Partiendo de esta base, se diseñó una interfaz
gráfica intuitiva que facilitara la interacción del usuario con el tablero.
Problemas encontrados y solución en grupo.
Inicialmente, planeamos desarrollar el Sudoku utilizando la interfaz gráfica de JavaFX.
Sin embargo, nos dimos cuenta de que se alejaba bastante de nuestra visión original. Tras
investigar y ver algunos tutoriales, descubrimos WindowBuilder, un plugin que nos permitió
crear una interfaz más estética y alineada con nuestro concepto inicial.
Aprender a usar esta herramienta desde cero fue un desafío, ya que al principio solo
logramos incorporar objetos gráficos sin funcionalidad. Los botones, por ejemplo, no respondían.
7
Esto nos llevó a profundizar en cómo añadir interactividad y vincular nuestro código existente a
la interfaz.
Finalmente, logramos completar la interfaz gráfica. Si bien no contiene todos los
elementos que habíamos planeado al principio, representa un avance significativo y cumple con
la funcionalidad básica que nos propusimos.
Interfaz grafica JavaFX
8
Interfaz gráfica WindowBuilder
Sudoku sin resolver:
Sudoku resuelto:
9
Conclusiones
El desarrollo del juego de Sudoku representó un proceso integral que combinó
planificación, diseño y ejecución técnica. Desde el concepto inicial hasta la implementación
final, cada etapa requirió un enfoque colaborativo y una constante adaptación a los desafíos que
surgieron.
Trabajo en Equipo y Colaboración
El éxito del proyecto se debe en gran parte al trabajo en equipo, donde cada miembro desempeñó
un rol específico que contribuyó al desarrollo:
Desarrollo de la Lógica del Juego: Se enfocó en la creación y validación del algoritmo
de generación y resolución del tablero, asegurando la precisión y eficiencia del código.
Diseño de la Interfaz Gráfica: Se trabajó en el diseño y usabilidad de la GUI, utilizando
WindowBuilder para garantizar una experiencia intuitiva y agradable para el usuario.
Integración y Pruebas: Se asignó un miembro del equipo para integrar la lógica con la
interfaz, asegurando una comunicación fluida entre ambas capas. También realizó la fase
de pruebas, detectando y corrigiendo errores de funcionalidad y visualización.
La comunicación constante fue clave, permitiendo que se compartieran avances y se
resolvieran problemas rápidamente. Se utilizaron herramientas colaborativas como repositorios
de control de versiones (por ejemplo, Git) para gestionar el código, y reuniones periódicas para
alinear objetivos y ajustar prioridades.
Lecciones Aprendidas
El proyecto no solo fortaleció las habilidades técnicas de cada integrante, sino también las
habilidades blandas, como la resolución de conflictos, la gestión del tiempo. Aprender nuevas
10
tecnologías como WindowBuilder desde cero fue un reto, pero el equipo logró superarlo gracias
al apoyo mutuo y la disposición para aprender.
Referencias
Eclipse. (2014). Eclipse Foundation. Obtenido de [Link]
MauroTecnologíco. (10 de Octubre de 2021). YouTube. Obtenido de
[Link]
Netzcod. (23 de Noviembre de 2023). Youtube. Obtenido de [Link]
v=a9L9VOcBuLU&t=220s
Yo Androide. (3 de Noviembre de 2018). YouTube. Obtenido de
[Link]