Está en la página 1de 31

Unidad 3 - Arreglos y manejo de gráficos.

Paso 6 – Construcción colaborativa.

Estudiante

Carlos Alberto Betancur Cano

Luis David Giraldo López

Grupo: 97

Docente

Paola Andrea Buitrago.

Curso

203036 – Software para ingeniería.

Universidad Nacional Abierta y a Distancia UNAD

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

aleatoria de tres vectores en una matriz de ceros cuadrada de 10x10.

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

matriz se mostrara al usuario o jugador.

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

de disparar, también se proporcionara la opción de seguir en el juego o rendirse.

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.

En transcurso del juego se estarán mostrando mensajes además de un tablero o matriz de

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

mostrara siempre al final cuales fueron los resultados obtenidos.

3
Diagrama de flujo de la solución de problema.
JUEGO BATALLA
NAVAL

EN ESTA PARTE SE GENERA LA


MATRIZ DE CEROS (10X10)
MATRIZ (OCEANO).

EN ESTA PARTE SE GENERAN LAS TRES NAVES, SE REALIZA EL


UBICACIÓN ALEATORIA DE LOS PROCESO PARA HUBICARLAS DE FORMA HORIZONTAL O4VERTICAL. SE
TRES VECTORES (PORTA AVIONES,
GENERAN LOS CODIGOS PARA GARANTIZAR QUE CUANDO SE UBIQUEN
ACORAZADO Y LANCHA) EN LA MATRIZ NO VAYAN A QUEDAR POR FUERA O ALGUNA ENCIMA DE
OTRA.
INICIA EL JUEGO. EL PROGRAMA PIDE AL DESARROLLO DEL CODIGO DEL JUEGO
JUGADOR SI DESEA CONTINUAR O
RENDIRSE

ESTABLECE LA OPCIÓN DE CONTINUAR EN EL JUEGO


CONTINUARNUAR = 1 O RENDIRSE.
RENDIRSE = 0

CONTINUAR CUANDO SE SELECCIONA LA


OPCIÓN RENDIRSE, EL
CODIGO NO CONTINUA EL
DETERMINA LA FILA Y LA COLUMNA CICLO DONDE SE VA
REALIZAR DISPARO. DESARROLLANDO EL JUEGO
INGRESAR FILA Y COLUMNA DONDE EL JUGADOR DESEA
REALIZAR EL DISPARO. SINO QUE LO TERMINA Y
MUESTRA LOS RESULTADOS
ESTA SECUENCIA SE REALIZA
QUE SE HAYAN LOGRADO
DE MANERA CONTINUA HASTA
HASTA ESE PUNTO DEL
QUE SE HAYA HUNDIDO LA
PROCESA LA INFORMACIÓN DE ENTRADA. LA JUEGO.
FLOTA COMPLETA DEL
PUNTUACIÓN VA SUMANDO EN ACOMULADORES,
ENEMIGO O HASTA QUE
DEPENDIENDO DEL BARCO AL QUE HA ACERTADO.
TODOS LOS DISPAROS SE
HAYAN CUMPLIDO EN LA RENDIRSE
MATRIZ.
MUESTRA MATRIZ DE
DISPAROS REALIZADOS

VA ACTUALIZANDO EL TABLERO DE DISPAROS


PARA IR INDICANDO AL JUGADOR DONDE SE
HA DISPARADO, CON LOS DISPAROS AL AGUA
INDICA AL JUGADOR DONDE DIO EL DISPARO
Y LOS ACIERTOS EN LAS NAVES.

CUANDO LAS TRES NAVES SON SI TODOS LOS BARCOS SON


HUNDIDAS EL BUCLE TERMINA. HUNDIDOS INDICA LA CANTIDAD DE DISPAROS
REALIZADOS, EL TIPO DE BARCOS QUE
HAYA LOGRADO HUNDIR Y LA CANTIDAD
DE PUNTOS LOGRADOS HASTA ESA
INDICA QUE EL JUEGO HA TERMINADO. PARTE DEL JUEGO AL RENDIRSE.
Código fuente
INDICA deEL FINAL
AL JUGADOR la solución del problema.
INDICA LA CANTIDAD DE DISPAROS HECHOS.
DEL JUEGO, REFLEJANDO EN INDICA QUE EL JUGADOR SE
EL TABLERO LOS RESULTADOS Código
NOMBRE – Batalla
DE LOS BARCOS Naval
HUNDIDOS.
PUNTOS LOGRADOS. HA RENDIDO CON LOS
Inicialización
OBTENIDOS. de contadores. RESULTADOS OBTENIDOS.

clear all; FIN DEL JUEGO


clc;
% INICIALIZACION DE CONTADORES.
contador_porta_aviones=0; % contador para el porta aviones inicializado
en cero.
contador_acorazado=0; % contador para el acorazado inicializado en cero.
contador_lancha=0; % contador para la lancha inicializado en cero.

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.

Generación de matrices y vectores (Naves).


% GENERACION DE MATRICES Y VECTORES (NAVES).
M=zeros(10); % área del juego (matriz de 10x10 de ceros).
M1=zeros(10); % matriz de ceros de 10x10 con los disparos que se van
realizando.
x=randi(6); % genera un numero entre 1 a 6 para asegurar que el vector
(porta_aviones) no se salga de la matriz.
y=randi(7); % genera un numero entre 1 a 7 para asegurar que el vector
(acorazado) no se salga de la matriz.
z=randi(8); % genera un numero entre 1 a 8 para asegurar que el vector
(lancha) no se salga de la matriz.
porta_aviones=[x,x+1,x+2,x+3,x+4]; % vector de cinco posiciones
consecutivas.
acorazado=[y,y+1,y+2,y+3]; % vector de cuatro posiciones consecutivas.
lancha=[z,z+1,z+2]; % vector de tres posiciones consecutivas.
En esta parte se genera una matriz (M) de ceros de tamaño de 10x10, la cual va a
corresponder al océano donde se ubicaran las naves.
También se genera otra matriz de ceros (M1) la cual va a ser parte del tablero donde el
programa va ir marcando donde se han hecho los disparos para que el jugador lleve el
control de los lugares donde ha disparado.
Se crean tres variables (x, y, z), la variable x esta asignada al vector del porta aviones el
cual tiene un tamaño de 5 posiciones, esta variable x se le cargara un numero aleatoria
entre 1 a 6 y se cargara a cada posición del vector donde a ese valor generado se le suma
+1, +2, +3 y +4, como la matriz de ceros está definida de 10x10 con la suma de esos
valores al valor de x generado aleatoriamente se garantiza que el vector en ningún
momento se salga de la matriz de forma horizontal o vertical.
La variable y esta asignada al vector acorazado el cual tiene un tamaño de 4 posiciones,
esta variable y se le cargara un numero aleatoria entre 1 a 7 y se cargara a cada posición
del vector donde a ese valor generado se le suma +1, +2 y +3, como la matriz de ceros está
definida de 10x10 con la suma de esos valores al valor de y generado aleatoriamente se
garantiza que el vector en ningún momento se salga de la matriz de forma horizontal o
vertical.
La variable z esta asignada al vector lancha el cual tiene un tamaño de 3 posiciones, esta
variable z se le cargara un numero aleatoria entre 1 a 8 y se cargara a cada posición del
vector donde a ese valor generado se le suma +1 y +2, como la matriz de ceros está
definida de 10x10 con la suma de esos valores al valor de z generado aleatoriamente se
garantiza que el vector en ningún momento se salga de la matriz de forma horizontal o
vertical.

Orientación de las naves en la matriz.


orientacion=randi([0 1]); % ubica los vectores (naves) de forma
horizontal o vertical en la matriz.

6
Se genera un número aleatorio entre 0 y 1 el cual va a definir como se ubicaran las naves
en la matriz.

Ubicación de las naves de forma horizontal.


% UBICACION DE LAS NAVES DE FORMA HORIZONTAL Y VERTICAL ALEATORIA.
if orientacion==0 % ubica los vectores de forma horizontal.
for columna=1:1 % cantidad de veces que el vector aparece en la matriz.
f1=randi(10); % ubica al vector porta_aviones aleatoriamente en cualquier
fila de la matriz de ceros.
f2=randi(10); % ubica al vector acorazado aleatoriamente en cualquier
fila de la matriz de ceros.
f3=randi(10); % ubica al vector lancha aleatoriamente en cualquier fila
de la matriz de ceros.
% UBICACION DE LAS NAVES EN DIFERENTES FILAS.
% Con el siguiente condicional se garantiza que las naves no
% vayan a quedar una encima de otra.
if f1~=f2 && f1~=f3 && f2~=f3 % esta condición compara las filas
aleatorias generadas y si son diferentes se ubican las tres naves.
M(f1,porta_aviones)=5; % ubicación de forma aleatoria en cualquier
columna en la matriz de ceros el vector del porta aviones, y se le carga
un 5 a cada posición de vector.
M(f2,acorazado)=4; % ubicación de forma aleatoria en cualquier fila en la
matriz de ceros el vector del acorazado, y se le carga un 4 a cada
posición del vector.
M(f3,lancha)=3; % ubicación de forma aleatoria en cualquier fila en la
matriz de ceros el vector de la lancha, y se le carga un 3 a cada
posición del vector.
else % si la condición anterior no se cumple, entonces se generan los
siguientes números en los rangos definidos para ubicar las naves.
f1=randi(3);
f2=randi([4 6]);
f3=randi([7 10]);
M(f1,porta_aviones)=5;
M(f2,acorazado)=4;
M(f3,lancha)=3;
end
end
Si el número aleatorio da 0 se ejecuta el condicional el cual realiza lo siguiente:
Se implemento un bucle for para la columna de la matriz de 1 hasta 1 para que solo se
genere una vez cada nave, luego se crean tres variables (f1, f2 y f3) a las cuales se le
cargara un número aleatorio entre 1 y 10 (el tamaño de la matriz) para que las tres naves se
ubiquen aleatoriamente en cualquiera de las 10 filas de la matriz de ceros.
Después de que se generen estos tres datos se implementa un condicional if el cual define
lo siguiente:
Se comparan los tres números generados, si los tres números son diferentes se carga el
vector porta aviones, acorazo y lancha a las diferentes filas correspondientes a los valores
de (f1, f2 y f3) en la matiz de ceros, con su ubicación de cada columna ya definida
inicialmente con los valores también generados aleatoriamente de (x, y, z) y se le carga a
cada posición del vector porta aviones el número 5, a cada posición del acorazado el
numero 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

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.

Ubicación de las naves de forma vertical.


else % ubica los vectores de forma vertical.
for fila=1:1 % cantidad de veces que el vector aparece en la matriz.
c1=randi(10); % ubica al vector porta_aviones aleatoriamente en cualquier
columna de la matriz de ceros.
c2=randi(10); % ubica al vector acorazado aleatoriamente en cualquier
columna de la matriz de ceros.
c3=randi(10); % ubica al vector lancha aleatoriamente en cualquier
columna de la matriz de ceros.
% UBICACION DE LAS NAVES EN DIFERENTES COLUMNAS.
% Con el siguiente condicional se garantiza que las naves no
% vayan a quedar una encima de otra.
if c1~=c2 && c1~=c3 && c2~=c3 % esta condición compara las columnas
aleatorias generadas y si son diferentes se ubican las tres naves.
M(porta_aviones,c1)=5; % ubicación de forma aleatoria en cualquier fila
en la matriz de ceros el vector del porta aviones, y se le carga un 5 a
cada posición de vector.
M(acorazado,c2)=4; % ubicación de forma aleatoria en cualquier columna en
la matriz de ceros el vector del acorazado, y se le carga un 4 a cada
posición del vector.
M(lancha,c3)=3; % ubicación de forma aleatoria en cualquier fila en la
matriz de ceros el vector de la lancha, y se le carga un 3 a cada
posición del vector.
else % si la condición anterior no se cumple, entonces se generan los
siguientes números en los rangos definidos para ubicar las naves.
c1=randi(3);
c2=randi([4 6]);
c3=randi([7 10]);
M(porta_aviones,c1)=5;
M(acorazado,c2)=4;
M(lancha,c3)=3;
end
end
end
Si el número aleatorio da 1 se ejecuta el else del condicional el cual realiza lo siguiente:
Se implemento un bucle for para la fila de la matriz de 1 hasta 1 para que solo se genere
una vez cada nave, luego se crean tres variables (c1, c2 y c3) a las cuales se le cargara un
número aleatorio entre 1 y 10 (el tamaño de la matriz) para que las tres naves se ubiquen
aleatoriamente en cualquiera de las 10 columnas de la matriz de ceros.
Después de que se generen estos tres datos se implementa un condicional if el cual define
lo siguiente:
Se comparan los tres números generados, si los tres números son diferentes se carga el
vector porta aviones, acorazo y lancha a las diferentes columnas correspondientes a los
valores de (c1, c2 y c3) en la matiz de ceros, con su ubicación de cada fila ya definida
inicialmente con las valores también generados aleatoriamente de (x, y, z) y se le carga a

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.

Inicio del juego.


% INICIO DEL JUEGO Y DATOS DE ENTRADA Y SALIDA.
fprintf('INICIO DEL JUEGO BATALLA NAVAL.\n');

for a=1:100 %% cantidad de oportunidades que tiene para hacer disparos en


la matriz de 10x10

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.

Descripción de cada condicional anidado correspondiente al case 1.

if (M(fila,columna)==5) % si la posición que fue ingresada (disparo)

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.

if (contador_porta_aviones==25) % cuando se cumpla esta condición es


porque ya le dieron a todas las posiciones del porta aviones.
fprintf('Acaba de hundir el Porta Aviones\n');
end
Continuando con el código que hace parte del case 1, se tiene lo siguiente:
Condicional if para el porta aviones.
Este condicional se ejecuta cada que el valor de fila y columna ingresado por el jugador
donde disparo compara lo que haya en la matriz (M) y si en esa posición se encuentra un 5
correspondiente al porta aviones se ejecuta y le muestra por pantalla la matriz (M1) con el
5 cargado en esa posición la cual corresponde al tablero donde se va disparando y el
mensaje de que le acaba de dar al porta aviones, además de un contador para el porta
aviones de 5 en 5 los 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 porta
aviones, cuando este valor sea igual a 25 lo cual corresponde a las 5 casillas de la nave
muestra por pantalla que esa nave fue hundida.

else if (M(fila,columna)==4) % si la posición que fue ingresada (disparo)


existe un 4, realiza esta condición.
M1(fila,columna)=4; % carga en la matriz de disparos realizados, en la
posición donde el jugador disparo el valor de 4.
fprintf('\nTABLERO DE DISPAROS REALIZADOS\n');
disp(' ')
disp(M1) % muestra en la matriz de disparos realizados el valor de 4 en
la posición donde ya se hizo el disparo.
fprintf('Le dio al Acorazado\n');
contador_acorazado=contador_acorazado+4; % contador de puntos por disparo
para el acorazado con incrementos de 4 en 4.

if (contador_acorazado==16) % cuando se cumpla esta condición es porque


ya le dieron a todas las posiciones del acorazado.
fprintf('Acaba de hundir el Acorazado\n');
end
Continuando con el código que hace parte del case 1, se tiene lo siguiente:
Condicional elseif para el acorazado.
Este condicional se ejecuta cada que el valor de fila y columna ingresado por el jugador
donde disparo compara lo que haya en la matriz (M) y si en esa posición se encuentra un 4
correspondiente al acorazado se ejecuta y le muestra por pantalla la matriz (M1) con el 4
cargado en esa posición la cual corresponde al tablero donde se va disparando y el mensaje
de que le acaba de dar al acorazado, además de un contador para el acorazado de 4 en 4 los

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 if (M(fila,columna)==3) % si la posición que fue ingresada (disparo)


existe un 3, realiza esta condición.
M1(fila,columna)=3; % carga en la matriz de disparos realizados, en la
posición donde el jugador disparo el valor de 3.
fprintf('\nTABLERO DE DISPAROS REALIZADOS\n');
disp(' ')
disp(M1) % muestra en la matriz de disparos realizados el valor de 3 en
la posición donde ya se hizo el disparo.
fprintf('Le dio a la Lancha\n')
contador_lancha=contador_lancha+3; % contador de puntos por disparo para
la lancha con incrementos de 3 en 3.

if (contador_lancha==9) % cuando se cumpla esta condición es porque ya le


dieron a todas las posiciones de la lancha.
fprintf('Acaba de hundir la Lancha\n');
end
Continuando con el código que hace parte del case 1, se tiene lo siguiente:
Condicional elseif para la lancha.
Este condicional se ejecuta cada que el valor de fila y columna ingresado por el jugador
donde disparo compara lo que haya en la matriz (M) y si en esa posición se encuentra un 3
correspondiente a la lancha se ejecuta y le muestra por pantalla la matriz (M1) con el 3
cargado en esa posición la cual corresponde al tablero donde se va disparando y el mensaje
de que le acaba de dar a la lancha, además de un contador para la lancha de 3 en 3 los
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 de la lancha,
cuando este valor sea igual a 9 lo cual corresponde a las 3 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.

if (contador_total==50) % si esta condición se da el programa termina el


bucle (el juego) debido a los puntos asignados da la totalidad de todos
los barcos.
break % termina el bucle for (termina el juego).
end
Si el valor del contador total es igual al valor de 50 quiere decir que ya las tres naves
fueron hundidas, entonces esta condición se da el programa o bucle for termina con el
comando break dando así la terminación del juego.

case 0 % si se selecciona la opción rendirse se ejecuta el caso 0 y


muestra los siguientes resultados.
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('\nNo logro hundir ninguna nave.')
fprintf('\nSu puntuación final fue: %i',contador_total) % muestra el
contador total con el puntaje acumulado hasta ese momento del juego.
Si la opción de rendirse es seleccionada por el jugador entonces se ejecuta el case 0 el cual
muestra los siguientes mensajes por pantalla, si no fue hundido ningún barco en su
totalidad.
Que el jugador se acaba de rendir, muestra la matriz (M1) con las posiciones donde se
hicieron los disparos, el mensaje de que se hundió ningún barco, todos los disparos
realizados y el puntaje logrado hasta ese instante del juego.

Además del código anterior en el case 0 se evalúan los siguientes condicionales anidados
que se va a ir explicando.

if (continuar==0)&&(contador_porta_aviones==25) % condición para cuando


se selecciona rendirse y se logro hundir el porta aviones.
clc % limpia la pantalla.
fprintf('\nUSTED ACABA DE RENDIRSE.\n')
fprintf('\nOceano con los disparos realizados.\n')

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.

if (continuar==0)&&(contador_acorazado==16) % condición para cuando se


selecciona rendirse y se logro hundir 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 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 y por que el contador del
acorazado es igual a 16, lo cual significa que se logro hundir 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 acorazado fue hundido.
Todos los disparos realizados y el puntaje logrado hasta ese instante del juego.

if (continuar==0)&&(contador_lancha==9) % condición para cuando se


selecciona rendirse y se logro hundir 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 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:

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

break % termina el bucle for (termina el juego).


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
acorazado es igual a 16 y el contador de la lancha es igual a 9, lo cual significa que se
logro hundir el acorazado 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.
El mensaje de que el acorazado y la lancha fueron hundidos.
Todos los disparos realizados y el puntaje logrado hasta ese instante del juego.
Además por fuera de los condicionales ya descritos se encuentra el comando break el cual
hace parte del case 0 para que termine el bucle, en este caso termine el juego.

otherwise % si la opción seleccionada no es ni 1 ni 0 con esto se encarga


de que seleccione el valor correcto.
clc % limpia la pantalla.
fprintf('\nSelecciono un número equivocado.\n')
fprintf('Por favor seleccione la opción correcta.\n')
end
El otherwise se implementa en el switch para asegurar que la opción seleccionada sea 1 o
0, ya que si ingresa un valor diferente con esta condición se garantiza seleccionar el valor
adecuado.

Resultados mostrados por pantalla cuando el juego termina.


% RESULTADOS MOSTRADOS POR PANTALLA CUANDO TERMINA EL JUEGO.
if (contador_total==50) % si esta condición se da es porque fueron
hundidos todos los barcos y muestra los mensajes de terminación del juego
y los puntos totales.
clc % limpia la pantalla.
fprintf('\nEL JUEGO HA TERMINADO.\n')
fprintf('\nOceano con los disparos realizados.\n')
disp(' ')
disp(M1) % muestra la matriz al terminar el juego con todos los disparos

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.

Funcionamiento del código.

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.

Después de seleccionar el punto donde se disparo en este caso la fila 4 y la columna 2, se


muestra la matriz (M1), llamada tablero de disparos realizados donde se le va ir indicando
al jugador los puntos donde está disparando y además le avisa con el símbolo en la matriz
NaN y el mensaje diciéndole que el disparo dio en el agua.
El juego continua pidiendo al jugador si desea continuar o rendirse.

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.

Si por equivocación el jugador selecciono un número diferente entre 1 y 0 los cuales


corresponde a equivocarse, el programa le indica al jugador que se equivoco y la da la
opción de volverlo a intentar.
Si se selecciona la opción adecuada el juego continua su secuencia.

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).

 Número de barcos: 3 (mínimo y máximo).

 No se repite el mismo tipo de barco en el juego, tienen que ser diferentes. (Un porta

aviones, un acorazado y una lancha).

 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

hecho que este se rinda.

 No se puede deshacer disparos ni propios ni del oponente.

 Si por equivocación el jugador selecciono un número diferente a 1 y 0 (continuar o


rendirse), lo cual indica equivocarse, el programa le brida al jugador la opción de volverlo
a intentar.
 La puntuación se refleja de acuerdo al tipo de barco:

El porta aviones representa 5 casillas en la matriz cada una con un equivalente de 5 puntos

para un total 25 puntos.

El acorazado representa 4 casillas en la matriz cada una con un equivalente de 4 puntos

para un total 16 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

oportunidad de aplicar todos los conceptos de la programación para llegar a la solución de la

necesidad requerida.

Gracias a este trabajo se puede observar que la programación posee gran aplicabilidad en muchos

entorno tanto de vida diaria como lo es el entretenimiento y además es la base del

funcionamiento de los equipos electrónicos sistemas de control o computacionales los cuales se

utilizan hoy en día en muchas cosas como a nivel industrial.

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

 Gil, R. M. (2003). Introducción rápida a Matlab y Simulink para ciencia e ingeniería.

Madrid, ES: Ediciones Díaz de Santos. Capítulo 4. pág. 41-50. Recuperado

de http://bibliotecavirtual.unad.edu.co:2077/lib/unadsp/reader.action?

ppg=1&docID=11059428&tm=1479848795401

 Monroy, J. (2016). Fundamentos de Toolbox de Matlab. [Archivo de video] Recuperado

de: http://hdl.handle.net/10596/10295

 MathWorks. (2009). TheMathworks. Recuperado

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

University: Press. Recuperado de: http://bibliotecavirtual.unad.edu.co/login?

url=http://search.ebscohost.com/login.aspx?

direct=true&db=edshlc&AN=edshlc.009017307.4&lang=es&site=eds-live&scope=site

31

También podría gustarte