Sie sind auf Seite 1von 8

SUDOKU

Leandro Ramrez M. Alejandro Suarez P. 0954118 0954057


El presente proyecto tiene como objetivo principal enfrentar a los estudiantes del curso al diseo de la solucin de un problema, utilizando estructuras de datos.

Universidad del Valle sede Buga Fundamentos De Anlisis y Diseo De Algoritmos FADA Andrs Fernando Velasco 10/05/2013

Objetivos Objetivo General Enfrentarnos al diseo de la solucin de un problema, utilizando estructuras de datos. Objetivos Especficos Realizar anlisis de complejidad de las operaciones que permiten solucionar el problema. Implementar en un lenguaje de alto nivel las estructuras de datos y una solucin funcional del problema. El Problema Implementar en una aplicacin el juego Sudoku con las siguientes caractersticas: La aplicacin debe solicitar el ingreso de una configuracin inicial, el archivo debe ser formato txt. Para esto, la informacin acerca de los nmeros y sus posiciones se debe leer de un archivo que tiene el siguiente formato:
96--74--8 1-8-2-649 -54-----821-37-96 --------7-5-61-24 -----3-6--7-4---6-2-9-173

Se debe tener una interfaz grfica que permita ver el estado actual del juego. Cuando el usuario desee insertar un nmero n en la fila f y columna c, se debe verificar que no est ni en la fila f ni en la columna c. En caso de estarlo, se muestra un mensaje indicando que no se hizo el ingreso del nmero al tablero, en caso contrario, se muestra en el tablero el nmero y se considera una jugada vlida. Cada vez que se realice una jugada vlida se debe verificar si se complet el Sudoku. En tal caso se debe mostrar un mensaje. La aplicacin debe tener una opcin Deshacer que permita eliminar la ltima jugada vlida. Se podr aplicar tantas veces esta accin como jugadas vlidas previas se hayan realizado. Se debe incluir la opcin Rehacer que permita realizar un movimiento que se haba eliminado, esto es, una jugada sobre la que se haba aplicado Deshacer. La aplicacin debe tener una opcin Jugada sugerida dada una fila f y una columna c seleccionada por el usuario. La sugerencia puede consistir, por ejemplo, en un nmero que no est ni en la fila f ni en la columna c y que no haya sido eliminado previamente de esa posicin. Utilice otras estrategias adicionales que puedan llevar a completar una solucin. La aplicacin debe tener un historial de todas las jugadas realizadas. Incluidas las de Deshacer y Rehacer. Se debe incluir una opcin Ver Jugadas que permita

ver para cada jugada realizada la posicin, el nmero y el tipo de accin, esto es, Deshacer, Rehacer o Nueva. Descripcin del Juego El Sudoku se presenta como una tabla de 99, compuesta por subtablas de 33 denominadas "regiones". Al inicio del juego algunas celdas pueden contener nmeros. El objetivo es rellenar las celdas vacas con un nmero en cada una de ellas, de tal forma que cada fila, columna y regin contenga los nmeros de 1 a 9 slo una vez. En la figura 1 se muestra un ejemplo de un posible estado inicial del juego. Los nmeros que hacen parte del estado inicial no se pueden modificar. El juego inicia al seleccionar en cada jugada una posicin del tablero (que no tenga nmeros dados en la configuracin inicial) e indicar el nmero a colocar. Se debe verificar que el nmero que se desea colocar no est ni en fila ni en la columna seleccionada. Adems, el nmero debe estar entre 1 y 9 (ambos incluidos).

Figura 1

El juego termina cuando cada posicin del tablero tiene un nmero y cada fila, columna y regin contiene los nmeros del 1 al 9. En la figura 2 se muestra un ejemplo de estado final del juego.

Figura 2

DEFINICION DE OPERACIONES Clase LimitadorCaracteres.java Clase que limita los caracteres que se podrn digitar en los campos del sudoku a solo numricos. Mtodos insertString (): Mtodo al que llama el editor cada vez que se intenta insertar caracteres. El mtodo comprueba que no se sobrepasa el lmite. Si es as llama al mtodo de la clase padre para que se inserten los caracteres. Si se sobrepasa el lmite, retorna sin hacer nada. Clase Logica.java Clase que implementa la lgica del juego. Se encarga de las estructuras de datos, de las validaciones de las jugadas, de la sugerencia de jugada, de verificar si ya esta completo el sudoku. Mtodos InicioJuego (): Mtodo que almacena en la matriz los numero cargados por defecto del tablero. Jugada (): Valida la jugada realizada estableciendo lmites, retorna true si la jugada es valida y false sino lo es contrario validaJugada (): Mtodo que valida que el numero ingresado no se encuentre ni en la fila, ni el la columna, ni regin, retorna true si la jugada es valida y false si la jugada no es valida validaFila (): Valida la fila dentro de los limites enviados por parmetro, retorna false si encuentra el nmero y true si no lo encuentra validaColumna (): Valida la columna dentro de los limites enviados por parmetro, retorna false si encuentra el numero y true si no lo encuentra validaRegion (): Valida la regin dentro de los limites enviados por parmetro, retorna false si encuentra el numero y true si no lo encuentra sugerencia (): Mtodo encargado de sugerir un nmero para la fila, columna y regin donde se solicite. ganador (): Recorre toda la matriz y retorna true si esta llena (ganador), sino esta llena retorna false (aun no hay ganador) vaciarStack (): Mtodo que elimina las pilas para cuando se ha seleccionado o cargado un nuevo juego reiniciarTablero (): Mtodo encargado de reiniciar todos los valores de la matriz.

