Ingeniería Técnica en Informática de gestión.
Programación I. Curso 03-04.
PRÁCTICA OBLIGATORIA PROGRAMACIÓN I. Curso 2003-2004
Convocatoria de Septiembre.
Realizar los procedimientos y funciones necesarios para implementar el juego “Hundir la
flota”.
Instrucciones: Las instrucciones del juego son prácticamente las mismas que las de la práctica
de la convocatoria de Febrero de este mismo año 2004, con las siguientes diferencias:
1. La cantidad y el tamaño de los barcos que determinan la flota podrán ser introducidos
por el jugador.
2. La colocación de los barcos se podrá hacer de forma aleatoria o podrá ser realizada por
el jugador.
3. El tablero pasa a tener 10x10 posiciones (0..9, A..J)
1. DESCRIPCIÓN DE LOS FICHEROS:
Los ficheros “puntmax.dat” y “Estadísticas.dat” a utilizar serán implementados del mismo modo
que los explicados en la práctica propuesta para Febrero.
2. DESCRIPCIÓN DEL PROGRAMA PEDIDO:
La estructura del programa será similar a la de la práctica de Febrero, pero se incluyen nuevas
opciones. A continuación se comenta como deberá ser la estructura en este programa:
El programa inicialmente debe mostrar en pantalla un menú con las siguientes opciones:
1. Jugar nueva partida.
2. Ver Puntuaciones máximas.
3. Ver Estadísticas.
4. Limpiar fichero Estadísticas.
5. Salir.
Opción 1: Jugar nueva partida.
Al elegir la primera opción, el programa deberá realizar las siguientes opciones:
1. Verificar si el fichero “Estadísticas.dat” está cargado en memoria.
2. En caso de no estar cargado, se debe leer el contenido del fichero y grabarlo en memoria. Es
decir, leer todos los registros del fichero y volcarlos a unas variables del programa que serán
del mismo tipo que los registros del fichero (array de registros Celda).
Además de los arrays necesarios para la lectura de ficheros comentados anteriormente, para el
desarrollo del juego son necesarios cuatro array más:
• 2 arrays de celdas para que los jugadores coloquen sus barcos.
• 2 arrays de celdas para que se almacene el estado de los disparos realizados hasta el
momento. Es para que el jugador conozca aquellas posiciones en las que ya ha realizado
un ataque, y así no vuelva a lanzar una bomba en ese punto.
Dentro de esta opción, el juego muestra un submenú, en el que se presentan dos opciones
(Atención, el funcionamiento de cada opción es diferente al planteado en la práctica de
Febrero):
1.1 . Jugador vs Computadora.
1.2 . Volver atrás.
Opción 1.1: Jugador vs Computadora:
En esta opción, el programa debe realizar la opción difícil de la práctica de Febrero (con
algunos cambios), por lo que ya no habrá diferencia entre nivel fácil o difícil. De esta
manera se eliminará la opción fácil, quedándose el juego reducido a jugar siempre en el nivel
difícil.
Las operaciones en orden que debe realizar esta opción son:
1. Mostrar una pantalla en la que se pregunte al usuario si desea introducir los datos
de la flota.
1.1 Si la respuesta es sí, se mostrará una pantalla de entrada para la introducción de
los siguientes:
b) Cantidad de Portaaviones.
c) Tamaño del Portaaviones.
d) Cantidad de Fragatas.
e) Tamaño de cada Fragata.
f) Cantidad de Lanchas.
g) Tamaño de cada Lancha,
Nota: Los valores introducidos deberán ser números enteros coherentes,
considerándose tarea del alumno determinar los máximos y mínimos para cada
dato (poner los limites como constantes).
1.2. Si la respuesta es no, se considerarán tomarán los valores por defecto para
cada una de los datos (los indicados en la práctica de Febrero: 1 Portaaviones, 2
Fragatas y 4 Lanchas con tamaños de 4, 2 y 1 celda respectivamente) y se pasará
directamente al punto 2.
2. Mostrar una segunda pantalla en la que se pregunte al usuario si desea introducir la
colocación de la flota de forma manual.
2.1. Si la respuesta es no, la colocación de la flota se realizará de forma aleatoria y
se mostrará por pantalla el tablero de juego al jugador humano. Esta colocación
deberá realizarse del mismo modo que se indica en la práctica de Febrero.
Nota: todos los barcos deben estar separados de los demás por al menos una celda
en todo su contorno (la orientación del barco (horizontal o vertical) también se
decidirá de forma aleatoria).
2.2 Si la respuesta es si, se deberá introducir cada uno de los barcos que forman la
flota del siguiente modo:
[Portaaviones | Fragata | Lancha] número …
Orientación: …
Casilla de comienzo: …
Nota: Se considerará como referencia que la colocación de los barcos se realiza
siempre de izquierda a derecha y de arriba abajo. Ejemplo; de acuerdo con el
tablero mostrado en la práctica de febrero, si la orientación es horizontal y la casilla
de comienzo de un barco de tamaño 3, es A1, el barco se situará en las casillas A1,
B1 y C1.
Nota: todos los barcos deben estar separados de los demás por al menos una celda
en todo su contorno. Si la colocación del barco no cumpliera esta condición o
dicho barco a colocar se “saldría” del tablero, se deberá informar al jugador y
permitir la introducción de nuevos valores.
3. Realizar un sorteo para ver que jugador comienza, el humano o la computadora.
4. Comenzar el juego: presentar al jugador su pantalla de juego. El aspecto será el
mismo que en la práctica de Febrero.
Asimismo, el funcionamiento del juego será el mismo que el explicado en la práctica de
la convocatoria de febrero.
4.1.a Turno del humano: éste tecleará una casilla y el programa deberá comprobar
paso a paso:
1. ¿la celda existe y es correcta?
2. Mostrar un mensaje (Agua!, Tocado!, Lanzamiento Repetido!)
3. Marcar el panel de aciertos y fallos del usuario.
4. Marcar el panel de flota de la computadora (A: Agua, T:Tocado).
5. Modificar el array de estadísticas.
6. Incrementar el número de bombas lanzado por ese jugador.
Mientras el programa solicita la casilla a bombardear se debe controlar si el usuario
teclea “Salir”, por si acaso desea terminar el juego y volver al menú anterior. (1.Jugador
vs Computadora. 2. Volver atrás).
4.1.b Turno de la computadora: La computadora en este caso, realizará las acciones
indicadas para el nivel difícil de la práctica propuesta para Febrero:
1. Buscar todas aquellas celdas que sean de barcos tocados y disparar a las
celdas contiguas hasta que el barco quede hundido y no haya más celdas
contiguas sin bombardear.
2. Si no existe ningún barco tocado, o bien los que hay están hundidos, deberá
consultarse el array de estadísticas y disparar a la posición con mayor
probabilidad de acierto de las existentes (la probabilidad se determina
cuanto mayor número de aciertos exista por número de bombas lanzadas a
una celda) y que no hayan sido disparadas hasta el momento en la
partida en curso.
3. Mostrar un mensaje: coordenada del disparo (Agua!, Tocado!, Lanzamiento
Repetido!)
4. Marcar el panel de aciertos y fallos de la computadora.
5. Marcar el panel de flota del usuario (A: Agua, T:Tocado).
6. Modificar el array de estadísticas.
7. Incrementar el número de bombas lanzadas.
5. Al finalizar el juego (todos los barcos de uno de los jugadores quedarán hundidos), si
gana el jugador humano, el programa cargará el fichero “Puntmax.dat” en memoria.
Una vez en memoria comprobará si el jugador ha conseguido superar alguna puntuación
máxima de las guardadas hasta el momento. Si fuese así, se le informará de que ha
superado una puntuación máxima y tras preguntar su nombre, se guardará en el archivo
de puntuaciones puntmax.dat con el número de bombas lanzado y con el tipo de juego
en el que ha jugado (en este caso, Jugador vs Maquina). A igualdad de bombas
lanzadas, la mejor puntuación es la que se haya obtenido tras superar a la computadora
en un el tipo de juego Jugador vs Maquina. Para colocarlos ordenados, realizar una
inserción ordenada, es decir, leer cada puntuación máxima desde la primera, compararla
con la puntuación obtenida, y si la actual es mayor, entonces insertarla, sino, pasar al
siguiente registro. Por último al finalizar la partida o al pulsar salir, siempre se
almacenará el array de estadísticas en el fichero estadisticas.dat.
Opción 1.3. Volver atrás:
Esta opción le permite al usuario volver al menú principal.
Opción 2: Ver Puntuaciones máximas
Al igual que la práctica de la convocatoria de Febrero, al pulsar en esta opción se cargará el
fichero “Puntmax.dat” en memoria y se mostrarán por pantalla los diez jugadores con menos
lanzamientos de bombas realizados, ordenados de menor a mayor, se mostrará el nombre del
jugador, los lanzamientos realizados y el nivel en el que jugó.
Opción 3: Ver estadísticas
Mediante esta opción, al igual que en la práctica de Febrero, se conocerá cuales son las
estadísticas para cada celda. El programa mostrará una tabla de 10 filas por 10 columnas con el
número de aciertos por el número de bombas lanzado sobre cada celda. Ejemplo de una celda:
3/8.
Opción 4: Limpiar fichero estadísticas
El fichero de estadísticas va acumulando en cada partida jugada el número de aciertos por
número de bombas lanzado de cada celda. Puede ser que tras muchas partidas tenga valores
excesivamente altos y sean predecibles. Por lo tanto con esta opción se limpiará el fichero de
estadísticas, inicializándolo a 0/0 (0 aciertos y 0 bombas lanzadas).
Opción 5: Salir.
Al pulsar en esta opción finalizará la aplicación.
Aclaraciones respecto a la práctica de Febrero:
1. Los turnos jugador – ordenador, son siempre alternativos, independientemente de que se
acierte el disparo o se repita en la misma casilla. Sólo se le preguntará nuevamente si
introduce una casilla no válida.
2. Los paneles de barcos deben aparecer con la disposición de letras y números tal y como
aparecen en la documentación de la práctica de Febrero de 2004.
3. Las coordenadas se introducirán seguidas, p.ej: A5, no en dos líneas separadas por un
“enter”.
4. Los funcionamientos incorrectos “aleatorios” tienen una causa, hay que encontrarla,
generalmente no dependen del ordenador.
3. NORMAS
Es obligatorio cumplir las siguientes normas para aprobar la práctica:
La práctica se calificará de 0 (suspenso) a 2 puntos. Para poder aprobar la práctica como
mínimo hay que obtener 1 punto. Para obtener la calificación de hasta 2 puntos deben funcionar
correctamente todas las opciones especificadas en el enunciado sin excepción.
El fichero fuente se llamará FLOTA.PAS y el fichero ejecutable FLOTA.EXE.
Deben entregarse dos ficheros de ejemplo con los dos ficheros:
PUNTMAX.DAT, ESTADISTICAS.DAT.
Todos estos ficheros se pondrán en el directorio raíz, es decir, en A:\. La falta de cualquiera de
esos ficheros supondrá el suspenso en la práctica.
Comprobar que el disquete que se entrega no contenga virus. Si se detecta algún virus, la
práctica quedará suspensa.
Hay que usar los nombres de fichero indicados anteriormente. El uso de ficheros con nombres
diferentes de los especificados en este enunciado dará error de ejecución y no se podrá
comprobar el correcto funcionamiento de la práctica
Se debe utilizar funciones y subprogramas y hacer un diseño modular.
No es necesario (y no se evaluará) ningún tipo de gráfico, música, etc.
No se admite el uso de variables globales en los subprogramas. Todas las variables de las
funciones/procedimientos deben ser locales o parámetros de la propia función/procedimiento
El código fuente debe estar tabulado y comentado.
El programa debe ser robusto, es decir, debe detectar si los datos introducidos por el
usuario son correctos. Por ejemplo, no debe dar error o quedarse colgado si el usuario introduce
un carácter que no se corresponde a una opción del menú de las que se le muestran.
4. PRESENTACIÓN DE LA PRÁCTICA OBLIGATORIA
a) Material a entregar:
Una memoria con la documentación de la práctica. La documentación se entregará impresa en
DIN-A4 con letra Times Roman de 8 puntos, interlineado de 1 y márgenes de 2,5 cm. Los
títulos de los apartados se escribirán con tamaño de 12 puntos y en negrita. La memoria debe
contener los siguientes apartados, en el orden que se indica:
Portada. Título de la práctica, asignatura, convocatoria (mes y año), número de grupo (11, 12 o
13) y nombre de los componentes del grupo. (1 página)
Introducción. Breve descripción del contexto, del problema a resolver y las opciones
implementadas. No se trata de volver a copiar el enunciado. (1 página)
Diseño. Explicación, en dos o tres párrafos, de cómo el programa resuelve el problema.
Explicación, en un párrafo, de cómo se representan los datos principales. Breve descripción, en
un párrafo o dos por cada uno, de lo que hacen los procedimientos y funciones principales y el
programa principal y Diagrama de llamadas de unos subprogramas a otros.
(No más de 2 páginas)
Observaciones. Comentarios sobre la práctica. Problemas que se han tenido al realizar la
práctica. (No más de 1 página)
Código fuente comentado. Cada comentario de procedimiento o función estará formado por:
Descripción, Entradas y Salidas. Lo mismo para el programa principal. Un disquete con los
ficheros especificados en el enunciado de la práctica. El disquete debe llevar una etiqueta con
los nombres de los componentes del grupo y se meterá en un sobre adherido a la portada de la
práctica
El disco y la memoria tienen la misma importancia para la evaluación de la práctica. Si falta uno
de ellos, el código no está comentado o la memoria está incompleta, la práctica estará suspensa.
No se evaluarán prácticas presentadas después de la fecha de entrega establecida.
Las prácticas se realizarán obligatoriamente en grupos de dos personas. No se evaluarán
prácticas hechas en grupos que no sean de dos personas.
5. FECHA Y LUGAR DE ENTREGA DE LA PRÁCTICA
El último día de entrega de prácticas será el día del examen de la asignatura en las aulas y horas
correspondientes.