Batalla+Naval

Volver a San Andrés 2010-01

=Batalla Naval= Batalla Naval es un popular juego para dos personas en el que cada jugador debe tratar de hundir los barcos del contendor. Consta de dos tableros coordenados por jugador, en el primer tablero cada jugador debe poner sus barcos sin que el contendor sepa la posición. Luego, por turnos, cada jugador debe disparar, es decir poner una ficha en su segundo tablero, tratando de darle a los barcos enemigos. Cuando se hayan hundido todos los barcos enemigos, el jugador gana la partida.

=Proyecto=

Integrantes
Jessica Jaramillo Luz Mary Londoño

Programa
1. Ubicar los barcos de cada jugador, hacer clic en los barcos que están en el muelle, clic derecho en el tablero para ponerlo vertical, izquierdo para ponerlo horizontal 2. Cuando se hayan ubicado los barcos, se ocultarán. Se hace clic por turnos, si es un cuadrado rojo, se ha disparado a un barco, si es azul se ha disparado al mar. 3. Gana quien dispare a todos los barcos del oponente. media type="custom" key="7596647"

Código fuente


=Enunciado del problema= BATALLA NAVAL

Batalla Naval es un popular juego para dos personas en el que cada jugador debe tratar de hundir los barcos del contendor. Consta de dos tableros coordenados por jugador, en el primer tablero cada jugador debe poner sus barcos sin que el contendor sepa la posición. Luego, por turnos, cada jugador debe disparar, es decir poner una ficha en su segundo tablero, tratando de darle a los barcos enemigos. Cuando se hayan hundido todos los barcos enemigos, el jugador gana la partida. Los barcos con los que cuenta cada jugador son cinco y se pueden poner en cualquier lugar del tablero de forma horizontal o vertical, pero no uno encima del otro. En la siguiente lista se muestra la cantidad de barcos por jugador y la cantidad de posiciones que ocupa:
 * **TIPO DE BARCO** || **CANTIDAD** || **POSICIONES QUE OCUPA** ||
 * Destructor || 1 || 4 ||
 * Acorazado || 2 || 3 ||
 * Patrullero || 2 || 2 ||

Diseñe e implemente un programa que permita a dos jugadores enfrentarse en una Batalla Naval, el tablero debe ser de 10x10 casillas. En cada turno, el programa debe informar si se hizo impacto en un barco del contrincante, además debe informar si se ha hundido un barco enemigo (haber disparado en todas las casillas que ocupa) y decir el tipo del barco que se hundió. El programa debe continuar hasta que se hayan hundido todos los barcos enemigos e informar el ganador. Además el programa debe permitir que dos personas jueguen en dos computadores diferentes, para esto se debe compartir información por medio de archivos con la otra instancia del programa. =Documento entregado=

** BATALLA NAVAL **

Al escuchar el nombre del juego batalla naval, lo primero que se nos puede venir a la mente es un tablero (como de ajedrez) y unos barcos.

El proyecto, está basado en un juego llamado **__batalla naval__**, que consiste en que c ada jugador tendrá un tablero donde colocar sus barcos y otro para hundir los de su enemigo. Una vez dentro del tablero deberán ingresar la misma cantidad de barcos los dos jugadores para que el juego se desarrolle de forma normal. El juego termina cuando uno de los jugadores elimina todos los barcos del otro.

Antes de realizar nuestro proyecto, analizamos cual era el problema para llegar a hacer una solución lógica, para después pasar a hacer el proyecto en códigos y que diera un resultado igual; lo que pudimos percibir a la hora de realizar ese análisis, fue que necesitábamos como entradas: tableros para poner los barcos. Condiciones: como juegan dos personas, el primer jugador no podía ver la ubicación de los barcos en el tablero de el segundo jugador, ni el segundo jugador podía ver la posición de los barcos del tablero del primer jugador. Y las salidas: dos tableros donde no se puedan ver los barcos pero que estén ahí, y que cada jugador pueda verificar casilla por casilla en el tablero del oponente si hay barcos o no.

