Microsoft Word - EnunBarquitos

Anuncio
PRÁCTICA OBLIGATORIA 1
Convocatoria de Septiembre
CONDICIONES: Individual
ENUNCIADO
En esta práctica hay que diseñar y construir una aplicación para jugar al juego de los barquitos. El juego de los
barquitos consiste, básicamente, en encontrar donde se encuentran los distintos barcos en un tablero con el
menor número de tiradas o disparos. Dichos barcos son de distintos tamaños (ocupando desde 1 a 4 casillas
contiguas del tablero), pueden estar situados en cualquier lugar y con distintas orientaciones (vertical u
horizontal pero no diagonal), con la única restricción de que los barcos no pueden estar pegados al borde del
tablero, pero dos barcos sí pueden ser adyacentes (es decir entre dos barcos no tiene que existir una casilla
vacía y también se pueden tocar por las esquinas). El número de barcos es fijo, teniendo un portaaviones (que
ocupa 4 casillas), dos destructores (de 3 casillas), tres fragatas (de 2 casillas) y cuatro submarinos (de 1 casilla).
Se parte del tradicional juego de los barquitos pero la interacción se realiza a través de una interfaz, que será
especificado más adelante.
(Véanse, como ejemplo del funcionamiento de un juego de los barquitos, la página:
http://www.peterpaulxxx.com/noticias/animados140304.php , obsérvese que el número de barcos es diferente y
en este juego se pueden tocar los barcos. En la aplicación a desarrollar se deben seguir las normas anteriormente
establecidas para nuestro juego.)
La aplicación debe “esconder” los barcos en un tablero de 10x10 casillas y pedir al jugador que dispare,
informándole a continuación del resultado en forma textual y de la situación del tablero utilizando los símbolos
indicados:
RESULTADO
No disparado
Agua
Tocado
Hundido
SÍMBOLO
.
o
x
X
DESCRIPCIÓN
Casilla que aún no ha sido disparada.
No se ha acertado a ningún barco.
El disparo ha alcanzado a uno de los barcos sin hundirlo.
El disparo ha terminado de bombardear el barco y lo ha hundido. En el momento
en que el barco ya está hundido todas las posiciones que ocupa deben cambiar el
símbolo x (tocado) por el símbolo X (hundido).
Observaciones:
 Inicialmente se muestra el tablero con las letras de la A a la J identificando las columnas y los números
del 1 al 10 identificando las filas. En cada casilla del interior del tablero se mostrará el símbolo ‘.’
(punto), que indica que aún no ha sido disparada dicha casilla (ver figura). También se pedirá al
jugador que introduzca las coordenadas de su disparo número uno. Si el jugador introduce el carácter
‘M’ se le mostrará el menú. En caso de que introduzca unas coordenadas el programa comprobará si
son correctas, en ese caso se borrará la pantalla y se escribirá de nuevo el tablero actualizado, el
resultado textualmente (Agua, Tocado,…) y se le pedirá una nueva jugada, la número n.
 Si las coordenadas estuvieran fuera de rango se emitirá un mensaje de error solicitando al jugador de
nuevo las coordenadas.
 Si la posición ya ha sido jugada se penalizará al jugador con un disparo fallado, pasando a disparo n+1.
También se incrementará dicho contador cada vez que el jugador dispare y haga agua.
 Cuando un jugador acierte en el disparo (Tocado o Hundido) no se incrementa el contador de disparos
fallados (o resultados de ‘agua’), para premiar su acierto.




Cuando el jugador haya realizado más de 25 disparos fallados sin hundir la flota se considerará la
partida PERDIDA, informando al jugador e invitándole a una nueva partida o a finalizar la aplicación.
Cuando el jugador haya hundido la flota se considerará la partida GANADA, informando al jugador e
invitándole a una nueva partida o a finalizar la aplicación.
La información relativa al juego debe estar siempre presente en la pantalla y actualizada. Por tanto, se
debe mostrar el número de barcos hundidos, el número de barcos restantes y el número de disparos
acertados y fallados. En cada uno de los disparos además de la representación gráfica correspondiente
(p.e. cambio del icono) se proporcionará información al usuario sobre el resultado de su disparo.
En el menú, que aparecerá cuando el usuario introduzca una ‘M’ en lugar de las coordenadas del
disparo, se incluirán las siguientes opciones:
1. Comenzar nuevo juego. Supone abandonar la partida actual y empezar otra.
2. Ver solución. Se muestran las posiciones de todos los barcos de la flota y se dan estadísticas acerca
del número de disparos, el número de disparos acertados, el número de barcos hundidos,…). A
continuación se pregunta al jugador si quiere abandonar la aplicación e iniciar una nueva partida.
3. Instrucciones. Se muestra una pantalla con las normas de juego.
4. Terminar. Se pide confirmación al usuario para saber si realmente quiere abandonar la aplicación.
Veamos un ejemplo de comienzo de juego:
Inicialmente se muestra el tablero con todas las posiciones con ‘.’.
En el primer disparo se ha hecho agua.
Después de varios disparos se obtiene un resultado de “tocado”.
Finalmente se consigue hundir, se trata de un destructor.
Si en cualquier momento se introduce una ‘M’ se obtiene el menú:
Se quiere construir una biblioteca que sirva como base para la construcción de la aplicación para el juego de los
barquitos.
Para construir esta biblioteca se utilizará como base la unidad TiposBarquitos, en la página web de la asignatura
que define los tipos básicos para el resto de los módulos.
Escriba, utilizando Borland Delphi o Kylix, los siguientes módulos:
A) Una unidad UBarquitos que:
•
•
Declare las siguientes variables globales:
-
Solucion: TTablero;
Esta variable contendrá una solución de un juego, generada por el procedimiento
GenerarTablero y modificada por sucesivas llamadas a la función Disparo.
-
Se deja a decisión del alumno si esta variable debe ser exportada por la unidad o no.
Exporte los siguientes subprogramas:
procedure GenerarTablero;
 Genera una solución con la posición de los barcos de la flota que debe ser aleatoria y
