Documentación Tarea 2
ELO 330 Programación de Sistemas
Batalla Naval v1.0
Segundo Semestre 2004
INDICE
- Introducción
- Descripción
- Diagrama de Bloques
- Comentarios
1.- Introducción
El programa Bnv1 tiene por objetivo el manejo de pipes entre procesos y
descubrir como se puede aprovechar, mediante éstas, las potencialidades de dos programas
diferentes, como son Bash y GnuPlot.
Esta tarea consiste en desarrollar el clásico juego de la Batalla
Naval, donde se posicionan barcos en un sistema coordenado y luego se
procede a tratar de acertar a los barcos del enemigo.
GnuPlot está encargado de graficar en pantalla los barcos y los
disparos, y está controlado por un proceso padre, Bash, el cual realiza la
interacción con el usuario.
Volver a Indice
2.- Descripción del Archivo Bnv1
Bnv1 es un programa escrito en código C.
Éste programa comienza con la creación de un proceso hijo, el cual es mutado
para ejecutar GnuPlot, de esta forma una vez creado se setea la entrada
estándar (lectura) del proceso hijo a un extremo del pipe y por el otro lado
se ocupa un descriptor de archivo para unir el poceso padre y el pipe, de
modo que este pueda escribir sobre el otro proceso.
Tras setear el método de comunicación entre procesos antes descrito, se
procede a configurar y dar formato a GnuPlot, para luego dar paso a menus de
usuario, los cuales permiten posicionar las diferentes embarcaciones y una
vez que el usuario decida comenzar con el juego se da inicio a los disparos.
Para posicionar embarcaciones se ofrece un menu con el tipo de embarcacion
que se desea crear, portaviones, fragata o submarino, cada una de estas
opciones carga el archivo con el dibujo respectivo que será dibujado por
GnuPlot. Una vez decidida la embarcación este programa da la
opción de posicionar la nave
horizontal o verticalmente.
El posicionamiento se desarrolló con cierto control de situaciones no
deseadas como lo es el posicionamiento de embarcaciones fuera del area
visible de 10x10 o evitar la superoposición de naves.
Muy importante resulta el arreglo bidimensional tablero el cual va
mapeando las posiciones ocupadas ya sea con naves o con disparos.
Una vez finalizada la etpa de posicionar las embarcaciones, eligiendo la
opción 5 en el menú principal, se da comienzo a los disparos.
De la misma manera que antes, existe una protección contra disparar
fuera del tablero.
Si se produce un acierto en el disparo se marca con una cruz cargando un
archivo llamado "acierto". En caso de no acertar se dibuja un circulo el
cual no requiere de archivo externo, ya que se aprovechan los mismos
recursos de GnuPlot para dibujar un circulo.
En el proceso de mapear las posiciones que se van ocupando con el arreglo
bidimensional tablero, son muy importantes la funciones "ocupar" y
"ocupado". La primera se ocupa de marcar como ocupado la posición
solicitada y la segunda se encarga de comprobar si ya se ocupo o esta vacía
la posición donde se quiere poner la embarcación o disparo.
Volver a Indice
3.- Diagrama de Bloques
Volver a Indice
4.- Comentarios
La dificultad encontrada en esta tarea no fue la comunicación entre procesos
lo cual resulto practicamente de inmediato y sin problemas. La mayor
dificultad estuvo en simular una interfaz solida del juego, diseñada para
cualquier tipo de usuario. De esta manera se pudo solucionar el prevenir
naves fuera del tablero solo en la posicion horizontal. Verticalmente no se
implemento esta prevencion ya que la forma pensada consistia en reproducir
el codigo, lo cual resultaba muy ineficiente. Otro problema encontrado fue
crear proteccion contra ingreso de variables no definidas al pedir un opcion
del usuario, a travez del teclado.
Resulta muy provechoso ocupar las pipes para unir las potencialidades de dos
programas diferentes.
Volver a Indice