Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Estudiante
Grupo: 97
Docente
Curso
Ingeniería Electrónica
1
Contenido
Introducción................................................................................................................................................3
Diagrama de flujo de la solución de problema............................................................................................5
Código fuente de la solución del problema.................................................................................................6
Inicialización de contadores....................................................................................................................6
Generación de matrices y vectores (Naves)............................................................................................6
Orientación de las naves en la matriz......................................................................................................7
Ubicación de las naves de forma horizontal............................................................................................8
Ubicación de las naves de forma vertical.................................................................................................9
Inicio del juego......................................................................................................................................11
Resultados mostrados por pantalla cuando el juego termina...............................................................22
Funcionamiento del código.......................................................................................................................24
Reglas generales del juego........................................................................................................................37
Conclusiones..............................................................................................................................................38
Bibliografía................................................................................................................................................39
Introducción
El diseño del juego Batalla Naval se basa en comportamiento o en este caso de la ubicación
2
Para ello se crea una matiz como y menciono de ceros de 10x10 la cual corresponde al área de
juego donde se van a ubicar aleatoriamente tres vectores de tres tamaños diferentes, estos
vectores corresponde en el juego a tres tipo de barcos los cuales son el porta aviones con un
tamaño de cinco posiciones, el acorazado con un tamaño de cuatro y la lancha con un tamaño de
tres posiciones.
La idea del código es que este ubique de forma aleatoria estos tres vectores en la matriz de ceros
para el que el jugador en este caso no conozca la ubicación de ellos, por lo cual tampoco esta
Al tener esta matriz generada con la ubicación de los tres vectores, el juego debe empezar de tal
forma que empiece a mostrar mensajes al jugador para que inicie la selección de donde va a
realizar el disparo, cada que un disparo se dé el programa va a mostrar una matriz diferente a la
inicial indicando cual fue la posición que selecciono el jugado para disparar y a que le dio en esa
posición, ya sea a alguno de los tres barcos o al agua, con ello se garantiza que el jugador vaya
llevando el control de sus disparos para seguir buscando darle a algún barco.
Cada que el juego indique la selección de las coordenadas para el disparo o en este caso el turno
Todo ello para que garantizar que el juego termina cuando el jugador decida retirarse o cuando se
hundan los tres barcos; es decir, cuando se logre disparar en todas las posiciones de cada barco.
disparos realizados para que el jugador se vaya enterando de que está pasando o que se ha
logrado en el juego, claro y por supuesto como todo juego se obtendrán puntos por aciertos y se
3
Diagrama de flujo de la solución de problema.
JUEGO BATALLA
NAVAL
5
contador_total=0; % contador total inicializado en cero.
contador_disparos=0;
En esta parte del código se establecen todos los contadores que se van a utilizar en el
desarrollo del código y se inicializan en cero para que no vayan a generar datos erróneos.
6
Se genera un número aleatorio entre 0 y 1 el cual va a definir como se ubicaran las naves
en la matriz.
7
condicional ejecuta el else en el cual se genera los tres números de (f1, f2 y f3) con un
rango menor y diferente para que no vayan a coincidir en ningún momento, como esta
opción es la que menos se puede dar por eso se estableció de esa forma.
Con este condicional se garantiza que en ningún momento las tres naves vayan a quedar en
la misma fila y ninguna encima de la otra de forma horizontal.
8
cada posición del vector porta aviones el número 5, a cada posición del acorazado el
número 4 y a cada posición de la lancha el número 3.
De lo contrario si los tres números no son diferente si no que alguno se repite entonces el
condicional ejecuta el else en el cual se genera los tres números de (c1, c2 y c3) con un
rango menor y diferente para que no vayan a coincidir en ningún momento, como esta
opción es la que menos se puede dar por eso se estableció de esa forma.
Con este condicional se garantiza que en ningún momento las tres naves vayan a quedar en
la misma columna y ninguna encima de la otra de forma vertical.
fprintf('\nREALIZAR DISPAROS\n');
fprintf('\nDesea RENDIRSE o CONTINUAR?\n');
continuar=input('Continuar = 1 o Rendirse = 0: ');
switch continuar
case 1 % si se selecciona la opción de continuar se ejecuta el caso 1 el
cual es el desarrollo del juego.
fila=input('\nSeleccione fila: '); % pide al jugador que ingrese la
posición de la fila de la matriz donde desea disparar.
columna=input('Seleccione columna: '); % pide al jugador que ingrese la
posición de la columna de la matriz donde desea disparar.
clc % limpia la pantalla.
fprintf('JUEGO BATALLA NAVAL.\n');
contador_disparos=contador_disparos+1;
Para el inicio del juego esta parte del código se desarrolla dentro de un bucle for el cual
también de forma anidada está compuesto por una sentencia de control switch-case y
varios condicionales if, lo cual se irá describiendo con más detalle más adelante.
Para este parte del código como se muestra se estable un bucle for, este va de 1 a 100 lo
cual define la cantidad de disparos máximos o la cantidad de veces máxima que se
ejecutaría el código, el cual se estableció hasta 100 ya que como se sabe la matriz de ceros
es de 10x10 lo cual permite en este caso 100 disparos para completarla.
Después se muestra por pantalla al jugador si desea continuar en el juego o desea rendirse.
Para la opción de continuar o rendirse, estas se incorporan por medio de un condicional
múltiple switch, si se selecciona continuar el usuario ingresa por teclado un 1 el cual
corresponde al case 1 del condicional múltiple switch el cual le pide al jugador que
seleccione la fila y luego la columna de la matriz donde desea hacer el disparo y además se
realiza un conteo de los disparos que se van realizando y cargando al contador asignado.
9
existe un 5, realiza esta condición.
M1(fila,columna)=5; % carga en la matriz de disparos realizados, en la
posición donde el jugador disparo el valor de 5.
fprintf('\nTABLERO DE DISPAROS REALIZADOS\n');
disp(' ')
disp(M1) % muestra en la matriz de disparos realizados el valor de 5 en
la posición donde ya se hizo el disparo.
fprintf('Le dio al Porta Aviones\n');
contador_porta_aviones=contador_porta_aviones+5; % contador de puntos por
disparo para el portaviones con incrementos de 5 en 5.
10
cuales también corresponde a los puntos por acierto a esta nave.
Dentro de este mismo condicional se encuentra otro condicional anidado el cual se ejecuta
cuando se compara el valor de disparos acertados definidos con el contador del acorazado,
cuando este valor sea igual a 16 lo cual corresponde a las 4 casillas de la nave muestra por
pantalla que esa nave fue hundida.
else
M1(fila,columna)="x"; % sin ninguna de las condiciones anteriores se
cumple es porque el disparo fue en punto de la matriz donde no había
ningún barco (cero), y carga un valor diferente de un numero.
fprintf('\nTABLERO DE DISPAROS REALIZADOS\n');
disp(' ')
disp(M1) % muestra la matriz de disparos con el valor cargado en esa
posición donde se realizo el disparo el cual corresponde a un disparo al
agua.
fprintf('El disparo dio en el Agua\n')
end
end
end
11
contador_total=contador_porta_aviones+contador_acorazado+contador_lancha;
% contador total para el puntaje total de todos los barcos.
Continuando con el código que hace parte del case 1, se tiene lo siguiente:
Condicional else para los disparos al agua.
Si la fila y columna seleccionadas por el jugador no se encuentra ninguna de las tres naves,
en este caso cero, se le carga a esa posición un carácter el cual ocasiona que muestre en la
matriz (M1) NaN lo cual indica que allí no había nada y muestra el mensaje por pantalla
diciéndola al jugador que su disparo dio en el agua.
Por fuera de los condicionales ya descritos pero dentro del case 1 se encuentra el contador
definido como contador total el cual realiza la sumatoria de los contadores de aciertos para
cada nave el cual almacena el valor del puntaje total de aciertos.
Además del código anterior en el case 0 se evalúan los siguientes condicionales anidados
que se va a ir explicando.
12
disp(' ')
disp(M1) % muestra la matriz al terminar el juego con todos los disparos
que fueron realizados.
fprintf('\nCantidad de disparos realizados: %i',contador_disparos)
fprintf('\nLogro hundir el Porta Aviones.')
fprintf('\nSu puntuación final fue: %i',contador_total)
end
Este condicional se creó para que cuando se seleccione la rendición, muestre lo siguiente:
Si se cumple esta condición es porque continuar es igual a cero y por que el contador del
porta aviones es igual a 25, lo cual significa que se logro hundir el porta aviones, entonces
muestra lo siguiente por pantalla:
El jugador acaba de rendirse.
La matriz (M1) con las posiciones donde se hicieron los disparos.
El mensaje de que el porta aviones fue hundido.
Todos los disparos realizados y el puntaje logrado hasta ese instante del juego.
13
Si se cumple esta condición es porque continuar es igual a cero y por que el contador de la
lancha es igual a 9, lo cual significa que se logro hundir la lancha, entonces muestra lo
siguiente por pantalla:
El jugador acaba de rendirse.
La matriz (M1) con las posiciones donde se hicieron los disparos.
El mensaje de que la lancha fue hundida.
Todos los disparos realizados y el puntaje logrado hasta ese instante del juego.
if (continuar==0)&&(contador_porta_aviones==25)&&(contador_acorazado==16)
% condición para cuando se selecciona rendirse y se logro hundir el porta
aviones y el acorazado.
clc % limpia la pantalla.
fprintf('\nUSTED ACABA DE RENDIRSE.\n')
fprintf('\nOceano con los disparos realizados.\n')
disp(' ')
disp(M1) % muestra la matriz al terminar el juego con todos los disparos
que fueron realizados.
fprintf('\nCantidad de disparos realizados: %i',contador_disparos)
fprintf('\nLogro hundir el Porta Aviones y el Acorazado.')
fprintf('\nSu puntuación final fue: %i',contador_total)
end
Este condicional se creó para que cuando se seleccione la rendición, muestre lo siguiente:
Si se cumple esta condición es porque continuar es igual a cero, por que el contador del
porta aviones es igual a 25 y el contador del acorazado es igual a 16, lo cual significa que
se logro hundir el porta aviones y el acorazado, entonces muestra lo siguiente por pantalla:
El jugador acaba de rendirse.
La matriz (M1) con las posiciones donde se hicieron los disparos.
El mensaje de que el porta aviones y el acorazado fueron hundidos.
Todos los disparos realizados y el puntaje logrado hasta ese instante del juego.
if (continuar==0)&&(contador_porta_aviones==25)&&(contador_lancha==9) %
condición para cuando se selecciona rendirse y se logro hundir el porta
aviones y la lancha.
clc % limpia la pantalla.
fprintf('\nUSTED ACABA DE RENDIRSE.\n')
fprintf('\nOceano con los disparos realizados.\n')
disp(' ')
disp(M1) % muestra la matriz al terminar el juego con todos los disparos
que fueron realizados.
fprintf('\nCantidad de disparos realizados: %i',contador_disparos)
fprintf('\nLogro hundir el Porta Aviones y La Lancha.')
fprintf('\nSu puntuación final fue: %i',contador_total)
end
Este condicional se creó para que cuando se seleccione la rendición, muestre lo siguiente:
Si se cumple esta condición es porque continuar es igual a cero, por que el contador del
porta aviones es igual a 25 y el contador de la lancha es igual a 9, lo cual significa que se
logro hundir el porta aviones y la lancha, entonces muestra lo siguiente por pantalla:
El jugador acaba de rendirse.
La matriz (M1) con las posiciones donde se hicieron los disparos.
14
El mensaje de que el porta aviones y la lancha fueron hundidos.
Todos los disparos realizados y el puntaje logrado hasta ese instante del juego.
if (continuar==0)&&(contador_acorazado==16)&&(contador_lancha==9) %
condición para cuando se selecciona rendirse y se logro hundir el
acorazado y la lancha.
clc % limpia la pantalla.
fprintf('\nUSTED ACABA DE RENDIRSE.\n')
fprintf('\nOceano con los disparos realizados.\n')
disp(' ')
disp(M1) % muestra la matriz al terminar el juego con todos los disparos
que fueron realizados.
fprintf('\nCantidad de disparos realizados: %i',contador_disparos)
fprintf('\nLogro hundir el Acorazado y La Lancha.')
fprintf('\nSu puntuación final fue: %i',contador_total)
end
15
que fueron realizados.
fprintf('Todos los barcos fueron hundidos.\n')
fprintf('\nLos barcos hundidos fueron:\n')
fprintf('Porta Aviones.\n')
fprintf('Acorazado.\n')
fprintf('Lancha.\n')
fprintf('\nCantidad de disparos realizados: %i',contador_disparos)
fprintf('\nLa puntación total es: %i',contador_total) % muestra el
acumulador total de la suma de todos los puntos de cada barco.
end
Esta parte del código es la parte final de todo el código y este caso del juego, como se
explico más atrás en una parte del código se creó un condicional el cual compara el valor
del contador total de la suma de los contadores de los aciertos a los tres barcos y cuando
este sea igual a 50 es porque los tres barcos fueron hundidos y el juego termina y muestra
los siguientes mensajes:
El juego ha terminado.
La matriz (M1) con las posiciones donde se realizaron los disparos.
Todos los barcos fueron hundidos.
El nombre de los barcos que fueron hundidos.
La cantidad de disparos realizados y la puntuación total del juego.
Esta pantalla es inicio del juego, como se observa le muestra al jugador si desea continuar
o rendirse.
16
Como se selecciono la opción 1 la cual corresponde a continuar en el juego
inmediatamente le pide al jugador que seleccione el numero de fila y luego el numero de la
columna donde desea disparar.
Como se observa la matriz (M) de ceros donde se ubican las naves aleatoriamente en
ningún momento se le muestra al jugador, con lo cual no sabe como quedo la ubicación de
las naves.
17
Como se observa el jugador sigue en el juego y realizo el segundo disparo, el cual como se
observa se marco en el tablero de disparos y saco el mensaje que dio en el agua.
18
Como se observa el jugador continuo en el juego y realizo otro disparo el cual también dio
en el agua.
Continuare realizando disparos hasta empezar a identificar alguna nave.
19
En este disparo se logro dar al acorazado, en el tablero de disparos se marca en este caso
con el 4 el cual también corresponde a los puntos asignados por darle a esa nave y muestra
el mensaje que le dio al acorazado.
20
Como se observa en el otro disparo se le dio a la lancha, esta es marcada en el tablero de
disparos y se le asigna el valor de 3 el cual también corresponde a los puntos aginados para
esta nave y se muestra el valor de que le dio a la lancha.
21
Se observa que se logro hundir la lancha por completo y se muestra el mensaje de que la
acabo de hundir.
Se continuara juagando para identificar las naves faltantes y terminar el juego.
22
Se continuaron realizando disparos para terminar de hundir al acorazado, se muestra el
tablero de disparos y el mensaje de que el acorazado fue hundido.
23
Se continuaron realizando varios disparos los cuales dieron en el agua hasta darle al porta
aviones, se muestra en el tablero de disparos con el numero 5 el cual es el valor asignado
para la puntuación para esta nave y se muestra el mensaje de que le dio al porta aviones.
24
Se continúa disparando hasta hundir el porta aviones, con lo cual el juego termino ya que
las tres naves fueron hundidas.
Se muestra por pantalla que el juego ha terminado, el tablero con todos los disparos que se
realizaron durante el juego, el mensaje de que todos los barcos fueron hundidos, cuales
barcos, la cantidad de disparos realizados y la puntuación total.
Ahora se va iniciar otro juego para realizar varios disparos y luego seleccionar la
rendición.
25
Se inicio este juego y se realizaron varios disparos en los cuales algunos dieron el agua y
en los otros se logro hundir el acorazado y la lancha, luego se selecciono la rendición del
juego.
El juego termino en ese punto y se muestran los resultados logrados hasta donde se juego.
26
En este otro juego se realizaron varios disparos los cuales se logro darle una vez al
acorazado y después se selecciono la rendición.
27
En este otro juego se realizaron varios disparos de los cuales todos dieron en el agua y se
selecciono la rendición.
Se muestran los resultados donde se evidencia donde dieron los disparos y el mensaje que
no hundió ninguna nava y tampoco se logro ninguna puntación.
28
Reglas generales del juego
Número de jugadores: 2 (mínimo y máximo).
No se repite el mismo tipo de barco en el juego, tienen que ser diferentes. (Un porta
Una vez se posicionan los barcos y comienzas la partida, no se podrá volver a cambiarlos
de posición.
Se podrá disparar en cualquier casilla de la matriz, salvo en las que ya has disparado.
La partida acaba solo cuando un jugador ha hundido la flota completa del enemigo o ha
El porta aviones representa 5 casillas en la matriz cada una con un equivalente de 5 puntos
La lancha representa 3 casillas en la matriz cada una con un equivalente de 3 puntos para
un total 9 puntos.
29
Conclusiones
Con el desarrollo de esta actividad se pudo profundizar en muchos conceptos de programación
como lo son las sentencias de control tales como los condicionales y los bucles repetitivos.
En el análisis y desarrollo del problema planteado el cual fue la construcción del juego se tuvo la
necesidad requerida.
Gracias a este trabajo se puede observar que la programación posee gran aplicabilidad en muchos
30
Bibliografía
Hahn, B. D., & Valentine, D. T. (2013). Essential MATLAB for Engineers and Scientists
(Vol. Fifth edition). Waltham, MA: Academic Press. Capítulo 6. Pág. 129-160.
Recuperado de http://bibliotecavirtual.unad.edu.co/login?
url=http://search.ebscohost.com/login.aspx?
direct=true&db=nlebk&AN=485981&lang=es&site=eds-live
de http://bibliotecavirtual.unad.edu.co:2077/lib/unadsp/reader.action?
ppg=1&docID=11059428&tm=1479848795401
de: http://hdl.handle.net/10596/10295
de http://www.mathworks.com/help/pdf_doc/matlab/getstart.pdf
Hunt Brian R. (2001), A guide to Matlab for beginners and experienced users. Cambridge
url=http://search.ebscohost.com/login.aspx?
direct=true&db=edshlc&AN=edshlc.009017307.4&lang=es&site=eds-live&scope=site
31