Clase ModeloTabla Clase encargada de retornar si las celdas de la tabla del historial del juego sern editables o no Mtodos isCellEditable(): Retorna False si las celdas sern editables Clase VentanaSudoku Clase encargada de toda la interfaz del juego, de leer el archivo de texto (txt), de mostrar los respectivos mensajes de sugerencia y de error. Mtodos agregarBarraMenu(): Mtodo encargado de agregar a la interfaz la barra del men. agregarPaneles():Mtodo encargado de agregar a la interfaz los paneles donde se ubicarn la tabla del historial de jugadas, los botones de deshacer, rehacer y el tablero del sudoku. agregarBotonesJuego():Mtodo encargado de agregar a la interfaz los dos botones de Deshacer y Rehacer. agregarHistorial():Mtodo encargado de agregar a la interfaz la tabla del historial de jugadas. agregarCajasTexto(): Mtodo encargado de agregar a la interfaz el tablero del sudoku. validarJugada(): Mtodo encargado de validar si se tecleo la letra especial (Letra s o S) para solicitar sugerencia, o si fue un nmero para as verificar si es posible el ingreso de esta o no. pintaTablero(): Mtodo encargado de delinear los bordes de cada regin del tablero del sudoku. actionPerformed(): Mtodo encargado para los eventos para esta clase. agregaJugadasHistorial(): Mtodo encargado de agregar a la tabla del historial la jugada ya sea deshacer o rehacer. reiniciarJuego(): Mtodo que vaca las pilas, restablece el historial, esto siempre y cuando se cargue un nuevo juego. cargarArchivoJuego(): Mtodo encargado de leer el archivo de texto(txt). ayudaAplicacion(): Mtodo que retorna un mensaje que contiene las instrucciones del juego.

INCORPORACION DE LAS ESTRUCTURAS DE DATOS PARA LA SOLUCION DEL PROBLEMA Se ha utilizado la estructura de datos Pila para las opciones de Deshacer y Rehacer, para poder solucionar el problema planteado de poder deshacer la ltima jugada valida realizada, aplicable como tantas jugadas validas se hayan llevado a cabo, as como tambin rehacer la ultima jugada valida deshecha, aplicable como tantas jugadas validas deshechas existan. ANALISIS FORMAL DE COMPLEJIDAD Luego de cargar el archivo de texto (txt) se mostrar una interfaz como esta:

El comportamiento de la lectura del archivo es Constante (1), puesto que siempre tendr que leer 9 filas y 9 columnas sin repeticin de ninguna. Cuando se digite un nmero se verifica que el nmero no se encuentre en la fila, columna o regin, de ser as se le mostrar un mensaje como el siguiente:

En cuanto a la bsqueda en la regin, bsqueda horizontal y bsqueda vertical del nmero el comportamiento de cada uno de estos procesos es (n), puesto que va a tener que recorrer todas las casillas ya sea de la regin, lnea horizontal o lnea vertical para luego poder ejecutar la accin correspondiente. Si el nmero ingresado no se encuentra en la regin, fila ni columna, se procede a colocar el nmero en la casilla, agregar el registro a la tabla del historial, y se habilita el botn deshacer.

Cuando el juego es completado se mostrara un mensaje que indicara el fin del juego, y la cantidad de movimientos realizados.

El comportamiento de la funcin que verifica cuando se realiza una jugada nueva, jugada Deshacer o jugada Rehacer, si el Sudoku ya esta completo en el peor de los casos ser de: Para una jugada sugerida se debe presionar la tecla S, y el programa le sugerir un nmero (si existe) para la casilla seleccionada, el comportamiento de la funcin que sugiere un nmero en el peor de los casos ser

puesto que empezar a evaluar desde el nmero 1, a ver si se puede sugerir, de no ser as avanzar al nmero 2 y as sucesivamente en caso de no encontrar, si llega al nmero 9 y no encontr numero posible retorna el mensaje de error, as:

Das könnte Ihnen auch gefallen