Java - ayuda a colocar barcos please!

 
Vista:
sin imagen de perfil
Val: 18
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

ayuda a colocar barcos please!

Publicado por Guillermo (5 intervenciones) el 22/01/2021 04:09:52
Hola buenas, estoy haciendo el juego de hundir la flota en java, y tengo un problemilla a la hora de colocar los barcos, y es que poniendolo el método así

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public void pintarConBarco(String[][] mapa, Barco b, int fila, int columna, int sentido) {
 
    for (int i = 0; i < mapa.length; i++) {
        for (int j = 0; j < mapa[i].length; j++) {
            if (i == fila && j == columna) {
                /*for (int tam = 0; tam < b.getTam(); tam++) {*/
 
                    System.out.print(b.getTipo()+" ");
                /*}*/
            } else {
                System.out.print(mapa[i][j]+ " ");
            }
 
        }
 
        System.out.println("");
 
    }
 
}

me pinta el mapa correctamente y me pone en la posición (fila,columna) tal como muestra la imagen (mapa1)


mapa1


como veis hay un for que esta comentado, que es el que intente poner para que pusiera a partir de la fila y columna indicada, el tamaño del barco, es decir, que ocupe 4, 3 ,2 o 1 casilla dependiendo del barco que sea, y lo que hace es que pone el tamaño del barco, pero no usa 3 posiciones del array, sino que usa una y la agranda, con el consiguiente desplazamiento del mapa. Ver imagen (mapa2)


mapa2

podéis orientarme un poco por favor?, llevo toda la tarde atrancado ahí, y no consigo dar con la tecla... he de decir que llevo desde octubre aprendiendo a programar y aún no estoy muy suelto.


Gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

ayuda a colocar barcos please!

Publicado por Rodrigo (623 intervenciones) el 22/01/2021 07:18:08
Tu intencion es modificar el mapa de alguna manera o solo mostrar el mapa y en medio del despliegue intervenir y mostrar un barco encima?

El nombre de la funcion me hace suponer lo segundo.

Para empezar a modificar a tu favor, aunque claramente no resuelve todos los problemas te sugiero que en el for que tienes comentado incrementes tambien la variable j para que no te pase lo que indicas en la segunda figura.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 18
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

ayuda a colocar barcos please!

Publicado por Guillermo (5 intervenciones) el 22/01/2021 12:41:58
mi intención, aparte de mostrar el mapa, es que una vez colocado los barcos, se pueda jugar al hundir la flota, el nombre del método puede que no sea el más adecuado, no se si se esta guardando en memoria, yo creo que si por que tira de la base datos de barcos y la base dato del mapa.. pero no se si es así o no, estoy algo verde aún.
Con lo de incrementar la variable j, (si es así como muestro en la imagen), ahora hace el efecto contrario, resta al mapa.

mapa3

También acabo de caer, que dependiendo el tipo de barco, son uno o más barco a poner, no creo que se haga repitiendo el método no?, como se podría indicar en el método que pinte más de un barco dependiendo del tipo de barco que sea?


Gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

ayuda a colocar barcos please!

Publicado por Rodrigo (623 intervenciones) el 22/01/2021 16:39:21
Lo que ocurre es que tu no estas colocando los barcos en el mapa, solo estas pintando en la pantalla el mapa e interrumpiendo entremedio con el mapa, pero el mapa y los barcos son entidades separadas, ninguno de los 2 sabe del otro y no parece ser lo que necesitas.

Lo que creo que deberias hacer es modificar el mapa, para que el mapa no solo contenga lo que ahora contiene, sino que el mapa contenga los barcos y que cuando pintes el mapa no haya que hacer ninguna logica adicional, como lo haces ahora.

Sugiero que crees un metodo que se llame, ponerBarco o algo asi, que recibe el mapa, el barco y la posicion y modifique el mapa, poniendo en la posicion indicada del mapa el barco. El mapa podria tener 0 para cuando no hay barco y un numero cuando hay barco en la posicion [i][j]. La funcion que muestra el mapa, solo recorre lo recorre y muestra de acuerdo al valor almacenado en el mapa.

