Clases a Implementar (Paquete xklotski): 1. Clase XKlotskiException: package xklotski;

Documentos relacionados
PARTE TEÓRICA - TEST [2,5 PUNTOS]:

Examen de Fundamentos de Computadores y Lenguajes

Examen escrito de Programación 1

Cambia al área de trabajo situada debajo de la actual.

Soluciones al Examen de Fundamentos de Computadores y Lenguajes

Universidad de los Andes Ingeniería de Sistemas y Computación

Examen de Programación (Grados en Física y Matemáticas)

Conocimientos previos

Pontificia Universidad Javeriana Departamento de Ingeniería de Sistemas Programación de Computadores Proyecto de curso,

Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º

Nuevas tecnologías de la programación Práctica 3: Juego del comecocos en Java (curso )

Unidad V. Ya veremos qué poner en "algunas_palabras" y "algo_más", por ahora sigamos un poco más.

Grado en Ingeniería Informática. Estructura de Datos y Algoritmos, Grupo 84M, 2014/ de Marzo de

Soluciones del Examen de Fundamentos de Computadores y Lenguajes

RELACIÒN ENTRE LA PROGRAMACIÒN ORIENTADA A OBJETOS Y LA ESTRUCTURADA

CAPÍTULO 4 MANUAL DE USUARIO. 4.1 Introducción. 4.2 Interfaz de Usuario

Práctica Nº 4 Entrada / Salida

Botones de la Barra de Herramientas / Otros botones

MANUAL DEL PROGRAMA DE CÁLCULO DE BATERÍAS Y LAZO

Microsoft Excel. Manejo de Software para Microcomputadoras

EJEMPLO DE PARTIDA. Pongo en la casilla: 4 El tablero queda como: X

IMPLEMENTACIÓN DE CONCEPTOS P.O.O. EN JAVA

Estructura de Datos Unidad 1: Repaso del Lenguaje Java

Programación Orientada a Objetos (Grado en Ingeniería Informática y Grado en Ingeniería en Tecnologías de la Información - UNED)

Examen Teórico. Convocatoria de Febrero de 2015

Grado en Ingeniería Informática Estructura de Datos y Algoritmos, Grupo 81M, 2014/ de Marzo de

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Qué es Java? Un lenguaje de programación Un entorno de desarrollo Un entorno de aplicación Un entorno de despliegue Es similar en sintaxis de C + +.

Práctica 3. Paso de parámetros entre subrutinas. 3. Consideraciones sobre el paso de parámetros

Programación II - TP1 1er Cuatrimestre 2018

Introducción a Java. Fernando Cerezal López. 24 Noviembre 2005

Examen de Programación II (Ingeniería Informática)

Laboratorio 2010 Principios de Programación

SOFTWARE Microsoft Visual Studio 2005.NET FrameWork 2.0

Examen de Lenguajes de Alto Nivel

Fundamentos de la programación 2014/2015 (Grupos F y G) Práctica Fecha de entrega: 29 de marzo (a las 23:55)

CLAVE EXAMEN: a cd. c u r s o r = c u r s o r. g e t S i g u i e n t e ( ) ; p o s i c i o n ++;

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

APELLIDOS NOMBRE GRUPO CALIFICACIÓN FECHA

Proyecto de IS3. Tercera iteración. Documento de modelo funcional

HOJA DE EJERCICIOS 5 PROGRAMACIÓN CON EXCEPCIONES EN JAVA

TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimbote MODIFICADORES DE ACCESO A LOS MIEMBROS DE UNA CLASE

El tipo de actividades que los alumnos pueden crear las podemos dividir en 4 grandes. grupos:

ESTRUCTURA DE COMPUTADORES

EXAMEN PROGRAMACIÓN 21 de Septiembre de 2007 INGENIERÍA INFORMÁTICA Primera parte: Cuestiones 1,5 horas


Introducción a la programación: Algoritmos

Estructura de datos y Programación

Examen Teórico. Convocatoria de Julio de 2015

Modelo Dinámico del Diseño del Software y Representación en UML. UNIDAD 9 Análisis y Diseño de Sistemas de Información

Práctica 2: Java Remote Method Invocation (RMI)

TEMA 7: INICIO A LA PROGRAMACIÓN CON SCRATCH