En nuestro juego, empleamos el programa //__PROCESSING__//, ya que le daba un estilo en 2D a el juego, utilizamos la mayoría de códigos en __C++,__ aprendidos en el curso, y algunos de el programa para que nuestro proyecto diera un mejor resultado, también empleamos 3 tipos de clases para que fuese más fácil las creaciones de procedimientos y funciones, el juego solo se puede jugar con la herramienta de el mouse, y por eso utilizamos funciones del programa para que se pudiese cambiar la posición de los barcos ya sea dándole un click derecho o un click izquierdo. Para la creación de los barcos utilizamos una clase llamada Barco, el cual le daba a cada barco nuevo que creábamos unos parámetros de posiciones y tamaños.

Siendo así, cada barco ya creado ocupa una posición en la matriz, pero ahora teníamos otro problema que era el de cómo pasábamos un barco ya creado de un tablero auxiliar a el tablero de el primer jugador, aquí empleamos un procedimiento llamado seleccionarBarco, que nos ayudo para hacer un tipo de “copia” de ese barco escogido para p asarlo a el tablero principal, con un procedimiento llamado insertaBarco ; al llegar a este punto, utilizamos algunas métodos para que esos barcos ya insertados no se salieran de la matriz, el cual empleamos condiciones para devolver las casillas que se salía esa parte de el barco.

Los barcos estaban divididos en 3 clases, Destructor de 4 posiciones, dos barcos Acorazados de 3 posiciones y dos barcos Patrulleros de 2 posiciones; al poner en nuestro tablero dos barcos apilados de la misma posición, nos podía leer de otra forma ejemplo si estaban horizontales y apilados, el programa lo podía tomar como dos barcos de forma vertical o viceversa.

Por lo que a cada barco le dimos un carácter diferente, para que se diferenciara en el tablero. Utilizamos booleanos y contadores para saber cuando ganaba un jugador o cuando pierde, haciendo un estilo de seguimiento de los pasos dados por cada jugada, si le impacto a un barco o no.

Más detalladamente lo que implementamos en nuestro proyecto, fueron diferentes tipos de clases, que utilizamos para hacer procedimientos y funciones, con una clase llamada TABLERO, en el cual trabajamos todos los procedimientos, matrices y funciones que tenían que ver con la creación de los tableros; hicimos los cuatro tableros que imprimen en pantalla por medio de dos procedimientos llamados display que servía para mostrar en pantalla el tablero donde podemos poner los barcos, y otro llamado display2, que luego de haber puestos nuestros barcos con los procedimientos display, por lo q utilizamos contadores para que, cuando llegara a el ultimo barco seleccionado, la pantalla se limpiara pero por dentro del tablero estarían los barcos, y mientras que los tablero estuvieran cubiertos, utilizamos una función llamada mouse, que capta la posición en la

Matriz de el tablero en donde se encuentre el cursor, el procedimiento display2 además de cubrir el tablero, también al pulsar en cualquier casilla, si hay barco la casilla la pone de color rojo, sino encuentra un barco entonces la casilla se coloca de un color fucsia. En la misma clase declaramos una función llamada seleccionarBarco, que selecciona la posición del barco, y fue de mucha ayuda para poder poner los barcos de los muelles a los tableros principales.

La clase BARCO, la implementamos para darle los parámetros a los barcos, que son posición en X, posición en Y de la matriz, el carácter para diferenciar cada barco, y dentro de eso usamos un booleano para saber si el barco estaba en posición horizontal o vertical.

Y en nuestra clase principal, desarrollamos la mayoría de procedimiento, donde llamábamos las funciones creadas en las anteriores clases; en la función SET UP donde creamos cada barco con varios constructores; una procedimiento llamado DRAW donde llamábamos las funciones display y display2, para imprimir los tableros en pantalla; la función mouseReleased que es una función del programa, para que guardara cada posición que le damos al barco, implementamos el uso de una función de le mouse para que al dar click derecho el barco se pusiera vertical, y si le damos con el click izquierdo, el barco queda horizontal.

Al hacer nuestro proyecto, hicimos un gran repaso a todo lo visto en el transcurso del semestre, y es una muy buena forma de evaluar lo que aprendimos en el curso.

=Póster=