Documentación Tarea Nº3
Programación de Sistemas


Profesor:  Agustín González V.
Ayudante: Christian Lalanne

Autor: Eduardo González Fisher
Rol: 2021010-9

Nombre:
bnv2: Batalla Naval versión 2.

Sintaxis:
bnv2 <archivo_porta-avion> <archivo_fragata> <archivo_submarino> <puerto_local> <destino> <puerto_remoto>

Descripción:
La tarea tiene como objetivo crear una aplicación que interactua con otra mediante TCP. Específicamente, un juego multijugador. Esta es la versión 2.0, basada en la versión anterior. El juego es una adaptación computacional del popular juego de tablero, o salón, "Combate Naval".
Al comenzar se despliega el tablero de juego y se le consulta al usuario las embarcaciones ha colocar, y sus posiciones.


Tablero de juego.


Luego de posicionar las embarcaciones, el programa intentará realizar la conexió TCP. Cuando se halla logrado, el usuario debe especificar las coordenadas de sus disparos. El juego es en base a turnos, el jugador realiza su disparo y espera a que su oponente realice los suyos antes de continuar.
Si acierta el disparo, se marcará la posición en el tablero (que indica los disparos) con un círculo rojo. Por otra parte, si falla, aparecerá un círculo azul en dicha coordenada. En el caso de que el oponente dispare, los círculos aparecen en el tablero con las embarcaciones.
El programa finaliza después de que se hayan hundido todas las embarcaciones de algún jugador.

Diagrama de Flujo:

Problemas enfrentados:

Como esta tarea se basa en lo hecho en la anterior, la versión 1.0, muchas cosas ya estan resueltas y básicamente se utilizaron tal cual en esta versión.
El gran problema que se destaca para esta tarea fue el lograr realizar una conexión TCP entre entre 2 máquinas, ambas ejecutando el programa.
La dificultad encontrada fue la sincronización entre las dos máquinas para interactuar. Como ambas actúan como cliente y servidor a la vez no fue fácil lograr esto. Se ideó que cuando se inicie el programa, éste debe intentar conectarse a la otra máquina, y luego abrir un puerto para que la otra se conecte, en caso de que el primer intento de conectarse a la otra máquina no halla sido exitoso, se intenta nuevamente. Debido a que en innumerables ocasiones la conexion bilateral no fue exitosa, es decir, sólo una maquina se conectaba a la otra, se decidió agregar un pequeño lapso de 2 segundos antes de que se intentase conectar nuevamente.
Para implementar la orientación vertical de los navíos en la grilla, se recurrió a la solución de E. Labarca de la Tarea 2, y se adaptó.



©2004. Eduardo González Fisher.