Relaciones entre clases

La secuencia de referencias a páginas para el proceso B es:

POO: Clases y objetos

DESPLAZAMIENTO POR LA HOJA DE CÁLCULO

Manual de usuario. 01 Introducción

Programación Orientada a Objetos. Resumen de Temas Unidad 3: Constructores y destructores

Problema 1 (2 puntos)

Programación en Lenguaje Java

Examen No. 3 - Final

TECNOLOGÍAS DE LA INFORMACIÓN Y DE LA COMUNICACIÓN UD 3: SISTEMAS OPERATIVOS 1. DEFINICIÓN Y COMPONENTES DE UN SITEMA OPERATIVO.

Universidad de Sevilla. Área de Ingeniería Telemática. Área de Ingeniería Telemática. Universidad de Sevilla. Fundamentos de Telemática

Diseño y Programación Orientados a Objetos 29 de Abril de Primer Certamen

SEGUNDA PRÁCTICA. Programación Curso Ingeniería en Informática Universidad Carlos III de Madrid

Programación orientada a objetos. Resumen de Temas Unidad 5: Herencia

Tema 6: Clases. Índice

Soluciones al Examen de Fundamentos de Computadores y Lenguajes

Informática. ETSIGCT curso 2017/2018 Presentación y boletín 1 de prácticas J. Javier Ibáñez González

FUNDAMENTOS DE INFORMÁTICA

Diagramas De Casos De Uso

App Inventor 2. Este tutorial presenta las siguientes habilidades, útiles para el futuro desarrollo del juego:

GUIA 1: Repaso sobre uso de C#. Funciones, procedimientos y arreglos.

E1. Práctica UF2406: El ciclo de vida del desarrollo de aplicaciones

INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS

PRACTICA FINAL Laboratorio Programación II Abril 2006 JUEGO HUNDIR LA FLOTA.

ACTIVIDAD INFORMÁTICA: VIDEOCLUB

10 -Herencia Y Polimorfismo. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

PROGRAMACIÓN EN JAVA

Conceptos Básicos de Orientación a Objetos (2da parte)

Contenido. Comentarios. l Estilo l Documentación l Pruebas l Depuración **/ l Comentarios de código. l Comentarios de documentación

Práctica 8 Programación Funcional - Tipos Compuestos

GENERACIÓN DE ÍNDICES ANALÍTICOS DE DOCUMENTOS

Introducción a los Elementos de Excel

Ejercicios de programación en C. ET1032 Informática Industrial

INTELIGECIA EN REDES DE COMUNICACIONES 5º ING TELECOMUNICACIÓN TRABAJO FINAL DE LA ASIGNATURA EL SOLITARIO AUTORES

SEGUNDO SEMESTRE PORTAFOLIO DE SEGUNDA OPORTUNIDAD

Diseño de tipos Igualdad, representación, código, copia y relación de orden

Introducción a la Programación

PROGRAMACIÓN ORIENTADA A OBJETOS

El fichero <X11/X.h> se incluye cuando se utiliza el <X11/Xlib.h>, por tanto, cuando este último sea incluido, el primero no es necesario hacerlo.

3.2. MANEJO DEL ENTORNO

Funciones y Condicionales Introducción a la Programación

Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 2

2. Indica cuál de las siguientes afirmaciones es cierta:

UNIDAD 1. calc PRIMEROS PASOS. CURSO: LibreOffice

Proyecto I (15%) Simulación del Juego Solitario

ALGORITMICA Y PROGRAMACION POR OBJETOS I

Transcripción:

Profesores: Jorge Escalona / Tobías Bolívar Página 1 de 5 Estructura de Datos Proyecto Final (25%) Introducción: Klotski es un juego rompecabezas para un sólo jugador. El juego se compone de un tablero ocupado por piezas y muros, y el objetivo del juego es desplazar una de las piezas de su posición inicial a una posición objetivo. Klotski es una generalización de un juego de piezas de madera de origen incierto, llamado en francés L âne rouge. Parece que la primera versión informática del juego fue para Windows 3.1. En la actualidad, hay una versión para Linux llamada Gnome Klotski o gnotski (hay otra llamada glotski que no es exactamente igual a la que pedimos) y otra escrita en python que funciona en Linux y Windows, disponible en http://phil.freehackers.org/klotski/. En la siguiente figura se muestra una imagen con la implementación del juego. Requisitos 1. El juego se compone de varios niveles, y en cada nivel habrá un tablero diferente. 2. El tablero está dividido en cuadrados, de modo que cada elemento que contiene ocupa uno o varios cuadrados contiguos (no se consideran contiguos cuadrados que se toquen en un único punto). 3. Los diferentes elementos del tablero son: Piezas Una pieza singular Muros Puertas Posición objetivo 4. La pieza singular encajará completamente en la posición objetivo. 5. Las piezas (y sólo ellas) se pueden desplazar por el tablero, horizontal o verticalmente, pero no pueden moverse por encima de otras piezas o de muros. Cualquier pieza puede moverse o colocarse encima de la posición objetivo. Únicamente la pieza singular puede moverse o colocarse encima de las puertas. 6. El programa leerá cada descripción de nivel de un fichero de texto. El fichero para el nivel N se llamará nivel_n.txt. 7. El formato de un fichero de nivel es el siguiente:

Profesores: Jorge Escalona / Tobías Bolívar Página 2 de 5 La primera línea es el nombre del nivel. El nombre contendrá como mucho 40 caracteres. La segunda línea contiene dos números naturales, el primero es el ancho del tablero en cuadrados, y el segundo la altura del tablero en cuadrados. En principio no hay límite en ambos números, excepto que puedan representarse como un entero del lenguaje de programación. Las siguientes líneas, tantas como la altura del tablero en cuadrados, representarán el tablero. En cada línea, cada carácter representará qué elemento ocupa el cuadrado correspondiente del tablero (por tanto, en el tablero inicial no puede haber elementos solapados). Los diferentes elementos se representan de la siguiente forma: o Pieza singular: * o Resto de las piezas: a - z (Letra minúscula ASCII) o Muro: # o Puerta: - o Posición objetivo:. o Cuadrado vacío: o & (espacio en blanco) Si una pieza está definida por caracteres que no ocupan cuadrados conexos, el programa deberá detectarlo y dar un mensaje de error adecuado. Si una línea contiene menos caracteres que el ancho del tablero, se considerará que los cuadrados no representados están vacíos. Un ejemplo de archivo, que representa el nivel de la figura 1, es el siguiente: Forget me not (ane rouge) 10 11 &&&&&&&&&& &&&&&&&&&& &&######&& &&#a**b#&& &&#a**b#&& &&#cdde#&& &&#cfge#&& &&#a&&b#&& &&##--##&& &&&&&&&&.. &&&&&&&&.. 8. Podrán añadirse nuevos niveles al juego incorporando nuevos archivos de nivel, sin necesidad de recompilar el programa. En todo caso, se puede suponer que la numeración de los niveles es consecutiva. 9. La pantalla del juego contendrá al menos: El tablero El nombre del nivel El número de movimientos hecho hasta el momento Los botones o menús necesarios 10. Las piezas y los muros se representarán de modo que aparezcan conexos, inclusive si ocupan varios cuadrados del tablero. 11. Todas las piezas, excepto la singular, se representarán de la misma forma. 12. Cada pieza diferente que se mueve se considera un movimiento. Al mover una pieza que acaba de ser movida se considera que es una continuación del movimiento anterior, y no cuenta como movimiento. 13. Si la pieza que se está moviendo se vuelve a colocar en la posición donde estaba cuando se comenzó el movimiento actual (que puede haber tenido varios sub-movimientos), se considerará que este movimiento no ha existido, y se decrementará por tanto el contador de movimientos. 14. La puntuación, en cada nivel, es el número de movimientos realizados para llevar la pieza singular de su posición inicial a la posición objetivo. La mejor puntuación, obviamente, es la más baja. 15. El programa, al iniciar, cargará el nivel que se estaba resolviendo la última vez que se utilizó el programa, tal y como lo dejó el jugador, y se mostrará en la pantalla. Si es la primera vez que se ejecuta el programa, se cargará el nivel 1.