coherente con las condiciones del juego, es decir, que los barcos no toquen en borde del
tablero y que puedan tomar posiciones horizontales o verticales de forma azarosa. El
resultado, que se almacena en la variable Solucion, será un tablero con la solución que
contendrá el símbolo ‘.‘ en todas las posiciones excepto en las casillas ocupadas por
algún barco, en las que se utilizará el símbolo ‘B’.
function Disparo (Objetivo: TCasilla): TTablero;
- Modifica la variable Solucion como se ha indicado anteriormente, sustituyendo el
contenido de la casilla Objetivo por 'o', 'x' ó 'X', según corresponda.
- Devuelve como resultado el contenido de la variable Solucion con los barcos ocultos, es
decir, sustituyendo las 'B' por puntos '.'.
- Precondición: Antes de llamar a Disparo debe haberse llamado al menos una vez a
GenerarTablero.
B) Un proyecto de biblioteca LibBarquitos que:
.
•
Sirva para construir una biblioteca dinámica LibBarquitos.dll con la unidad UBarquitos.
.
•
Exporte los subprogramas GenerarTablero y Disparo.
C) Una unidad de importación ImpBarquitos para LibBarquitos que empaquete las declaraciones external
de los subprogramas exportados por LibBarquitos.
D) Un proyecto JuegoBarquitos para una aplicación no gráfica que, utilizando la biblioteca LibBarquitos,
permita jugar al juego de los barquitos
Inicialmente, o si se comienza un nuevo juego, la aplicación llamará a GenerarTablero y escribirá en
pantalla el tablero inicial, como se ha visto en el ejemplo, para pedir el primer disparo al jugador.
Cuando el usuario introduce las coordenadas de una casilla para un disparo:
- Comprueba que las coordenadas son correctas y que corresponden a una casilla dentro del tablero.
En caso contrario, escribe un mensaje de error. Si el usuario ha introducido una letra minúscula, la
convierte a mayúscula.
- Si la casilla está dentro del tablero, comprueba si corresponde a una casilla ya jugada, en cuyo
caso escribe un mensaje de error e incrementa el contador de disparos fallados.
- En otro caso, realiza el disparo y escribe el resultado, tal y como se ha indicado en el ejemplo.
Después solicitará las coordenadas del siguiente disparo. En el caso de que el jugador introduzca una M
se mostrarán las opciones del menú.
La aplicación deberá llevar la cuenta de los disparos acertados y fallados, número de barcos tocados y
hundidos, etc.
DOCUMENTACIÓN DE LA PRÁCTICA
El código fuente deberá comentarse de forma completa, tal y como se ha indicado en la teoría: cabeceras de
módulo, descripción de los elementos exportados, etc.
En la calificación de la práctica se valorará la calidad de la documentación.
OBSERVACIONES:
1.
2.
No debe modificarse en ninguna forma la unidad TiposBarquitos.
No debe modificarse en ningún caso el nombre de los módulos ni la especificación de cada módulo ni
de la interfaz de cada uno de los subprogramas (nombre, parámetros, etc). Si considera que es
necesario hacer alguna modificación, consulte con la profesora. Sí puede, en cambio, añadir otros tipos,
variables, subprogramas etc., tanto exportados como no exportados, donde lo considere oportuno,
excepto en la unidad TiposBarquitos. También pueden añadirse otros módulos.
3. En la calificación de la práctica se valorará, por orden de mayor a menor importancia:
- La corrección de los distintos módulos y de sus respectivas interfaces, así como su uso por otros
módulos.
- La documentación del código.
- La corrección de los distintos subprogramas.
- El grado de aleatoriedad de las soluciones generadas.
- La eficiencia de los algoritmos utilizados.
- La facilidad y comodidad de uso de la interfaz para el jugador.
ENTREGA DE LA PRÁCTICA
Cada alumno deberá entregar un disquete:
- Con una etiqueta en la que se indiquen:
.
• Nombre y primer apellido del alumno.
.
• Septiembre 2005
.
• La versión de Delphi/Kylix utilizada.
- Conteniendo los siguientes ficheros:
.
• AUTOR.TXT Fichero de texto con los apellidos, nombre y DNI.
.
• Los proyectos Delphi/Kylix LibBarquitos y JuegoBarquitos con todos sus ficheros fuente
Recuerde que los proyectos Delphi/Kylix deben guardarse en el disquete desde dentro
del entorno gráfico y unidad a unidad.
No
es
necesario
entregar
los
ficheros
objeto
(.DCU
y
.DLL)
ni
ejecutables
(.EXE)
Todos los ficheros deben estar en la raíz del disquete.
Se recomienda a los alumnos que conserven una copia de la práctica entregada.
La fecha límite para entregar la práctica es el día 7 de septiembre de 2005,
a las 18 horas.
Descargar