Java - Batalla naval - ayuda

 
Vista:

Batalla naval - ayuda

Publicado por Micaela Ayala (1 intervención) el 09/11/2017 16:33:01
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
package id_201703102;
 
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
 
/*Proyecto Naval
 * Autora: Adriana Bolaños
 * id = 201703102
 */
import batallaNaval.BatallaNaval;
 
public class oficial extends ListaDeAtaques {
 
	public static void main(String[] args) {
		oficial ej = new oficial();
		int[][] miMatriz = ej.MiTablero();
		BatallaNaval.IniciarJuego("Adri", miMatriz);
		ArrayList<Integer[]> matrizEnemiga = ej.pruebaListaLista();
 
		while (!BatallaNaval.HayUnGanador()) {
 
			if (BatallaNaval.HayUnGanador() == true) {
				System.out.println("Hay un ganador");
			} else {
				System.out.println("Aún no ganó ninguno, seguir jugando");
			}
			BatallaNaval.ProximoTurno();
 
			int[] pos = BatallaNaval.PreguntarPosicion();
			BatallaNaval.RespuestaPosicion(pos, miMatriz[pos[0]][pos[1]]);
			System.out.println("(li) En la posición " + pos[0] + "," + pos[1] + " hay: " + miMatriz[pos[0]][pos[1]]);
 
			int posición = ej.disparoLista(matrizEnemiga);
			int extra = posición;
			Integer[] disparo = ej.coordenadas(posición, matrizEnemiga);
			int x = disparo[0];
			int y = disparo[1];
			int hay = BatallaNaval.QueHayEn(x, y);
			System.out.println("(user) En la posición " + x + "," + y + " hay: " + hay);
			if ((hay == 1)) {
				ej.buscarEliminarDiagonales(matrizEnemiga, extra);
			}
		}
		BatallaNaval.ImprimirResultado();
	}
//me dice que pido cosas fufera del límite, intenté condicionar pero ignira nomás mi pedido
	public void buscarEliminarDiagonales(ArrayList<Integer[]> lista, int extra) {
		if (extra < lista.size()) {
			Integer[] posicionesDisparo = lista.get(extra);
			int x = posicionesDisparo[0];
			int y = posicionesDisparo[1];
			if (x >= 1 && x < lista.size() - 1 && y >= 1 && y < lista.size() - 1) {
				Integer[] posiciónDerecha = { x + 1, y + 1 };
				Integer[] posiciónIzquierda = { x - 1, y - 1 };
				Integer[] posiciónIzq = { x + 1, y - 1 };
				Integer[] posiciónDer = { x - 1, y + 1 };
 
				if (lista.contains(posiciónDer) && lista.contains(posiciónIzq) && lista.contains(posiciónIzquierda)
 
						&& lista.contains(posiciónDerecha)) {
					int a = lista.indexOf(posiciónDerecha);
					int b = lista.indexOf(posiciónIzquierda);
					int c = lista.indexOf(posiciónDer);
					int d = lista.indexOf(posiciónIzq);
 
					lista.remove(a);
					lista.remove(b);
					lista.remove(c);
					lista.remove(d);
				}
			}
		}
	}
 
	public int disparoLista(ArrayList<Integer[]> numeros) {
		Random rnd = new Random();
		int posicion = rnd.nextInt(numeros.size());
		return posicion;
	}
 
	public Integer[] coordenadas(int posición, ArrayList<Integer[]> numeros) {
		Integer[] posiciónDisparo = numeros.get(posición);
		numeros.remove(posición);
		return posiciónDisparo;
	}
 
	public int[][] MiTablero() {
		int[][] mat = { { 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 }, { 1, 0, 0, 0, 1, 1, 1, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
				{ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 }, { 0, 0, 1, 0, 0, 0, 0, 1, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
				{ 1, 1, 0, 1, 1, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1, 1, 0, 0 } };
 
		return mat;
	}
//si imprimís esto toma como que la lista sólo tiene diez elementos y necesito 100
	public ArrayList<Integer[]> pruebaListaLista() {
		ArrayList<Integer[]> arl = new ArrayList<Integer[]>();
		for (int i = 0; i < 10; i++) {
			for (int j = 0; j < 10; j++) {
				Integer[] a1 = { i, j };
				arl.add(a1);
 
			}
		System.out.println(arl.get(i)[0] + "," +  (arl.get(i)[1]));
		}
 
		return arl;
	}
 
	public void imprimir(int[][] matriz) {
		int m = matriz.length;
		int n = matriz.length;
		for (int i = 0; i < m; i++) {
			System.out.println();
 
			for (int j = 0; j < n; j++) {
				System.out.print(matriz[i][j] + "\t");
			}
		}
		System.out.println();
 
	}
	//muchas 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
sin imagen de perfil
Val: 190
Ha disminuido su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Batalla naval - ayuda

Publicado por preguntas (70 intervenciones) el 09/11/2017 17:40:22
El system.out... debe estar interrumpiendo la ejecucion del bucle (llega hasta el System.out y para. Hace solo una iteracion), pero si imprimes la lista completa antes del return verás que efectivamente tienes las 100 posiciones:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public ArrayList<Integer[]> pruebaListaLista() {
    ArrayList<Integer[]> arl = new ArrayList<Integer[]>();
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 10; j++) {
            Integer[] a1 = {i, j};
            arl.add(a1);
        }
        //System.out.println(arl.get(i)[0] + "," + (arl.get(i)[1]));
    }
 
    for (int i = 0; i < arl.size(); i++) {
        System.out.println(arl.get(i)[0] + "," + (arl.get(i)[1]));
    }
 
    System.out.println("Tamano: " + arl.size());
 
    return arl;
}
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