Profesores: Jorge Escalona / Tobías Bolívar Página 3 de 5 16. Cómo se mueven las piezas queda a discreción de los alumnos, puede ser mediante el ratón o el teclado, apareciendo o no una pieza seleccionada, etc. En todo caso, el procedimiento tiene que ser intuitivo y no debe basarse en la representación interna de las piezas. 17. Se permitirá deshacer el último movimiento realizado, y sucesivamente los anteriores. Para ello el programa deberá memorizar todos los movimientos realizados desde el comienzo del nivel. De esta manera, mediante sucesivos deshaceres, debería ser posible retornar al estado inicial del nivel que se está resolviendo. Esto último debe ser posible aunque se haya cargado un nivel que se había dejado a medias la última vez que se utilizó el programa. 18. El nivel se considerará completo cuando la pieza singular esté en la posición objetivo. El programa debe detectar esto automáticamente. 19. El programa mantendrá un registro de los 10 mejores records de cada nivel. 20. Existirán al menos botones o menús para: Proporcionar instrucciones del juego Mostrar los créditos del juego (quién lo ha hecho) Cambiar a otros niveles del juego Reiniciar el nivel Deshacer movimientos Mostrar records del nivel actual. Salir (preguntará si se quiere salvar el juego) Clases a Implementar (Paquete xklotski): 1. Clase XKlotskiException: public class XKlotskiException extends Exception{ public XKlotskiException (); public XKlotskiException (String msg){ super(msg); 2. Clase XJugador: public class XJugador { private String nombre; private int nivel_actual; private int nro_mov; private java.util.list movs_nivel; public XJugador(); //metodos getters y setters 3. Clase XPieza: Public clase XPieza{ private int id_pieza; private int tipo_pieza; //0: Pieza singular;1:resto de las piezas; 2:Muro;3:Puerta;4:Posición objetivo; // 5: Cuadrado vacío public XPieza( ); //métodos getters y setters

Profesores: Jorge Escalona / Tobías Bolívar Página 4 de 5 4. Clase XKlotski //imports public class XKlotski { //atributos //constructores public XKlotski (); //crea una instancia de la clase inicializando las estructuras necesarias para el control del juego //métodos public void cargarjuego(string nombrearchivo) throws XKlotskiException; //carga un nuevo juego desde el archivo indicado como parámetro //genera una excepción si hay algún error cargando el archivo public void guardarjuego(xjugador jugadoractual) throws XKlotskiException; //guarda la información del juego actualn en el archivo del jugador actual //genera una excepción si hay algún error guardando el archivo public int moverpieza(xpieza pieza, char direccion) throws XKlotskiException; //mueve una pieza en la dirección indicada como parámetro: // i: izquierda // d: derecha // a: arriba // b; abajo // devuelve 0 si la jugada se realizó con éxito // devuelve 1 si la jugada completa el juego //genera una excepción si la pieza o el movimiento es inválido public int contadormovimientos(); //devuelve el numero de movimientos realizados por el jugador en el juego actual public java.util.list recordsnivel(int nivel) throws XKlotskiException; //devuelve una lista con los records del nivel actual //genera una excepción si hay algún error public int esnuevorecord(int nivel, int cantmovidas) //devuelve un número entero entre 1 y 10 si la cantidad de movimientos //está entre los diez mejores records //si no devuelve 0 public void guardarnuevorecord(int nivel, String jugador, int cantmovidas) throws XKlotskiException //guarda el Nuevo record en el archive de records de cada nivel //genera una excepción si hay algún error public XMatriz matrizjuego()throws XKlotskiException; //devuelve una instancia de la clase XMatriz //conteniendo en cada celda la información de la pieza o espacio que hay en ella.

Profesores: Jorge Escalona / Tobías Bolívar Página 5 de 5 Por último, debe implementar una clase denominada Klotski_App que permita probar cada una de las características del juego. La interfaz de esta aplicación puede ser en forma gráfica u orientada a caracteres según su conveniencia. Entrega #1: Semana 10 Paquete xklotski con todos sus módulos y dependencias implementadas. Entrega #2: Semana 15 Aplicación Klotski_App Informe Final del Proyecto Nota: El Informe del Programa debe estar conformado por: Portada. Indice. Introducción. Planteamiento del Problema. Diagrama de Clases Estrategias de Resolución de Problemas. Consideraciones y/o Restricciones.