Está en la página 1de 6

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 Febrero

Realizar los procedimientos y funciones necesarios para implementar el juego “Hundir la


flota”.

Instrucciones: en el juego participan dos jugadores, uno será la computadora, y el otro el


usuario. En primer lugar cada jugador dispondrá su flota sobre el terreno de juego (una tabla
compuesta por 8 filas y 8 columnas) sin ser visto por el otro. La flota de cada jugador está
compuesta por 1 Portaaviones, 2 Fragatas y 4 Lanchas. Cada barco tiene un tamaño
predeterminado, el portaaviones ocupa 4 celdas, las fragatas 2, y las lanchas 1.
Una vez dispuesta la flota se decidirá quien comienza a jugar por sorteo. Una vez conocido el
jugador que comienza, jugador o computadora, lanza una bomba a una posición del territorio
enemigo, por ejemplo A7 (Fila A, Columna 7). Si el jugador atacado no posee ninguna
embarcación en ese punto, será un tiro fallido del atacante, (Agua!), sin embargo, si la bomba
acierta en algún barco de la flota atacada, será un barco tocado. Cuando se bombardean todas las
posiciones ocupadas por un barco, se determina que éste queda hundido. El juego finaliza
cuando uno de los dos jugadores (computadora o humano) consiga hundir todos los barcos del
jugador contrario.

Por lo tanto, cada jugador tiene asociado un tablero de juego como el siguiente:

A B C D E F G H
1
2
3
4
5
6
7
8

Para la práctica se deben implementar dos ficheros que permitan añadir nuevos registros y
modificar los existentes.

1. Descripción de los ficheros:

1. Fichero “Puntmax.dat”: almacena todos los datos en referencia a las 10 mejores partidas
realizadas por jugadores, guarda la siguiente información por registro:

arrayPersona [1..10] of Persona. Lista con los registros tipo “Persona”


correspondientes a cada una de las puntuaciones máximas registradas.

Tipo Persona registro con los siguientes campos:

1
sNombre: tipoNombre
numBombas: tipoNumero
bNivel: tipoNivel

2. Fichero “Estadisticas.dat”: almacena todos los datos relativos a las estadísticas de juego
obtenidas hasta el momento. Es necesario para programar el modo de juego de la computadora,
y almacena el número de bombas lanzado sobre cada coordenada (celda) así como el número de
aciertos que se han producido en dicho lugar. Guarda la siguiente información por registro:

tipoArrayCelda array[1..64] of tipoCelda. Lista con los registros tipoCelda


correspondientes a cada una de las celdas del terreno de juego.

tipoCelda: registro con los siguientes campos:


numBombas: tipoNumero
numAciertos: tipoNumero

Los tipos de los campos de los registros se deben declarar de la siguiente manera:

tipoNivel: Byte
tipoNombre: String[50]
tipoNumero:integer

2. DESCRIPCIÓN DEL PROGRAMA PEDIDO

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 realiza las siguientes operaciones, en orden:

1. Verificar si el fichero “Estadisticas.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 arrays más:

• 2 Arrays de celdas para que los jugadores coloquen sus barcos. (Jugador y
Computadora)
• 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.
(Jugador y Computadora)

Dentro de esta opción el juego muestra un submenú, en el que se presentan tres opciones:

2
1.1 Nivel Fácil
1.2 Nivel Difícil
1.3 Volver atrás

Opción 1.1: Nivel Fácil

Una vez escogido el nivel fácil el programa debe realizar las siguientes operaciones en orden:

1. Realizar la colocación aleatoria de la flota de los dos jugadores y mostrar por pantalla el
tablero de juego al jugador humano.
*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. Realizar un sorteo para ver que jugador comienza, el humano o la computadora.
3. Comenzar el juego: presentar al jugador su pantalla de juego: el aspecto debe ser el siguiente:

Posición portaaviones jugador


Lanzamientos jugador enemigo Lanzamientos Jugador Humano: A:Agua, T:Tocado

A B C D E F G H
A B C D E F G H
1 A
1 A A
2 A A
2
3 T P P P
3 A
4 A
4
5 A F
5
6 F
6 A
7
7 T T
8 F F L
8

Flota Jugador Panel de aciertos/fallos

*Nota: es imprescindible mostrar al usuario los dos cuadros con un formato semejante al
anterior, tiene que ser lo suficientemente claro para saber dónde están los barcos y dónde realiza
los disparos.

1.1.a Turno del humano: éste tecleará una casilla, por ejemplo, (A5), y el programa se
encargará de comprobar paso por 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. Juego Fácil, 2. Juego
Difícil, 3. Volver atrás).

3
1.1.b Turno de la computadora: la computadora en el nivel fácil realiza los siguientes pasos:
1. realizar un lanzamiento aleatorio a cualquiera de las celdas del enemigo
2. Mostrar un mensaje: coordenada del disparo, y (Agua!, Tocado!, Lanzamiento
Repetido!)
3. Marcar el panel de aciertos y fallos de la computadora.
4. Marcar el panel de flota del usuario (A:Agua, T:Tocado)
5. Modificar el array de estadísticas
6. Incrementar el número de bombas lanzado por ese jugador.

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 nivel de dificultad en el que ha jugado. A igualdad
de bombas lanzadas, la mejor puntuación es la que se haya obtenido tras superar a la
computadora en un nivel difícil. 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 se almacenará el array de estadísticas en el fichero estadisticas.dat.

Opción 1.2: Nivel Difícil:

La única diferencia entre los dos niveles es la inteligencia del juego. En el nivel fácil la
computadora dispara aleatoriamente, sin tener en cuenta ningún factor (ni siquiera el que haya
disparado anteriormente a ese lugar). En el nivel difícil, para mejorar el funcionamiento, se
implementará un mecanismo mediante el cual en el turno de la computadora nunca se repetirá
un disparo a una misma posición.

Para ello cuando juega la computadora se deberán realizar los siguientes procesos adicionales:

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.

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 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ó.

4
Opción 3: Ver estadísticas

Mediante esta opción el usuario conocerá cuales son las estadísticas por cada celda. El programa
mostrará una tabla de 8 filas por 8 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.

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 1 punto deben funcionar correctamente todas las
opciones especificadas en el enunciado menos la opción de nivel difícil. 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.

5
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.

También podría gustarte