Respecto a que ahora te muestra 1 menos, lo que ocurre es que el ciclo incrementa a j (linea 37), y el ciclo que contiene al ciclo (linea 35) tambien. Tienes que restarle 1 a j despues del ciclo interior. Pero de nuevo, esto solo mejorara la visualizacion, no hace ningun cambio permanente.

No entendi "dependiendo el tipo de barco, son uno o más barco a poner".
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 18
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

ayuda a colocar barcos please!

Publicado por Guillermo (5 intervenciones) el 22/01/2021 17:20:19
a ver si así puedo explicarme mejor lo que tengo hecho
por un lado tengo la clase vistaMapas, que contiene el siguiente codigo...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package vista;
 
import java.util.Random;
 
import model.Barco;
 
public class vistaMapas {
 
	// metodo mostrar mapa
	public void mostrarMapa(String[][] ma1) {
 
		for (int i = 0; i < ma1.length; i++) {
			for (int j = 0; j < ma1[i].length; j++) {
 
				ma1[i][j] = "■";
				System.out.print(ma1[i][j] + " ");
			}
 
			System.out.println("");
 
		}
 
	}
 
	// método para borrar sitios del mapa
	public void borrarCasilla(int i,int j,String[][] mapa) {
 
		mapa[i][j] = "";
	}
	// método para pintar los barcos
 
	public void pintarConBarco(String[][] mapa, Barco b, int fila, int columna, int sentido) {
 
		for (int i = 0; i < mapa.length; i++) {
			for (int j = 0; j < mapa[i].length; j++) {
				if (i == fila && j == columna) {
					for (int tam = 0; tam < b.getTam(); tam++,j++) {
 
						System.out.print(b.getTipo()+" ");
					}
				} else {
					System.out.print(mapa[i][j]+ " ");
				}
 
			}
 
			System.out.println("");
 
		}
 
	}
 
}



luego tengo la clase barco, que contiene este código...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package model;
 
public class Barco {
 
 
	private int tam;
	private String nombre;
	private String tipo;
 
 
 
	public Barco(int tam, String nombre, String tipo) {
		super();
		this.tam = tam;
		this.nombre = nombre;
		this.tipo = tipo;
	}
 
 
 
	public int getTam() {
		return tam;
	}
 
 
 
	public void setTam(int tam) {
		this.tam = tam;
	}
 
 
 
	public String getNombre() {
		return nombre;
	}
 
 
 
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
 
 
 
	public String getTipo() {
		return tipo;
	}
 
 
 
	public void setTipo(String tipo) {
		this.tipo = tipo;
	}
 
 
 
}

luego tngo la clase BdBarcos, con este código....

public class BdBarcos {



Barco b4 = new Barco (4,"portaAviones","4");
Barco b3 = new Barco (3,"Destructor","3");
Barco b2 = new Barco (2,"Fragata","2");
Barco b1 = new Barco (1,"Canoa","1");

public BdBarcos() {

}
public BdBarcos(Barco b4, Barco b3, Barco b2, Barco b1) {
super();
this.b4 = b4;
this.b3 = b3;
this.b2 = b2;
this.b1 = b1;
}

public Barco getB4() {
return b4;
}
public void setB4(Barco b4) {
this.b4 = b4;
}
public Barco getB3() {
return b3;
}
public void setB3(Barco b3) {
this.b3 = b3;
}
public Barco getB2() {
return b2;
}
public void setB2(Barco b2) {
this.b2 = b2;
}
public Barco getB1() {
return b1;
}
public void setB1(Barco b1) {
this.b1 = b1;
}






}







luego la clase BaseDatos, con este código....

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
package datos;
 
public class BaseDatos {
 
 
 
 
	String [][] mapa1 = {{"■","■","■","■","■"},
			{"■","■","■","■","■"},
			{"■","■","■","■","■"},
			{"■","■","■","■","■"},
			{"■","■","■","■","■"}};
 
 
 
 
	public String[][] getMapa1() {
		return mapa1;
	}
 
	public void setMapa1(String[][] mapa1) {
		this.mapa1 = mapa1;
	}
 
