/** * @param c1 * @param c2 * @return un tablero en donde se intercambiarion los caramelos de c1 y c2 */ public Tablero swapCaramelos(Coordenada c1, Coordenada c2) { String col1 = this.colorCarameloEn(c1); String col2 = this.colorCarameloEn(c2); this.getCaramelos()[c1.getFila()][c1.getColumna()].setColor(col2); this.getCaramelos()[c2.getFila()][c2.getColumna()].setColor(col1); return this; }
public synchronized boolean equals(java.lang.Object obj) { if (!(obj instanceof Coordenada)) return false; Coordenada other = (Coordenada) obj; if (obj == null) return false; if (this == obj) return true; if (__equalsCalc != null) { return (__equalsCalc == obj); } __equalsCalc = obj; boolean _equals; _equals = super.equals(obj) && this.coordX == other.getCoordX() && this.coordY == other.getCoordY(); __equalsCalc = null; return _equals; }
@Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((coordenada == null) ? 0 : coordenada.hashCode()); result = prime * result + ((direcao == null) ? 0 : direcao.hashCode()); return result; }
/** * @param t * @param c * @return */ public boolean explotaHorizontal(Tablero t, Coordenada c) { List<Movimiento> izq1 = new ArrayList<Movimiento>(); izq1.add(new Izquierda()); List<Movimiento> izq2 = new ArrayList<Movimiento>(); izq2.add(new Izquierda()); izq2.add(new Izquierda()); List<Movimiento> der1 = new ArrayList<Movimiento>(); der1.add(new Derecha()); List<Movimiento> der2 = new ArrayList<Movimiento>(); der2.add(new Derecha()); der2.add(new Derecha()); Coordenada izq = c.coordenadaResultante(izq1); Coordenada izqIzq = c.coordenadaResultante(izq2); Coordenada der = c.coordenadaResultante(der1); Coordenada derDer = c.coordenadaResultante(der2); return this.explosionHacia(t, c, izq, izqIzq) || this.explosionHacia(t, c, der, derDer) || this.explosionHacia(t, c, izq, der); }
/** * @param t * @param c * @return devuelve si se genero una explosión en sentido vertical u horizontal dependiendo de los * parametros */ public boolean explotaVertical(Tablero t, Coordenada c) { List<Movimiento> arriba1 = new ArrayList<Movimiento>(); arriba1.add(new Arriba()); List<Movimiento> arriba2 = new ArrayList<Movimiento>(); arriba2.add(new Arriba()); arriba2.add(new Arriba()); List<Movimiento> abajo1 = new ArrayList<Movimiento>(); abajo1.add(new Abajo()); List<Movimiento> abajo2 = new ArrayList<Movimiento>(); abajo2.add(new Abajo()); abajo2.add(new Abajo()); Coordenada arr = c.coordenadaResultante(arriba1); Coordenada arrArr = c.coordenadaResultante(arriba2); Coordenada aba = c.coordenadaResultante(abajo1); Coordenada abaAba = c.coordenadaResultante(abajo2); return this.explosionHacia(t, c, arr, arrArr) || this.explosionHacia(t, c, aba, abaAba) || this.explosionHacia(t, c, arr, aba); }
@Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; PosicaoVetorial other = (PosicaoVetorial) obj; if (coordenada == null) { if (other.coordenada != null) return false; } else if (!coordenada.equals(other.coordenada)) return false; if (direcao != other.direcao) return false; return true; }
public String toString() { Coordenada pos = this.posicion; return "Senal " + pos.toString(); }
public void testExplosionHaciaCasoFalse() { Coordenada cor2 = new Coordenada(2, 2); Coordenada vec1 = cor2.coordenadaResultante(vecino1); Coordenada vec2 = cor2.coordenadaResultante(vecino2); Assert.assertFalse(explosion.explosionHacia(t, cor2, vec1, vec2)); }
public void testExplosionHaciaCasoTrue() { Coordenada vec1 = cor.coordenadaResultante(vecino1); Coordenada vec2 = cor.coordenadaResultante(vecino2); Assert.assertTrue(explosion.explosionHacia(t, cor, vec1, vec2)); }
/** @param contorno */ public void addContorno(Contorno contorno) { // Conseguimos los punto a, b (bounding box del contorno) Coordenada a = null, b = null; { Iterator<Coordenada> it = contorno.getCoordenadas().iterator(); while (it.hasNext()) { Coordenada c = it.next(); if (a == null || b == null) { a = c.clone(); b = c.clone(); } else { if (a.getLatitud() > c.getLatitud()) { a.setLatitud(c.getLatitud()); } if (a.getLongitud() > c.getLongitud()) { a.setLongitud(c.getLongitud()); } if (b.getLatitud() < c.getLatitud()) { b.setLatitud(c.getLatitud()); } if (b.getLongitud() < c.getLongitud()) { b.setLongitud(c.getLongitud()); } } } // Normalizamos las coordenadas // a.setLatitud(a.getLatitud()+90); // a.setLongitud(b.getLongitud()+180); // b.setLatitud(a.getLatitud()+90); // b.setLongitud(b.getLongitud()+180); // System.out.println("Bounding box: " + a + ", " + b); } // Añadimos las cuadriculas a las que el bounding box pertenece int ai = (int) ((a.getLongitud() + 180.0) / this.tamanoCuadricula); int aj = (int) ((a.getLatitud() + 90.0) / this.tamanoCuadricula); int bi = (int) ((b.getLongitud() + 180.0) / this.tamanoCuadricula); int bj = (int) ((b.getLatitud() + 90.0) / this.tamanoCuadricula); // System.out.println("Bounding box local: (" + ai + ", " + aj + "), (" // + bi + ", " + bj +")"); for (int i = ai; i <= bi; ++i) { for (int j = aj; j <= bj; ++j) { // System.out.println("Contorno " + contorno + " añadido en (" + // i + ", " + j + ")"); contorno.addCuadricula(this.getCuadricula(i, j)); this.getCuadricula(i, j).addContorno(contorno); } } }
public ArrayList<Contorno> calculaPosiblesContornos(Coordenada c) { int x = (int) Math.floor(((c.getLongitud() + 180) % 180) / this.tamanoCuadricula); int y = (int) Math.floor(((c.getLatitud() + 90) % 90) / this.tamanoCuadricula); return this.conjuntoCuadricula.get(x).get(y).getContornos(); }
/** * Devuelve la cuadricula que contiene c (en posicion global) * * @param c Coordenada * @return Cuadricula que contiene la coordenada c */ public Cuadricula getCuadricula(Coordenada c) { int i = (int) ((c.getLongitud() + 180.0) / this.tamanoCuadricula); int j = (int) ((c.getLatitud() + 90.0) / this.tamanoCuadricula); return this.getCuadricula(i, j); }
@Override public String toString() { return coordenada.toString() + " " + direcao.getToken(); }
/** * @param c * @param col cambia el color del caramelo en c por el color col */ public void cambiarColorCaramelo(Coordenada c, String col) { this.getCaramelos()[c.getFila()][c.getColumna()].setColor(col); }
/** * @param c * @return devuelve true si la coordenada c esta contenida en el tablero */ public boolean incluidoEnTablero(Coordenada c) { return (c.getFila() >= 0 && c.getFila() < this.getAlto()) && (c.getColumna() >= 0 && c.getColumna() < this.getAncho()); }
/** * @return devuelve el color del caramelo en la posición a la que se llega siguiendo la lista de * movimientos. Si la posición se sale del tablero devuelve " ". */ public String colorCarameloEn(Coordenada c) { return (this.incluidoEnTablero(c)) ? this.getCaramelos()[c.getFila()][c.getColumna()].getColor() : " "; }