ELO-330: Programación de Sistemas
Tarea 3: Batalla Naval
Objetivos:
En esta tarea usted aplicará: creación de procesos, comunicación entre
procesos usando pipes,
integración de servicios provistos por otras aplicaciones, semáforos y
uso de memoria compartida. En este
caso se solicitará servicios de gnuplot o GNU octave.
Introducción
Este programa es una versión computacional del juego batalla naval. A través de éste su grupo experimentará con semáforos, compartición de memoria entre otros.
Nombre: bn : Batalla Naval
Sintaxis: bn [a]
a: es un parámetro opcional. Es omitido para la versión del
programa que primero se ejecuta. Al omitir el parámetro el programa crear la
zona de memoria compartida y todos los recursos compartidos requeridos
para la operación de la aplicación. Cuando el parámetro es incluido, la
aplicación accede a la zona de memoria compartida y otros recursos creados previamente.
Descripción
Este programa debe ejecutarse dos veces en la misma máquina. Cada versión corresponde a un jugador de la batalla naval.
La zona naval de cada jugador se representará por un cuadrado de 10x10
celdas (ver figura 1). La coordenada horizontal de la celda está
numerada de la A a la J y las verticales del 1 al 10. Todos los
barcos son de tamaño 3. La vista de cada celda del cuadrado corresponde
a "agua", "barco" (parte no dañada del barco), "toque" (parte dañada
del barco). El juego se juega en forma alternada, partiendo el segundo
jugador con el primer disparo, un disparo por vez.
a)
b)
Figura 1: Vista propia del juego al comenzar a) y luego de
algunas movidas b). En esta tarea todos los barcos son de tamaño3 y su
representación es simple como el caso b) o incluso más simple.
Al iniciar el programa, éste pide ingresar por consola el número
de barcos. Luego para cada uno pide ingresar las coordenadas de uno de
sus extremos y luego N o E para indicar si se ubica hacia el norte o
este. La sintáxis es el tipo:
Ingrese ubicación de barco : D5N /* representa barco que
parte en ubicación (D,5) y se ubica además en las dos celdas
superiores; es decir, (D,6) y (D,7).*/
En la medida que se ingresan los barcos, el programa muestra un
cuadrado similar a la figura 1a. En éste se muestran los barcos propios
(sin tanto detalle) y, más adelante, sus puntos de impacto. Al término
de ingreso de las naves, el programa muestra además un segundo cuadrado
donde sólo se muestra los disparos propios indicadno aquellos que han
dado en el blanco (toques) o han sido "agua". Su grupo debe
elegir cómo mostrar cada cosa (no se complique).
El programa termina cuando, después que ambos jugadores han hecho el
mismo número de disparos, uno ha destruido las naves del otro. El programa detecta esta situación y escribe en consola:
"Ganaste!!!!" , "Empate" o bien "Perdiste" según sea el caso.
El
programa también termina al ingresa por consola un fin de archivo
(Control-D). No importando cómo termine el programa, la zona de memoria
compartida y otros recursos deben ser removidos por el
proceso que los creó.
Evaluación de la Tarea y qué entregar:
revisar las instrucciones para
entregar y evaluar su tarea.
Recomendaciones
* Para el maneno de memoria compartida revisar este ejemplo.
* Revise también el uso de atexit().
* Para dibujar con gnuplot, ver este ejemplo; o si prefiere hacerlo con octave, ver éste.
* Si un jugador no sigue las instrucciones; por ejemplo, trata de poner
barcos fuera del cuadrado, usted es libre de reaccionar como quiera. Es
una condición a la que no será sometido su programa.
* Si más aclaraciones son requeridas, con todo gusto lo atenderé.