public class Mapa {
private Cosas[][] cosas;
public Mapa(int filas, int columnas) { this.cosas = new Cosas[filas][columnas];
for (int i = 0; i < this.cosas.length; i++)
for (int j = 0; j < this.cosas[i].length; j++)
cosas[i][j] = Cosas.NADA;
}
/**
* Coloca la cosa en una posición del mapa. Sirve para
* preparar los mapas
* @param cosa, la cosa a colocar
* @param x, la posición donde colocar la cosa en x
* @param y, la posición donde colocar la cosa en y
*/
public void colocar(Cosas cosa, int x, int y) { if(x > cosas.length - 1 || y > cosas[x].length || x < 0 || y < 0){ Error posicionErronea = new Error("Intenta colocar una cosa por fuera del mapa"); throw posicionErronea;
}
this.cosas [x][y] = cosa;
}
/**
* Buscará la cosa más cercana desde la posición suministrada
* @param cosa, la cosa a buscar. No debe ser Cosas.NADA
* @param x, la posición de origen en x
* @param y, la posición de origen en y
* @return la posicion de la cosa más cercana a x, y
*/
public Posicion buscarCosaMasCercana(Cosas cosa, int x, int y) { // completar, evitando utilizar "fuerza bruta"
Posicion unaPosicion = new Posicion();
Cosas objetoABuscar = Cosas.NADA;
int vueltasX = x ;
int vueltasY = y ;
int cont = 1;
if (x > cosas.length - 1 || y > cosas[x].length - 1|| x < 0 || y < 0){ Error estasFuera = new Error("Estas fuera del mapa"); throw estasFuera;
}
else if (cosa == Cosas.NADA){ Error noSeBuscaNada = new Error("No puede buscar este objeto"); throw noSeBuscaNada;
}
while(objetoABuscar != cosa){ if (cosas[x][y] == cosa){ objetoABuscar = cosa;
}
else {
if(x + cont < cosas.length - 1){
for(int a = x;a < vueltasX + cont;a++){ if(cosas[a][y] == cosa){ objetoABuscar = cosa;
}
x++;
}
vueltasX = x;
}
if(y - cont > 0){
for(int i = y ;i > vueltasY - cont ; i--){ if(cosas[x][i] == cosa ){ objetoABuscar = cosa;
}
y--;
}}
vueltasY = y;
cont++;
if(x - cont > 0){
for(int ar = x ; ar > vueltasX - cont ; ar--){ if(cosas[ar][y] == cosa){ objetoABuscar = cosa;
}
x--;
}}
vueltasX = x;
if(y + cont < cosas [x].length - 1){
for(int d = y ; d < vueltasY + cont ; d++){ if(cosas[x][d] == cosa){ objetoABuscar = cosa;
}
y++;
}}
vueltasY = y;
cont++;
}
}
if(objetoABuscar != cosa){ Error noEsta = new Error("El objeto no esta en el mapa"); throw noEsta;
}else { unaPosicion.x = x;
unaPosicion.y = y;
System.out.print(x+","+y);
}
return unaPosicion;
}
/**
* Buscará la cosa más lejana desde la posición suministrada
* @param cosa, la cosa a buscar. Puede ser Cosas.NADA
* @param x, la posición de origen en x
* @param y, la posición de origen en y
* @return la posicion de la cosa más lejana a x, y
*/
public Posicion buscarCosaMasLejana(Cosas cosa, int x, int y) { Posicion unaPosicion = new Posicion ();
Cosas cosaABuscar = Cosas.NADA;
int cont = 1;
int vueltasX = 0;
int vueltasY = 0;
if (x > cosas.length - 1 || y > cosas[x].length - 1|| x < 0 || y < 0){ Error estasFuera = new Error("Estas fuera del mapa"); throw estasFuera;
}
else if (cosa == Cosas.NADA){ Error noSeBuscaNada = new Error("No puede buscar este objeto"); throw noSeBuscaNada;
}
if (cosas[x][y] == cosa){ cosaABuscar = cosa;
}
else {
if(x + cont < cosas.length - 1){
for(int a = x;a < vueltasX + cont;a++){ if(cosas[a][y] == cosa){ cosaABuscar = cosa;
}
x++;
}
vueltasX = x;
}
if(y - cont > 0){
for(int i = y ;i > vueltasY - cont ; i--){ if(cosas[x][i] == cosa ){ cosaABuscar = cosa;
}
y--;
}}
vueltasY = y;
cont++;
if(x - cont > 0){
for(int ar = x ; ar > vueltasX - cont ; ar--){ if(cosas[ar][y] == cosa){ cosaABuscar = cosa;
}
x--;
}}
vueltasX = x;
if(y + cont < cosas [x].length - 1){
for(int d = y ; d < vueltasY + cont ; d++){ if(cosas[x][d] == cosa){ cosaABuscar = cosa;
}
y++;
}}
vueltasY = y;
cont++;
}
if (){
}
}
}
class Posicion { int x, y;
}
enum Cosas { ENEMIGO, FRUTA, NADA, PARED
}