	String [][] mapa2 = {{"■","■","■","■","■","■","■","■","■","■"},
			{"■","■","■","■","■","■","■","■","■","■"},
	{"■","■","■","■","■","■","■","■","■","■"},
	{"■","■","■","■","■","■","■","■","■","■"},
	{"■","■","■","■","■","■","■","■","■","■"},
	{"■","■","■","■","■","■","■","■","■","■"},
	{"■","■","■","■","■","■","■","■","■","■"},
	{"■","■","■","■","■","■","■","■","■","■"},
	{"■","■","■","■","■","■","■","■","■","■"},
	{"■","■","■","■","■","■","■","■","■","■"}};
 
 
 
 
 
	public String[][] getMapa2() {
		return mapa2;
	}
 
	public void setMapa2(String[][] mapa2) {
		this.mapa2 = mapa2;
	}
 
	String [][] mapa3 = {{"■","■","■","■","■","■","■","■","■","■","■","■","■","■","■"},
			{"■","■","■","■","■","■","■","■","■","■","■","■","■","■","■"},
			{"■","■","■","■","■","■","■","■","■","■","■","■","■","■","■"},
			{"■","■","■","■","■","■","■","■","■","■","■","■","■","■","■"},
			{"■","■","■","■","■","■","■","■","■","■","■","■","■","■","■"},
			{"■","■","■","■","■","■","■","■","■","■","■","■","■","■","■"},
			{"■","■","■","■","■","■","■","■","■","■","■","■","■","■","■"},
			{"■","■","■","■","■","■","■","■","■","■","■","■","■","■","■"},
			{"■","■","■","■","■","■","■","■","■","■","■","■","■","■","■"},
			{"■","■","■","■","■","■","■","■","■","■","■","■","■","■","■"},
			{"■","■","■","■","■","■","■","■","■","■","■","■","■","■","■"},
			{"■","■","■","■","■","■","■","■","■","■","■","■","■","■","■"},
			{"■","■","■","■","■","■","■","■","■","■","■","■","■","■","■"},
			{"■","■","■","■","■","■","■","■","■","■","■","■","■","■","■"},
			{"■","■","■","■","■","■","■","■","■","■","■","■","■","■","■"}};
 
 
 
 
	public String[][] getMapa3() {
		return mapa3;
	}
 
	public void setMapa3(String[][] mapa3) {
		this.mapa3 = mapa3;
	}
 
 
 
 
 
 
 
 
 
 
 
 
}


otra clase Barco, con este código.....

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package model;
 
public class Barco {
 
 
	private int tam;
	private String nombre;
	private String tipo;
 
 
 
	public Barco(int tam, String nombre, String tipo) {
		super();
		this.tam = tam;
		this.nombre = nombre;
		this.tipo = tipo;
	}
 
 
 
	public int getTam() {
		return tam;
	}
 
 
 
	public void setTam(int tam) {
		this.tam = tam;
	}
 
 
 
	public String getNombre() {
		return nombre;
	}
 
 
 
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
 
 
 
	public String getTipo() {
		return tipo;
	}
 
 
 
	public void setTipo(String tipo) {
		this.tipo = tipo;
	}
 
 
 
}

y por ultimo la clase principal con este código....

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
package boss;
 
import java.util.Random;
 
import datos.BaseDatos;
import datos.BdBarcos;
import datos.Reglas;
import model.Jugadores;
import utilidades.Leer;
import vista.vistaMapas;
 
public class Principal {
 
	public static void main(String[] args) {
		// TODO Auto-generated method stub
 
		// variables del mapa
		String[][] primero;
 
 
 
 
		int tam1, tam2;
		int desde = 0, hasta = 9;
		int ale;
 
		int fila, columna, sentido=1;
		int filaMem=0, columnaMem=0;
 
		// variables menu
		int menu1, menu2,menu3;
 
 
		//jugadores
		String nombrePlayer1,nombrePlayer2;
 
 
		//barcos
 
		BdBarcos bdB = new BdBarcos();
 
		vistaMapas cargBarcos = new vistaMapas ();
 
	    //mapa
		BaseDatos bd = new BaseDatos ();
 
		vistaMapas visMa1 = new vistaMapas ();
 
 
 
		//jugadores
		Jugadores player1;
		Jugadores player2 ;
 
		//reglas
		Reglas regl=new Reglas();
 
		//es falso mientras no termine la partida
 
		boolean  partidaTerminada = false;
 
		//disparos
 
		boolean disparoAcertado = false;
 
		//visMa1.mostrarMapa(bd.getMapa3());
 
		System.out.println("En qué fila");
		fila=Leer.datoInt();
		filaMem = filaMem +fila;
		System.out.println("En qué columna");
		columna=Leer.datoInt();
		columnaMem= columnaMem + columna;
 
		primero=new String[filaMem][columnaMem];
 
 
		/*visMa1.borrarCasilla(filaMem,columnaMem,bd.getMapa2());*/
 
		visMa1.pintarConBarco(bd.getMapa2(),bdB.getB3(),filaMem, columnaMem, sentido);
 
 
 
 
 
 
 
/*
		do {
		System.out.println(
				"*****************************************************************************************************************\r\n"
						+ "*██   ██ ██    ██ ███    ██ ██████  ██ ██████      ██       █████      ███████ ██       ██████  ████████  █████ * \r\n"
						+ "*██   ██ ██    ██ ████   ██ ██   ██ ██ ██   ██     ██      ██   ██     ██      ██      ██    ██    ██    ██   ██* \r\n"
						+ "*███████ ██    ██ ██ ██  ██ ██   ██ ██ ██████      ██      ███████     █████   ██      ██    ██    ██    ███████* \r\n"
						+ "*██   ██ ██    ██ ██  ██ ██ ██   ██ ██ ██   ██     ██      ██   ██     ██      ██      ██    ██    ██    ██   ██* \r\n"
						+ "*██   ██  ██████  ██   ████ ██████  ██ ██   ██     ███████ ██   ██     ██      ███████  ██████     ██    ██   ██* \r\n"
						+ "***************************************************************************************************************** ");
		System.out.println("                                                        .\r\n"
				+ "                                      .                 |\r\n"
				+ "                                      +                 |\r\n"
				+ "                             .        |                *+W+-*\r\n"
				+ "               .           +y        +W+              . H                 .\r\n"
				+ "            .  +y            |I.   y  |               ! H= .           .  ^\r\n"
				+ "            !   \\     .     |H '. /   |  ___.        .! H  !   +--.--y !  V\r\n"
				+ "            !    \\     \\  +=|H|=='.=+ | |====\\   _  '_H_H__H_. H_/=  J !  !\r\n"
				+ "          . !     \\'    VVV_HHH_/__'._H |  E  \\_|=|_|========|_|==|____H. ! _______.\r\n"
				+ "          I-H_I=I=HH_==_|I_IIIII_I_I_=HH|======.I-I-I-=======-I=I=I=I_=H|=H'===I=I/\r\n"
				+ "          \\                                                                      ,\r\n"
				+ "           |                                                                    /\r\n"
				+ "           .___________________________________________________________________'\r\n" + "");
		System.out.println("***************************\r\n" + "*---------MENÚ----------  *\r\n" + "* *	*	*	* *\r\n"
				+ "* 1 -> Reglas del juego   *\r\n" + "* 2 -> Iniciar partida    *\r\n"
				+ "* 0 -> Salir              *\r\n" + "***************************");
		menu1=Leer.datoInt();
		switch(menu1){
			case 1:
				regl.imprimirReglas();
				break;
			case 2:
				System.out.println("************************\r\n"
						+ "* ELIJA TAMAÑO TABLERO *\r\n"
						+ "************************\r\n"
						+ "** 1 -> Beginner      **\r\n"
						+ "**		      **\r\n"
						+ "** 2 -> Amateur       **\r\n"
						+ "**                    **\r\n"
						+ "** 3 -> Expert        **\r\n"
						+ "**                    **\r\n"
						+ "************************");
				menu2=Leer.datoInt();
				switch(menu2) {
				case 1:
					System.out.println("Introduzca nombre jugador1:");
					nombrePlayer1=Leer.dato();
					player1= new Jugadores(nombrePlayer1);
					System.out.println(player1);
					System.out.println("Introduzca nombre jugador2:");
					nombrePlayer2=Leer.dato();
					player2= new Jugadores(nombrePlayer2);
					System.out.println(player2);
					cargBarcos.cargarBarcos(primero);
					visMa1.mostrarMapa(bd.getMapa1());
					break;
				case 2:
					 visMa2.mostrarMapa(bd.getMapa2());
					break;
				case 3:
					visMa3.mostrarMapa(bd.getMapa3());
					System.out.println("\n\n");
					break;
				default:
					System.out.println("Número erróneo, prueba de nuevo");
				}
				break;
			case 0:
				System.out.println("Hasta la próxima partida en...¡Hundir La Flota!");
				break;
			default:
				System.out.println("Número erróneo, prueba de nuevo");
				break;
		}
		}while(menu1 !=0);
		*/
		/*Random r;
		r = new Random(System.nanoTime());
		System.out.println("Tamaño de las colunnas: \n");
		tam1 = Leer.datoInt();
		System.out.println("Tamaño de las filas: \n");
		tam2 = Leer.datoInt();
		primero = new String[tam1][tam2];
		for (int i = 0; i < primero.length; i++) {
			for (int j = 0; j < primero[i].length; j++) {
				primero[i][j] = "■";
				System.out.print(primero[i][j] + " ");
			}
			System.out.println("");
		}
*/
	}
 
}



