Pascal/Turbo Pascal - Hundir la flota, Recompensa 100€ POR FAVOR URGENTE AYUDA

<<>>
 
Vista:

Hundir la flota, Recompensa 100€ POR FAVOR URGENTE AYUDA

Publicado por Jose Carlos (1 intervención) el 13/06/2024 17:00:19
Hola necesito ayuda para programar en Pascal u juego de hundir la flota, los datos son los siguientes:

En el juego cada jugador sitúa barcos en un tablero (fase de configuracion ) y acepta lanzamientos (fase de lanzamientos). Gana el juego el primero que hunde todos los barcos.

Fase de configuración
- Hay dos jugadores, cada uno con un tablero.
- Un tablero es una cuadrícula de casillas con filas y columnas donde las filas están numeradas del 1 al 10 y las columnas de de la letra A a la letra J. El nombre de una casilla en el juego es una pareja columna, fila; Por ejemplo, A 3.
- En el tablero pueden colocarse tres tipos de barcos: Submarino, Fragata, Portaaviones. Los submarinos tienen longitud 1, las fragatas 2 y los portaaviones 3.

Los datos de un barco son el tipo de barco y la posición de la proa del barco en un tablero (columna y fila) y la orientación del barco, que puede ser horizontal o vertical. La proa siempre está en la casilla de arriba a la izquierda del barco.

Por ejemplo: submarino B3 horizontal
Un jugador debe situar un máximo de dos barcos de longitud tres, un máximo de tres barcos de longitud dos y un máximo de 15 barcos de longitud uno. (Por supuesto, puede haber menos de dos barcos de longitud 3, menos de tres de longitud dos, etc.). Cada jugador debe situar en el tablero al menos un barco.

- Un barco ocupa un número de casillas determinado (una, dos o tres) en el tablero y se sitúa de forma horizontal o vertical en el tablero (casillas consecutivas de la misma fila o casillas consecutivas de la misma columna).

- El programa debe leer todos los datos de un fichero llamado datos.txt que utiliza como entrada. No debe leer en ningún momento de la entrada estándar.

- Al comienzo de la ejecución, el programa debe leer de la entrada (datos.txt), primero, los barcos del jugador uno, luego, los barcos del jugador dos, y por último, los lanzamientos (ver epígrafe siguiente).

- Los datos relativos a situar los barcos de un jugador consisten
en una serie de barcos (uno o más de uno). La serie de barcos
se termina cuando se encuentra en la entrada la palabra fin.

- Puede haber cualquier número de caracteres blancos (espacios,
tabuladores y fines de línea) entre los diversos datos de la entrada.
Por ejemplo, no puede suponerse que cada barco está en una línea
de la entrada o que la palabra fin está sóla en una línea.

Se puede suponer que siempre hay un blanco entre una fila y una
columna E.

Fase de lanzamientos


- Un lanzamiento consiste en nombrar una casilla. El resultado del
lanzamiento se considera Agua si no había ningún barco en la casilla,
Tocado, si se ha dado en una casilla en la que hay un (trozo de un)
barco. Cuando un lanzamiento provoca que todas las casillas de un
barco estén tocadas, el resultado del lanzamiento es Hundido. (Y
el barco se considera hundido).
- El fichero datos.txt, tras los datos para la colocación de los
barcos de los jugadores, debe contener los lanzamientos de ambos
jugadores para la partida. Los lanzamientos se representan con una
casilla. Igual que para la colocación de barcos, entre las casillas
de lanzamiento puede haber un número indeterminado de espacios,
tabuladores o finales de línea. Los lanzamientos de ambos jugadores
se alternan en una única secuencia, empezando por un lanzamiento
del jugador uno. Por ejemplo, la siguiente secuencia de lanzamientos
A 1 B 3 J 4 E
5
representa que el jugador uno ha lanzado en A 1, el jugador dos ha
lanzado en B 3, el jugador uno ha lanzado en J 4 y el jugador dos
ha lanzado en E 5.

- Después de configurar el tablero de los dos jugadores, el programa
debe leer del fichero datos.txt lanzamientos hasta que gane uno de
los jugadores o se acabe el fichero.

- Puede haber cualquier número de lanzamientos en la entrada (el
fichero datos.txt), tal vez cero.

En este punto, podrá suponerse un máximo razonable para el número de lanzamientos.
Pero, se valorará considerar que el número de lanzamientos puede
variar desde cero hasta ser potencialmente ilimitado (esto es, para
implementar esta parte se debería utilizar una lista enlazada).


Antes de cada lanzamiento, el programa tiene que escribir por su
salida estándar el tablero del jugador contrario. En el tablero
deben aparecer las casillas que ha bombardeado el jugador, de tal
forma que los lanzamientos que han dado como resultado Agua se
muestren utilizando el carácter A, los lanzamientos que han resultado
ser Tocado se muestren empleando el carácter X, y un barco Hundido
se represente con todas sus casillas marcadas con *.


El resto de casillas se deben representar con el caracter '.'.

Hay que escribir al dibujar el tablero un encabezado indicando el nombre de cada columna
y de cada fila, para que sea posible localizar una casilla del tablero con comodidad.


- Después de un lanzamiento, el programa debe notificar al usuario
el resultado del mismo, escribiendo por su salida estándar una línea
con este formato:

El lanzamiento ha sido: Agua.

Fin del juego

- Cuando después de un lanzamiento (tras informar del resultado del
mismo según el punto anterior), un jugagor consiga hundir todos los
barcos del contrario se considera que este jugador ha ganado y el
juego termina.
- Si se acaba el fichero de datos y no hay un ganador, se considera
que el juego termina en empate.

- Al final de la ejecución (tras el empate o la victoria de un
jugador) el programa debe imprimir en su salida estándar todos los
lanzamientos efectuados con el siguiente formato y un mensaje final
indicando el resultado del juego. Por ejemplo:

Jugador 1: A 3 Agua
Jugador 2: B 5 Tocado
Jugador 1: A 4 Agua
Jugador 2: B 6 Hundido
...
Jugador 1: C 5 Hundido
Ganador: Jugador 1

Otro ejemplo podría ser este:
Jugador 1: A 3 Agua
Jugador 2: B 5 Tocado
Jugador 1: A 4 Agua
Jugador 2: B 6 Hundido
...
Jugador 1: C 5 Agua
Empate

Restricciones de la implementación

- El programa debe cumplir todas las normas de estilo de la asignatura
y estar realizado en un único fichero fuente llamado barcos.p.
- El programa no puede escribir por la salida estándar nada que no
se especifique en el presente enunciado. Todas las trazas tienen
que ser eliminadas del programa antes de su entrega.
- El programa no puede leer datos de ningún fichero que no sea
datos.txt y no puede escribir nada en níngun fichero que no sea la
salida estándar.

- El programa debe definir todos los tipos de datos necesarios, así
como los subprogramas necesarios para manipular elementos de dichos
tipos.
- Si la entrada es incorrecta y se encuentra algún problema al leer
de la misma, por ejemplo, si se intenta leer un lanzamiento y lo
que se encuentra en la entrada no es un lanzamiento válido o si se
intenta leer un barco y resulta inválido, el programa debe escribir
un mensaje informando del suceso.

Si esto sucede durante la lectura de barcos de los jugadores, el programa termina
tras informar del error en la entrada.

Si esto sucede durante la lectura de lanzamientos, el programa informa del error, pero
debe terminar con normalidad como si el fichero terminase en ese punto.
Esto es, debe imprimir todos los lanzamientos al final y el ganador del juego o el empate.

Un barco se considera inválido si se sale del tablero o
se excede el número de barcos máximo para una longitud.

En el caso de encontrar un barco inválido, esto no se considera un error de la entrada.
Simplemente se informa de que hay un barco inválido y se continúa normalmente ignorando
dicho barco.

Igualmente, si al intentar leer un lanzamiento encontramos un valor fuera del tablero,
dicho lanzamiento se ignora y se informa de que hay un lanzamiento inválido.

- Se recuerda que el programa debe estar correctamente factorizado
y debe usar subprogramas para solucionar los distintos subproblemas
de los que se compone. Se recomienda empezar pensando en las
estructuras de datos y desarrollar el programa siguiendo una
estrategia Top-Down.

- Si el programa no cumple correctamente todos los requisitos de
los dos epígrafes anteriores (no hace todo lo que tiene que hacer)
o su código no es legible se considerará que el programa no funciona
correctamente (lo que supone un suspenso en la asignatura).
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Hundir la flota, Recompensa 100€ POR FAVOR URGENTE AYUDA

Publicado por joack (5 intervenciones) el 21/10/2024 06:43:44
Particularmente en que punto necesitas ayuda? Recuerda que aquí no se le resuelve la tarea a nadie.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar