Está en la página 1de 13

SOFTWARE PARA INGENIERIA

UNIDAD 2 PASO 5

Presentado a:

Sandra Milena Garcia

Entregado por:

Naren Sneider Quiñones Hernández

Código:

203036ª-761

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA - UNAD


ESCUELA DE CIENCIAS BÁSICAS, INGENIERÍAS Y TECNOLOGÍAS
CURSO DE ECUACIONES DIFERENCIALES
FECHA
2020
Juego batalla naval
Descripción
Este juego de estrategia se basa en un tablero que representa el océano y uno
que representa el tablero de tiro, además de sus naves. Al comenzar cada jugador
posiciona sus barcos en el primer tablero, estos barcos se determinan por el
tamaño que ocupan en las casillas por ejemplo: cinco casillas consecutivas
conforman un portaaviones, cuatro un buque, tres un submarino y dos una lancha.
Desarrollo del juego
Una vez las naves estén en su lugar, se inicia una serie de rondas una por cada
jugador, estas rondas se representan en disparos, los cuales se marcan en el
tablero de disparos, hay dos tipos de fichas las cuales identifican los disparos
fallidos son de color blanco y las que representan el impacto son de color rojo. En
caso de que el barco reciba un impacto el afectado dirá impacto en caso de que
queden casillas que representen el barco, una vez estas casillas sean impactadas
por completo el afectado dirá hundido.
Fin del juego
El juego se finaliza hasta que los barcos sean hundido, o se puede tener un
empate en caso de que las fichas blancas se agoten y se tenga la misma cantidad
de naves en el tablero.
Desarrollo del juego en Matlab.
Creación del tablero.
Principalmente tomaremos una matriz multidimensional a ceros determinando un
número x de filas y un número y de columna, esto con el fin de plasmar el tablero
del juego en pantalla.
Descripción de cómo se mostrara el tablero.
Se mostrara al usuario las zonas del jugador como un a cadena caracteres, es
decir:

 Zona propia: Aparecen los barcos propios, estos en su buen estado estará
representado por el símbolo (#), en caso de que hayan recibido daño en
alguna parte del barco se representara con el símbolo (@), los disparos
serán vistos en pantalla como (*).
 Zona enemiga: Aparecen únicamente las casillas las cuales el usuario ha
disparado (*), de igual forma en caso de daño algún barco enemigo se verá
reflejado con (@).
Método de distribuir Barcos.

 Principalmente el usuario tiene la opción de poner los barcos de forma


horizontal o vertical.
 El barco debe ser ingresado dentro de la matriz.
 Un barco no puede ser colocado de manera adyacente a otro barco
colocado anteriormente, para eso se crea una variable el cual situarbarco
que recibe como parámetro el tablero sobre el que se requiere situar el
barco, el tipo de barco, la fila y la columna. Devolverá un dato de tipo
boolean que indicara si la situación del barco es válida o no. En caso de no
serlo, se ejecutaran de nuevo los métodos explicados arriba para indicar
valores adecuados de tipo de barco fila y columna.

Método de disparo.

 Para realizar el disparo, el usuario deberá elegir la fila (1-10), columna


(1-10). Los datos serán introducidos por el usuario desde el teclado.

o Si el disparo no se efectúa, se indica “AGUA”


o Si el disparo se efectúa en un barco, se indica “DAÑO”
o Si el disparo termina por eliminar al barco se indica “HUNDIDO”
 Para lo anterior se creará el método de disparar que reciba como parámetro
el tablero del juego, devolverá una variable de tipo boolean para controlar si
es el final del juego en caso de ser así, se indica “EL DISPARO A
HUNDIDO EL ULTIMO BARCO”

ANALISIS DEL FIN DEL JUEGO

 El sistema analiza periódicamente hasta determinar que no queden barcos


en alguna de las dos matrices.

o Si es así el sistema indica el ganador y tan bien muestra los disparos


totales generados, nombres de los barcos hundidos y la puntuación
acumulada en el juego.
o De lo contrario si no se hunde al último barco se continuara con el
juego, se indicaran las zonas de tablero del oponente y se
seleccionara las coordenadas de su siguiente disparo.
m = input('ingrese el orden de la
matriz:(m x m)');%Se solicita al
usuario ingresar el rango de la
matriz%
x = input ('ingrese el numero
Usaría estos elementos los cuales
minimo de la matriz:');% Se
solicita al usuario un valor codiciaría con el fin de poder
minimo para la matriz% implementarlos en el juego de batalla
y = input ('ingrese el numero
maximo de la matriz:');% Se naval.
solicita al usuario un valor 1. Generar la matriz la cual sería el
maximo para la matriz% campo de batalla.
R = randi([x,y],m,m); %funcion
para obtener matrices de numeros 2. En poder definir las
aleatorios enteros% coordenadas de disparo.
disp ('matriz generada')%Mensaje
en pantalla%
disp (R) %Se muestra la matriz
solicitda por el usuario%

if V_rep == 1%Variable condicional


%
disp("El valor "+dat_busc+" no
se repie.");%Se muestra en Usaría estas condicionales las cuales
pantalla el mensaje, en caso que indicarían si el disparo fue efectuado o
no se repita%
por el contrario callo en el agua.
else %Variable condicional%
disp("El valor "+dat_busc+"
se repite "+V_rep+" veces en las
coordenadas:");%muestra en
pantalla las las coordenadas donde
el numero se repite%

for o = 1:V_rep
%Se notifica al usuario si
desea cambiar las coordenadas del
numero repetido%
disp("¿Desea modificar
Esta información con su respectiva
las coordenadas? para aceptar
digite la letra (s) de lo modificación la usaría para informar al
contrario digite la letra (n) (" usuario, si el disparo que genero ya lo
+Pf (o)+"," + Pc (o)+ ") s | n
" ); hizo anteriormente con el fin de poder
%Se muesta en pantalla ejecutar un disparo distinto.
la opción seleccionada%
Modific = input
('respuesta: ','s');
INICIO

de dispar

Matriz m []

Matriz m 8*8

M ([], 8)

Se indica al
usuario la
coordenada
de disparo

Ingrese un X= fila
número dentro ingresada
del rango.

Número(x) dentro del


NO SI
rango (x>=1&&x<=8) &&

Digite la columna
a disparar.

Ingrese un
Y= Columna
número dentro
ingresada.
del rango.

Número (y) dentro de


NO rango (>=1&&x<=8) &&
SI

Disparos =+1

Si
NO disparos==40 SI
fin del juego

If
SI NO
M(x,y)==0

Disp.(disparo al Elseif
agua)
M(x,y)==barco

M[x,y]=8

Disp. (“impacto”)
Fallos=+1

M[x,y]=7
Disp.(m)
M[x,y]=10

Aciertos=+1

¡¡¡Ganaste!!! Derribaste el ¿Ganaste? NO


SI
último barco.

¿Lancha
Disp.(Disparos) P_Lancha= Disp. (“lancha Si derribada?
5 derribada”)
Disp.(Fallos)

Disp.(Aciertos) ¿Acorazado
Disp. (“Acorazado Si
Disp. P_Ac=10 derribado?
derribado”)
(puntos”Acertados+P_Lancha+
p_Acorazado+p_Aviones”)
¿Porta
Disp. Si aviones
P_Porta Aviones=15 (“Portaaviones derrbado?
derribado.”)

Código fuente.
clear;
clc;
dim=8; %se define el area de la matriz%
tla=3; %dimencion de la lancha%
tac=4; %tamaño del acorazado%
tpa=5; %tamaño porta avion%
%se define las variables de NO afectacción de las navez%
laup=1; %lancha no derribada%
acup=1; %acorasado no derribado%
paup=1; %pota aviones no derrivado %
play=1; %bariable de seguir jugando%
ren=90;%se define el numero 90 para finalizar el juego%
%variables de contador del juego%
disparos=0; aciertos=0; fallos=0; rep=0;
puntos=0; ladn=0; acdn=0; padn=0; %conteo de puntos cuando se derriben
las naves%
contadorprueba=0;

m=zeros(dim,dim);%matriz en ceros%
M=zeros(dim,dim); %matriz con las naves%
%se define el codigo para adaptar las naves en la matriz%
v=randi([1,dim],1);%el sistema busca la columna donde se ubicara la nave
%
c=randi([1,dim-tpa+1],1);

for i=0:tpa-1; %posteriormente según la posición escogida inicia desde


laposición 0%
M(c+i,v)=tpa; %se acopla las 5 casillas acorde a la ubicación de la
nave%
end
%se asigna la siguente nave%
h=randi([1,dim]); %se ubica en una fila de forma aleatoria para la nave%
if v<=4 %el porta aviones se uvica de manera orizontal %
s=randi([v+1,dim+1-tac]); %posición inicial de la nave%
elseif v >= 7
s=randi([1,v-tac]);
elseif v > 4 && v < 7

s=randi([v+1,dim+1-tac]);
end
for i=0:tac-1
M(h,s+i)=tac;
end

%se asigna la siguente nave%


nn=1;
while nn==1
fi=randi([1,dim]);
end
if fi ~= h %fila donde se ubica la nave%
nn=0;
end
if v<=4 %se uvica la nave de manera orizontal%
z=randi([v+1,dim+1-tla]);%posiocion inicial de la nave%

elseif v >= 7
z=randi([1,v-tla]);
elseif v >4 && v < 7
z=randi([1,v-tla]);
end

for i=0:tla-1
M(fi,z+1)=tla;
end
disp(M);

%Que inicie el juego%

fprintf("Ingrese el numero en el cual deseas rendirte \n")


fprintf("debe ser diferente al rango de la matriz \n")
fprintf("n! =[1,"+dim+"] \n")
ren=input("Numero para rendirte: ");

while ren >=1 && ren <=dim


ren=input("El numero debe ser distinto alde la matriz. \n");
end

while play==1
fprintf("\n")
x=input("¿te rindes?\n entonses preciona: "+ren+"\nfila a
disparar.\n");
end
while x~=ren && x<1 || x~=ren && x>10
x=input("ingreswe la fila de disparo:");
end
%rendirse%

if x==ren
fprintf("\n")%linea en blanco %
disp("te rendiste");
play=0;
end
if play==0 %si el usuario no se rinde, el juego continua%
else %el juego continua%
end
y=input("columnaa disparar");%el usuario elige una columna a disparar
%
while y~=ren &&y<1 || y~=ren && y>10 %la columna elegida debe estar
en las cordenadas de la matriz%
y=input ("ingrese la columna de disparo");
end
%rendirse%
if y==ren
fprintf("\n")
disp("te rendiste");
play=0;
else
fprintf("\n")
disp(m);
%disparos realizados%
for i=1:1
disparos=disparos+1;
end
end
tiro=M(x,y);

%conteo de disparos%
%disparos fallidos%
if tiro==0
disp("disparo al agua");
m(x,y)= x;
disp(m);
for i=1:1
fallados=fallados+1; %contador de disparos fallados%

end

%disparos repetidos%

elseif tiro==10
fprintf("ya diste estas cordenadas antes")
for i=1:1
rep=rep+1;%contador de diaparos repetidos%
end

else
M(x,y)=10;
disp("has impactado una nave");
m(x,y)=1;
disp(m);

%contador de Aciertos%
for i=1:1
aciertos=aciertos+1;
end

end

%Lancha derrbada%
if laup== 1
[j,i]=find(M==tla);
[lancha,o]=size(j);

if lancha==0

disp("Derribaste una nave");


disp(" ganaste 5 puntos");
ladn=5;%puntaje obtenido por derribar la nave%
laup=0;%puntaje obtenido por no rerribar a la nave%
end
end
%acorazado derribado%
if acup == 1
[j,i]=find(M==tac);
[acorazado,o]=size(j);

if acorazado==0
disp("derribaste acorazado");
disp("10 puntos adicionales");
acdn=10;
acup=0;
end

end
%porta aviones derribados%

if paup == 1
[j,i]=find(M==tpa);
[portaviones,o]=size(j);

if portaviones==0
disp("derribaste un porta aviones");
disp("15 puntos adicionales");
padn=5;
paup=0;
end
disp("")

end
%cuando derribe a todas las naves%
if laup == 0 && acup ==0 && paup == 0
play=0;
fprintf("\n")
fprintf(" felicitaciones\n");
end

%puntuaciones%
fprintf ("\n")
puntos=land+acdn+padn+aciertos;
disp("disparos acertados:..."+aciertos)%muestra en pantalla el total%
disp("disparos fallados:..."+fallos)
disp("disparos repetidos:..."+rep)
disp("disparos realizados:..."+disparos)
disp("puntos obtenidos:..."+puntos)

%nonbrar barcos derribados%


fprintf("barcos derrbados:...");
if laup==1 && acup==1 && paup ==1
fprintf("no derribaste ningun barco\n");
end

if laup==0
fprintf("lancha,");

end

if acup==0
fprintf("acorazado,");
end
if paup==0
fprintf("portaaviones\n");
end

Conclusión
 
En conclusión vemos que Matlab nos sirve de mucho El cual contiene diferentes
comandos con los cuales podemos realizar diferentes funciones. Habiendo utilizar los
comandos adecuados, pudimos aprender a modelar de una manera práctica y clara la
función de transferencia de cualquier sistema. he aprendieron algunas herramientas en
Matlab para utilizarlas en los intervalos de la gráfica. He aprendió en esta práctica a
graficar tres funciones en una sola gráfica, con sus intervalos, puntos de la función. La
importancia de esta práctica, es que además de anexar una lista de comandos en un
lenguaje de instrucciones se busca en general el entendimiento del proceso, las funciones
que ejercen los comandos introducidos por el usuario, tienen una función determinada, lo
que se busca es facilitar estos procesos que requieren que se resuelvan a papel y lápiz,
pero con solo entender lo que se necesita realizar, podemos lograr estos cálculos
utilizando de manera esencial la herramienta de programar.

Referencias bibliográficas
 Machuca maría (2019) Abaut Español, Battleship (Batalla naval) recuperado
de https://www.aboutespanol.com/battleship-batalla-naval-2077614
 Hahn, B. D., & Valentine, D. T. (2013). Essential MATLAB for Engineers and
Scientists (Vol. Fifth edition). Waltham, MA: Academic Press. Capítulo 5.
Pág. 111-129. 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
 Balbi, D.(27 de 08 de 2018). Batallanaval [archivo video]. Obtenido de
https://www.youtube.com/watch?v=LNAHYhup33s

También podría gustarte