en ella, la parte del menú y demás esta comentada para ir directo al mapa y barcos arriba, ya una vez q funcione lo meto dentro de los menú.





Entonces,...con lo "No entendí "dependiendo el tipo de barco, son uno o más barco a poner".", me refiero a que si miras en la case BdBarco, ......
Barco b4 = new Barco (4,"portaAviones","4");
Barco b3 = new Barco (3,"Destructor","3");
Barco b2 = new Barco (2,"Fragata","2");
Barco b1 = new Barco (1,"Canoa","1");

Habría que poner en el tablero..... 4 portaaviones, 3 destructores,2 fragatas y 1 canoa, con el método que estoy haciendo, estoy probando únicamente con el barco 3, el destructor, que pone un 3 ocupando tres casillas, habría que poner 2 destructores más, me explico?

lo que no entiendo tampoco a que te refieres con que....dibujo el mapa pero no estoy incluyendo los barcos en el mapa?


Por favor, si me pudieras ayudar... te lo agradecería enormemente


Gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

ayuda a colocar barcos please!

Publicado por Rodrigo (623 intervenciones) el 22/01/2021 20:29:03
Te recomiendo urgentemente renombrar algunas cosas que tienes para poder entender mas tu programa.
Si Barco recibe un primer parametro 4 y con eso quieres decir que son 4 entidades distintas, entonces la clase no puede llamarse Barco. Barco es 1 solo. A menos que el 4 no significa 4 entidades distintas?

Tienes una clase que parece no usas (vistaMapas), es cierto, la defines y declaras una variable con ese tipo, pero no invocas el metodo dentro en codigo que no este comentado, al parecer. Entonces la clase y el metodo se hacen superfluos.

Perdonando el que el codigo que invoca el metodo este en comentarios, pues posiblemente luego uses el metodo, creo que es posible criticar a ese unico metodo ahi presente.

El metodo dentro de esa clase se llama mostrarMapa y recibe un mapa el que no solo ignora su contenido, sino que lo modifica y luego muestra lo que modifico. Ese metodo no es un mostrarMapa, sino que es un modificador del mapa (y luego muestra lo que dejo). Elimina la asignacion al interior del metodo. Esa clase no deberia existir. Ese metodo deberia ser un metodo estatico de la clase donde esta el programa principal.

Tengo la impresion que los barcos que pones, los 2 jugadores intentan derribarlos. Los barcos no tienen color o bando, los 2 jugadores disparan a barcos de un 3ro, es asi? o los barcos tienen colores o bandos?

Creo que tienes que definir mejor tu problema antes de escribir el codigo relacionado. Tienes algun enunciado que dirige lo que intentas hacer?

Como controlas o piensas controlar que los barcos no esten uno sobre el otro?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar