You are on page 1of 14

DAD

Prctica 8
Hundir la flota FASE 4: Instanciando un
objeto por cada jugador
Fco. Javier Vaquero y Rubn Snchez
13/12/2012

Profundizacin en el aprendizaje de la programacin Java instanciando varios objetos de una


clase.

TAREA 2
Tarea2.java:
package lab8;
import java.util.*;
public class Tarea2{
int[][] MAPABARCOS = {{0,0,0,0,0,0,0,0,0,0},
{0,1,0,0,1,0,0,0,0,0},
{0,1,0,1,0,1,0,1,1,0},
{0,1,0,0,0,0,0,0,0,0},
{0,1,0,0,0,0,0,0,0,0},
{0,1,0,1,0,0,1,1,1,1},
{0,1,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,1,0},
{0,1,0,0,0,0,0,0,1,1}};
int[][] MAPADISPAROS = {{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0}};
//inicializamos las matrices que posteriormente vamos a
//usar.
//Para mantener el orden hemos colocado las funciones de
//esta clase despus del mtodo main.

public static void main(String[] args){


Tarea2 juego1 = new Tarea2();
//Instanciamos una clase Tarea 2 con el nombre juego 1.
System.out.println("Las posiciones de los barcos son:");
juego1.mostrarArrayBidimensional(juego1.MAPABARCOS);
while(1>0){
//Bucle infinito que nos permite permanecer en el juego de
//forma indefinida, en el hemos establecido el desarrollo
//de la partida.
juego1.disparar(juego1.MAPABARCOS,juego1.MAPADISPAROS);
System.out.println("Los disparos realizados son:");
juego1.mostrarArrayBidimensional(juego1.MAPADISPAROS);
System.out.println();
//Llamamos a las funciones mostrarArrayBidimensional y
//disparar, ambas definidas dentro de la clase juego1, por
//eso accedemos utilizando una sintaxis diferente a la
//habitual.
}
}

void mostrarArrayBidimensional(int[][] mapa){


//MostrarArrayBidimensional nos muestra todos los elementos de la
//matriz de datos.
for(int i=0; i<mapa.length;i++){
System.out.print("
");
for(int j=0; j<mapa[i].length;j++)
System.out.print(mapa[i][j] + " ");
System.out.println("");
}
}
void disparar(int mapa1[][], int mapa2[][]){
//Disparar recibe dos mapas, un mapa donde anotar los disparos y otro
//donde comprobar si hay barco en el lugar donde hemos disparado o no.
int fil, col;
Scanner entrada= new Scanner(System.in);
System.out.print("Introduzca el nmero de fila (1-" +
(mapa1.length) + "): ");
fil=entrada.nextInt();
System.out.print("Introduzca el nmero de columna (1-" +
(mapa1[0].length) + "): ");
col=entrada.nextInt();
if(mapa1[fil-1][col-1]==1){
System.out.println(" El disparo ("+fil+","+col+
") cae en BARCO" );
mapa2[fil-1][col-1]= 2;
}
else{
System.out.println(" El disparo ("+fil+","+col+
") cae en AGUA" );
mapa2[fil-1][col-1]= 1;
}
}
}

TAREA 3
Tarea3.java:
package lab8;
import java.util.*;
public class Tarea3{
int[][] MapaBarcos, MapaDisparos;
public Tarea3(int[][] MapaBarcos, int[][] MapaDisparos){
//Constructor que se encarga de recibir los valores iniciales de ambas
//matrices de datos.
this.MapaBarcos = MapaBarcos;
this.MapaDisparos = MapaDisparos;
}
public static void main(String[] args){
//A diferencia de la clase anterior, ahora instanciamos los
//mapas en la clase main.
int [][] MapaBarcos = {{0,0,0,0,0,0,0,0,0,0},
{0,1,0,0,1,0,0,0,0,0},
{0,1,0,1,0,1,0,1,1,0},
{0,1,0,0,0,0,0,0,0,0},
{0,1,0,0,0,0,0,0,0,0},
{0,1,0,1,0,0,1,1,1,1},
{0,1,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,1,0},
{0,1,0,0,0,0,0,0,1,1}};
int [][] MapaDisparos = {{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0}};
Tarea3 batalla = new Tarea3(MapaBarcos,MapaDisparos);
//Instancia de la Clase tarea 3.
System.out.println("Las posiciones de los barcos son:");
batalla.mostrarArrayBidimensional(batalla.MapaBarcos);
while(1>0){
//Bucle infinito que nos permite permanecer en el juego de
//forma indefinida, en el hemos establecido el desarrollo
//de la partida.
batalla.disparar(batalla.MapaBarcos,
batalla.MapaDisparos);
System.out.println("Los disparos realizados son:");
batalla.mostrarArrayBidimensional
(batalla.MapaDisparos);
//Llamamos a las funciones mostrarArrayBidimensional
//y disparar, ambas definidas dentro de la clase
//juego1, por eso accedemos utilizando una sintaxis
//diferente a la habitual

System.out.println();
}
}
void mostrarArrayBidimensional(int[][] mapa){
//Disparar recibe dos mapas, un mapa donde anotar los
//disparos y otro donde comprobar si hay barco en el lugar
//donde hemos disparado o no.
for(int i=0; i<mapa.length;i++){
System.out.print("
");
for(int j=0; j<mapa[i].length;j++)
System.out.print(mapa[i][j] + " ");
System.out.println("");
}
}
void disparar(int mapa1[][], int mapa2[][]){
//MostrarArrayBidimensional nos muestra todos los elementos de la
//matriz de datos.
int fil, col;
Scanner entrada= new Scanner(System.in);
System.out.print("Introduzca el nmero de fila (1-" +
(mapa1.length) + "): ");
fil=entrada.nextInt();
System.out.print("Introduzca el nmero de columna (1-" +
(mapa1[0].length) + "): ");
col=entrada.nextInt();
if(mapa1[fil-1][col-1]==1){
System.out.println(" El disparo ("+fil+","+col+
") cae en BARCO" );
mapa2[fil-1][col-1]= 2;
}
else{
System.out.println(" El disparo ("+fil+","+col+
") cae en AGUA" );
mapa2[fil-1][col-1]= 1;
}
}
}

TAREA 4
Tarea4.java:
package lab8;
import java.util.*;
public class Tarea4{
int[][] MapaBarcos, MapaDisparos;
public Tarea4(int[][] MapaBarcos){
this.MapaBarcos = MapaBarcos;
this.MapaDisparos = new int[][] {{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0}};
//mantenemos la instanciacin de los mapas en la clase.
//inicializamos en el propio constructor la matriz MapaDisparos
//para abreviar ya que tiene que inicializarse a cero en todos
//los casos
}
public static void main(String[] args){
int [][] MapaBarcos1 = {{1,1,1,1,1,1,0,0,0,0},
{0,0,0,0,0,0,0,1,1,1},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,1,0,0,0},
{1,1,1,1,1,0,1,0,0,0},
{0,0,0,0,0,0,1,0,1,1},
{1,0,0,0,0,0,1,0,0,0},
{0,0,0,0,0,0,0,0,0,0}};
int [][] MapaBarcos2 = {{0,1,0,0,0,0,0,1,0,0},
{0,1,0,0,0,0,0,0,0,0},
{0,1,0,0,0,0,0,0,0,0},
{0,0,0,1,0,1,1,1,1,0},
{0,0,0,1,0,0,0,0,0,0},
{0,0,0,1,0,0,0,0,0,0},
{1,1,0,1,0,0,0,0,0,0},
{0,0,0,1,0,1,1,1,1,1},
{0,0,0,1,0,0,0,0,0,0}};
Tarea4 jug1 = new Tarea4(MapaBarcos1);
Tarea4 jug2 = new Tarea4(MapaBarcos2);
//Al haber dos jugadores instanciamos por separado las
//variables y mtodos de cada uno.
System.out.println
("Las posiciones de los barcos del JUGADOR 1: ");
jug1.mostrarArrayBidimensional(jug1.MapaBarcos);
System.out.println("\n");
System.out.println

("Las posiciones de los barcos del JUGADOR 2: ");


jug2.mostrarArrayBidimensional(jug2.MapaBarcos);
while(1>0){
//Modificamos el bucle while para que tenga en cuenta el
//juego de ambos jugadores, tomando la precaucin de que
//los jugadores no disparen en sus mapas sino en los del
//contrincante.
System.out.println("TURNO DEL JUGADOR 1");
jug1.disparar(jug2.MapaBarcos,jug1.MapaDisparos);
System.out.println
("Los disparos realizados por el JUGADOR 1" +
" son:");
jug1.mostrarArrayBidimensional(jug1.MapaDisparos);
System.out.println("\n");
System.out.println("TURNO DEL JUGADOR 2");
jug2.disparar(jug1.MapaBarcos,jug2.MapaDisparos);
System.out.println
("Los disparos realizados por el JUGADOR 2" +
" son:");
jug2.mostrarArrayBidimensional(jug2.MapaDisparos);
System.out.println();
}
}
void mostrarArrayBidimensional(int[][] mapa){
for(int i=0; i<mapa.length;i++){
System.out.print("
");
for(int j=0; j<mapa[i].length;j++)
System.out.print(mapa[i][j] + " ");
System.out.println("");
}
}
void disparar(int mapa1[][], int mapa2[][]){
int fil, col;
Scanner entrada= new Scanner(System.in);
System.out.print("Introduzca el nmero de fila (1-" +
(mapa1.length) + "): ");
fil=entrada.nextInt();
System.out.print("Introduzca el nmero de columna (1-" +
(mapa1[0].length) + "): ");
col=entrada.nextInt();
if(mapa1[fil-1][col-1]==1){
System.out.println(" El disparo ("+fil+","+col+
") cae en BARCO" );
mapa2[fil-1][col-1]= 2;
}
else{
System.out.println(" El disparo ("+fil+","+col+
") cae en AGUA" );
mapa2[fil-1][col-1]= 1;
}
}
}

TAREA 5
Tarea5.java:
package lab8;
import java.util.*;
public class Tarea5{
public static void main(String[] args){
int [][] MapaBarcos1 = {{1,1,1,1,1,1,0,0,0,0},
{0,0,0,0,0,0,0,1,1,1},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,1,0,0,0},
{1,1,1,1,1,0,1,0,0,0},
{0,0,0,0,0,0,1,0,1,1},
{1,0,0,0,0,0,1,0,0,0},
{0,0,0,0,0,0,0,0,0,0}};
int [][] MapaBarcos2 = {{0,1,0,0,0,0,0,1,0,0},
{0,1,0,0,0,0,0,0,0,0},
{0,1,0,0,0,0,0,0,0,0},
{0,0,0,1,0,1,1,1,1,0},
{0,0,0,1,0,0,0,0,0,0},
{0,0,0,1,0,0,0,0,0,0},
{1,1,0,1,0,0,0,0,0,0},
{0,0,0,1,0,1,1,1,1,1},
{0,0,0,1,0,0,0,0,0,0}};
Jugador jug1 = new Jugador(MapaBarcos2);
Jugador jug2 = new Jugador(MapaBarcos1);
//A cada jugador le asignamos el mapa de barcos del
//adversario para poder disparar sobre l. Este cambio es
//totalmente necesario debido a la nueva poltica del
//mtodo disparar
System.out.println
("Las posiciones de los barcos del JUGADOR 1: ");
jug1.mostrarArrayBidimensional(jug2.MapaBarcos);
System.out.println("\n");
System.out.println
("Las posiciones de los barcos del JUGADOR 2: ");
jug2.mostrarArrayBidimensional(jug1.MapaBarcos);
while(1>0){
//Cambiamos los factores necesarios para adecuarnos a
//las exigencias del ejercicio.
System.out.println("TURNO DEL JUGADOR 1");
jug1.disparar();
System.out.println
("Los disparos realizados por el JUGADOR 1" +
" son:");
jug1.mostrarArrayBidimensional(jug1.MapaDisparos);

System.out.println("\n");
System.out.println("TURNO DEL JUGADOR 2");
jug2.disparar();
System.out.println
("Los disparos realizados por el JUGADOR 1" +
" son:");
jug2.mostrarArrayBidimensional(jug2.MapaDisparos);
System.out.println();
}
}
}

Jugador.java:
package lab8;
import java.util.*;
public class Jugador{
//Esta clase es totalmente nueva. Antes no exista.
int[][] MapaBarcos, MapaDisparos;
public Jugador(int[][] MapaBarcos){
this.MapaBarcos = MapaBarcos;
this.MapaDisparos = new int[][] {{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0}};
}
void mostrarArrayBidimensional(int[][] mapa){
//MostrarArrayBidimensional nos muestra todos los elementos
//de la matriz de datos
for(int i=0; i<mapa.length;i++){
System.out.print("
");
for(int j=0; j<mapa[i].length;j++)
System.out.print(mapa[i][j] + " ");
System.out.println("");
}
}
void disparar(){
//Disparar ya no recibe dos mapas, sino que se utiliza la palabra
//especial this para referirse al MapaBarcos o MapaDisparos de la
//instancia que ejecuta este mtodo.
int fil, col;
Scanner entrada= new Scanner(System.in);
System.out.print("Introduzca el nmero de fila (1-" +
(this.MapaBarcos.length) + "): ");

fil=entrada.nextInt();
System.out.print("Introduzca el nmero de columna (1-" +
(this.MapaBarcos[0].length) + "): ");
col=entrada.nextInt();
if(this.MapaBarcos[fil-1][col-1]==1){
System.out.println(" El disparo ("+fil+","+col+
") cae en BARCO" );
this.MapaDisparos[fil-1][col-1]= 2;
}
else{
System.out.println(" El disparo ("+fil+","+col+
") cae en AGUA" );
this.MapaDisparos[fil-1][col-1]= 1;
}
}

TAREA 6
Tarea6.java:
package lab8;
import java.util.*;
public class Tarea6{
public static void main(String[] args){
int [][] MapaBarcos1 = {{6,6,6,6,6,6,0,0,0,0},
{0,0,0,0,0,0,0,3,3,3},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,4,0,0,0},
{5,5,5,5,5,0,4,0,0,0},
{0,0,0,0,0,0,4,0,2,2},
{1,0,0,0,0,0,4,0,0,0},
{0,0,0,0,0,0,0,0,0,0}};
int [][] MapaBarcos2 = {{0,3,0,0,0,0,0,1,0,0},
{0,3,0,0,0,0,0,0,0,0},
{0,3,0,0,0,0,0,0,0,0},
{0,0,0,6,0,4,4,4,4,0},
{0,0,0,6,0,0,0,0,0,0},
{0,0,0,6,0,0,0,0,0,0},
{2,2,0,6,0,0,0,0,0,0},
{0,0,0,6,0,0,0,0,0,0},
{0,0,0,6,0,0,0,0,0,0}};
Jugador jug1 = new Jugador(MapaBarcos2);
Jugador jug2 = new Jugador(MapaBarcos1);
System.out.println
("Las posiciones de los barcos del JUGADOR 1: ");
jug1.mostrarArrayBidimensional(jug2.MapaBarcos);
System.out.println("\n");
System.out.println
("Las posiciones de los barcos del JUGADOR 2: ");
jug2.mostrarArrayBidimensional(jug1.MapaBarcos);
while(1>0){
System.out.println("TURNO DEL JUGADOR 1");
jug1.disparar();
System.out.println
("Los disparos realizados por el JUGADOR 1" +
" son:");
jug1.mostrarArrayBidimensional(jug1.MapaDisparos);
System.out.println("\n");
System.out.println("TURNO DEL JUGADOR 2");
jug2.disparar();

System.out.println
("Los disparos realizados por el JUGADOR 2" +
" son:");
jug2.mostrarArrayBidimensional(jug2.MapaDisparos);
System.out.println();
}
}
}

Jugador.java:
package lab8;
import java.util.*;
public class Jugador{
//Esta clase es totalmente nueva. Antes no exista.
int[][] MapaBarcos, MapaDisparos;
int[] contador;
public Jugador(int[][] MapaBarcos){
this.MapaBarcos = MapaBarcos;
this.MapaDisparos = new int[][] {{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0}};
this.contador = new int[] {0,0,0,0,0,0};
//Este contador nos indica cuantas veces hemos acertado en un barco de
//longitud cualquiera. Dependiendo de la longitud del barco se sumar
//a un determinado elemento del vector u otro. Nos permite conocer
//cuando hemos hundido un barco concreto.
}
void mostrarArrayBidimensional(int[][] mapa){
//MostrarArrayBidimensional nos muestra todos los elementos
//de la matriz de datos
for(int i=0; i<mapa.length;i++){
System.out.print("
");
for(int j=0; j<mapa[i].length;j++)
System.out.print(mapa[i][j] + " ");
System.out.println("");
}
}
void disparar(){
//Disparar ya no recibe dos mapas, sino que se utiliza la palabra
//especial this para referirse al MapaBarcos o MapaDisparos de la
//instancia que ejecuta este mtodo.
int fil, col;
Scanner entrada= new Scanner(System.in);
System.out.print("Introduzca el nmero de fila (1-" +

(this.MapaBarcos.length) + "): ");


fil=entrada.nextInt();
System.out.print("Introduzca el nmero de columna (1-" +
(this.MapaBarcos[0].length) + "): ");
col=entrada.nextInt();
if(this.MapaBarcos[fil-1][col-1]!=0){
System.out.println(" El disparo ("+fil+","+col+
") cae en BARCO" );
if(this.MapaDisparos[fil-1][col-1] != 2){
this.MapaDisparos[fil-1][col-1]= 2;
contador[this.MapaBarcos[fil-1][col-1]-1]++ ;
}
if(contador[this.MapaBarcos[fil-1][col-1]-1] ==
this.MapaBarcos[fil-1][col-1]){
System.out.println("El barco est HUNDIDO!!");
//Creamos la lgica que comprobar el contador para
//determinar cuando el barco est hundido.
}
}
else{
System.out.println(" El disparo ("+fil+","+col+
") cae en AGUA" );
this.MapaDisparos[fil-1][col-1]= 1;
}
}
}