import java.io.IOException;
import java.util.ArrayList;
public class controlarColisionesJugadores {
static int [][] matrizFantVerde= new int [21][19];
static int [][] matrizFantCian= new int [21][19];
static int [][] matrizFantNaranja= new int [21][19];
static int [][] matrizFantAmarillo= new int [21][19];
static int [][] matrizMenores= new int [21][19];
static int colisionVerde;
static int colisionCian;
static int colisionNaranja;
static int colisionAmarillo;
static int transformacion []=new int[5];
static void interseccionPacmanConFantasma(Pantalla pantalla) throws IOException {
//CONTROLA LA INTERSECCION ENTRE EL PACMAN Y ALGUN FANTASMA
if(ayudaInterseccion(1,2,pantalla)==1){
if(transformacion[0]==1){
ClienteServidor.setPuntaje(1,200);
pantalla.setLabelLocation(175, 175, 2);
ClienteServidor.envioDeMovimiento(2, Direccion.getActualDir(2), 200, 175, 0);
}
else{
ClienteServidor.setPuntaje(2,8755);
mayorDistanciaPacmanFantasmas(pantalla);
}
}
else if(ayudaInterseccion(1,3,pantalla)==1){
if(transformacion[0]==1){
ClienteServidor.setPuntaje(1,200);
pantalla.setLabelLocation(200, 175, 3);
ClienteServidor.envioDeMovimiento(3, Direccion.getActualDir(3), 275, 175, 0);
}
else{
ClienteServidor.setPuntaje(3,8755);
mayorDistanciaPacmanFantasmas(pantalla);
}
}
else if(ayudaInterseccion(1,4,pantalla)==1){
if(transformacion[0]==1){
ClienteServidor.setPuntaje(1,200);
pantalla.setLabelLocation(225, 175, 4);
ClienteServidor.envioDeMovimiento(4, Direccion.getActualDir(4), 200, 275, 0);
}
else{
ClienteServidor.setPuntaje(4,8755);
mayorDistanciaPacmanFantasmas(pantalla);
}
}
else if(ayudaInterseccion(1,5,pantalla)==1){
if(transformacion[0]==1){
ClienteServidor.setPuntaje(1,200);
pantalla.setLabelLocation(250, 175, 5);
ClienteServidor.envioDeMovimiento(5, Direccion.getActualDir(5), 275, 275, 0);
}
else{
ClienteServidor.setPuntaje(5,8755);
mayorDistanciaPacmanFantasmas(pantalla);
}
}
}
static void interseccionFantasmaConFantasma(Pantalla pantalla) throws IOException {
//CONTROLA LA INTERSECCION ENTRE 2 FANTASMAS, PONE LAS COLISIONES EN 1 PARA INDICAR QUE SE DEBEN QUEDAR QUIETOS, SI ESTAN TRANSFORMADOR REPOSICIONA EL FANTASMA COMIDO
if(ayudaInterseccion(2,3, pantalla)==1){
if(transformacion[1]==1){
ClienteServidor.setPuntaje(2,200);
pantalla.setLabelLocation(275, 175, 3);
ClienteServidor.envioDeMovimiento(3, Direccion.getActualDir(3), 275, 175, 0);
}
else if(transformacion[2]==1){
ClienteServidor.setPuntaje(3,200);
pantalla.setLabelLocation(200, 175, 2);
ClienteServidor.envioDeMovimiento(2, Direccion.getActualDir(2), 200, 175, 0);
}
else{
colisionVerde=colisionCian=1;
retrocesoPorColisionFantasmas.rebotar(2,3,pantalla);
}
}
else if(ayudaInterseccion(2,4, pantalla)==1){
if(transformacion[1]==1){
ClienteServidor.setPuntaje(2,200);
pantalla.setLabelLocation(200, 275, 4);
ClienteServidor.envioDeMovimiento(4, Direccion.getActualDir(4), 200, 275, 0);
}
else if(transformacion[3]==1){
ClienteServidor.setPuntaje(4,200);
pantalla.setLabelLocation(200, 175, 2);
ClienteServidor.envioDeMovimiento(2, Direccion.getActualDir(2), 200, 175, 0);
}
else{
colisionVerde=colisionNaranja=1;
retrocesoPorColisionFantasmas.rebotar(2,4,pantalla);
}
}
else if(ayudaInterseccion(2,5, pantalla)==1){
if(transformacion[1]==1){
ClienteServidor.setPuntaje(2,200);
pantalla.setLabelLocation(250, 175, 5);
ClienteServidor.envioDeMovimiento(5, Direccion.getActualDir(5),250, 175, 0);
}
else if(transformacion[4]==1){
ClienteServidor.setPuntaje(5,200);
pantalla.setLabelLocation(200, 175, 2);
ClienteServidor.envioDeMovimiento(2, Direccion.getActualDir(2), 200, 175, 0);
}
else{
colisionVerde=colisionAmarillo=1;
retrocesoPorColisionFantasmas.rebotar(2,5,pantalla);
}
}
else if(ayudaInterseccion(3,4, pantalla)==1){
if(transformacion[2]==1){
ClienteServidor.setPuntaje(3,200);
pantalla.setLabelLocation(200, 275, 4);
ClienteServidor.envioDeMovimiento(4, Direccion.getActualDir(4), 200, 275, 0);
}
else if(transformacion[3]==1){
ClienteServidor.setPuntaje(4,200);
pantalla.setLabelLocation(275, 175, 3);
ClienteServidor.envioDeMovimiento(3, Direccion.getActualDir(3), 275, 175, 0);
}
else{
colisionCian=colisionNaranja=1;
retrocesoPorColisionFantasmas.rebotar(3,4,pantalla);
}
}
else if(ayudaInterseccion(3,5, pantalla)==1){
if(transformacion[2]==1){
ClienteServidor.setPuntaje(3,200);
pantalla.setLabelLocation(275, 275, 5);
ClienteServidor.envioDeMovimiento(5, Direccion.getActualDir(5), 275, 275, 0);
}
else if(transformacion[4]==1){
ClienteServidor.setPuntaje(5,200);
pantalla.setLabelLocation(275, 175, 3);
ClienteServidor.envioDeMovimiento(3, Direccion.getActualDir(3), 275, 175, 0);
}
else{
colisionCian=colisionAmarillo=1;
retrocesoPorColisionFantasmas.rebotar(3,5,pantalla);
}
}
else if(ayudaInterseccion(4,5, pantalla)==1){
if(transformacion[3]==1){
ClienteServidor.setPuntaje(4,200);
pantalla.setLabelLocation(275, 275, 5);
ClienteServidor.envioDeMovimiento(5, Direccion.getActualDir(5), 275, 275, 0);
}
else if(transformacion[4]==1){
ClienteServidor.setPuntaje(5,200);
pantalla.setLabelLocation(200, 275, 4);
ClienteServidor.envioDeMovimiento(4, Direccion.getActualDir(4), 200, 275, 0);
}
else{
colisionNaranja=colisionAmarillo=1;
retrocesoPorColisionFantasmas.rebotar(4,5,pantalla);
}
}
}
public static int getColision(int dir) { //DEVUELVE LAS COLISIONES, SI ES 1 SE QUEDAN QUIETOS, SI ES 0 PUEDEN MOVERSE
if(dir==2)
return colisionVerde;
else if(dir==3)
return colisionCian;
else if(dir==4)
return colisionNaranja;
else
return colisionAmarillo;
}
public static void setColision(int dir) { //PONEN LAS COLISIONES EN 0 POR QUE YA SE CUMPLIERON LOS 2 SEGUNDOS DE ESPERA
if(dir==2)
colisionVerde=0;
else if(dir==3)
colisionCian=0;
else if(dir==4)
colisionNaranja=0;
else if(dir==5)
colisionAmarillo=0;
}
public static int nuevaColision(int nroFantasma, int nroFantColision, Pantalla pantalla) {
if(nroFantasma==2){
if(nroFantColision!=3 && ayudaInterseccion(nroFantasma,3,pantalla)==1)
return 1;
else if(nroFantColision!=4 && ayudaInterseccion(nroFantasma,4,pantalla)==1)
return 1;
if(nroFantColision!=5 && ayudaInterseccion(nroFantasma,5,pantalla)==1)
return 1;
}
else if(nroFantasma==3){
if(nroFantColision!=2 && ayudaInterseccion(nroFantasma,2,pantalla)==1)
return 1;
else if(nroFantColision!=4 && ayudaInterseccion(nroFantasma,4,pantalla)==1)
return 1;
if(nroFantColision!=5 && ayudaInterseccion(nroFantasma,5,pantalla)==1)
return 1;
}
else if(nroFantasma==4){
if(nroFantColision!=2 && ayudaInterseccion(nroFantasma,2,pantalla)==1)
return 1;
else if(nroFantColision!=3 && ayudaInterseccion(nroFantasma,3,pantalla)==1)
return 1;
if(nroFantColision!=5 && ayudaInterseccion(nroFantasma,5,pantalla)==1)
return 1;
}
else if(nroFantasma==5){
if(nroFantColision!=2 && ayudaInterseccion(nroFantasma,2,pantalla)==1)
return 1;
else if(nroFantColision!=3 && ayudaInterseccion(nroFantasma,3,pantalla)==1)
return 1;
if(nroFantColision!=4 && ayudaInterseccion(nroFantasma,4,pantalla)==1)
return 1;
}
return 0;
}
private static int ayudaInterseccion(int i, int j, Pantalla pantalla) {//SI HAY COLISION RETORNA 1
if( (pantalla.getLabelX(i)==(pantalla.getLabelX(j)+25) && pantalla.getLabelY(i)==pantalla.getLabelY(j)) || (pantalla.getLabelX(i)==(pantalla.getLabelX(j)-25) && pantalla.getLabelY(i)==pantalla.getLabelY(j)) || (pantalla.getLabelX(i)==pantalla.getLabelX(j) && pantalla.getLabelY(i)==(pantalla.getLabelY(j)+25)) || (pantalla.getLabelX(i)==pantalla.getLabelX(j) && pantalla.getLabelY(i)==(pantalla.getLabelY(j)-25)) )
return 1;
return 0;
}
private static void mayorDistanciaPacmanFantasmas(Pantalla pantalla) {
int nuevoX = 0;
int nuevoY = 0;
int xVerde=(int) Math.floor(pantalla.getLabelX(2)/25);
int yVerde=(int) Math.floor(pantalla.getLabelY(2)/25);
int xCian=(int) Math.floor(pantalla.getLabelX(3)/25);
int yCian=(int) Math.floor(pantalla.getLabelY(3)/25);
int xNaranja=(int) Math.floor(pantalla.getLabelX(4)/25);
int yNaranja=(int) Math.floor(pantalla.getLabelY(4)/25);
int xAmarillo=(int) Math.floor(pantalla.getLabelX(5)/25);
int yAmarillo=(int) Math.floor(pantalla.getLabelY(5)/25);
crearMatrizFantasma(matrizFantVerde,xVerde,yVerde);//CREA LA MATRIZ DEL FANTASMA VERDE
crearMatrizFantasma(matrizFantCian,xCian,yCian);//CREA LA MATRIZ DEL FANTASMA CIAN
crearMatrizFantasma(matrizFantNaranja,xNaranja,yNaranja);//CREA LA MATRIZ DEL FANTASMA NARANJA
crearMatrizFantasma(matrizFantAmarillo,xAmarillo,yAmarillo);//CREA LA MATRIZ DEL FANTASMA AMARILLO
for(int i=0;i<=20;i++){//AGREGA LOS 0 DE LAS PAREDES A LAS 4 MATRICES
for(int j=0;j<=18;j++){
if(pantalla.getValorMapa(i, j)==0)
matrizFantVerde[i][j]=matrizFantCian[i][j]=matrizFantNaranja[i][j]=matrizFantAmarillo[i][j]=0;
}
}
for(int i=0;i<=20;i++){//CARGO LA MATRIZ matrizMenores CON UN NUMERO GRANDE
for(int j=0;j<=18;j++){
matrizMenores[i][j]=1000;
}
}
//CARGO LA MATRIZ MENORES CON LOS MENORES REALES DE CADA MATRIZ DE FANTASMAS
menoresReales(matrizFantVerde,matrizMenores);
menoresReales(matrizFantCian,matrizMenores);
menoresReales(matrizFantNaranja,matrizMenores);
menoresReales(matrizFantAmarillo,matrizMenores);
//BUSCO EL MAYOR ENTRE LOS MENORES
int mayor=0;
int cantidadMayores=0;
for(int i=0;i<=20;i++){
for(int j=0;j<=18;j++){
if(matrizMenores[i][j]>mayor){
cantidadMayores=1;
mayor=matrizMenores[i][j];
nuevoX=j;
nuevoY=i;
}
else if(matrizMenores[i][j]==mayor)
cantidadMayores++;
}
}
if(cantidadMayores>1){
int [] vec= new int[4];
ArrayList<Integer> array = new ArrayList<>();
for(int i=0;i<=20;i++){
for(int j=0;j<=18;j++){
if(matrizMenores[i][j]==mayor){
vec[0]=matrizFantVerde[i][j];
vec[1]=matrizFantCian[i][j];
vec[2]=matrizFantNaranja[i][j];
vec[3]=matrizFantAmarillo[i][j];
int aux;
for(int k=0;k<3;k++)
for(int l=0;l<3;l++){
if(vec[l]>vec[l+1]){
aux=vec[l];
vec[l]=vec[l+1];
vec[l+1]=aux;
}
}
array.add(vec[0]);
array.add(vec[1]);
array.add(vec[2]);
array.add(vec[3]);
}
}
}
int menor,bandera=0;
for(int c=0;c<cantidadMayores;c++){
menor=array.get(c);//GUARDA COMO MENOR EL PRIMER ELEMENTO Y CONTROLA A PARTIR DE ESE
for(int i=c+4;i<cantidadMayores*4;i+=4){
if(array.get(i)<menor){//SI ENCUENTRA UN ELEMENTO MENOR QUIERE DECIR QUE MUY PROBABLEMENTE ESE SEA EL QUE SE ELEGIRA COMO POSICION PARA HUBICAR EL PACMAN
menor=array.get(i);
bandera=i;
}
}
if(bandera!=0)
break;
}
if(bandera==0)
bandera=1;
else
bandera=((int) Math.floor(bandera))+1;
for(int i=0;i<=20;i++){
for(int j=0;j<=18;j++){
if(matrizMenores[i][j]==mayor){
if(bandera==1){
nuevoX=j;
nuevoY=i;
}
else
bandera--;
}
}
}
}
pantalla.setLabelLocation(nuevoX*25, nuevoY*25, 1);
try {
ClienteServidor.envioDeMovimiento(1, Direccion.getActualDir(1), nuevoX*25, nuevoY*25, 0);
} catch (IOException e) {
e.printStackTrace();
}
}
private static void menoresReales(int[][] matrizFantasma, int[][] matrizMenores) {//CARGA LOS MENORES DE LAS MATRICES EN LA MATRIZ matrizMenores
for(int i=0;i<=20;i++)
for(int j=0;j<=18;j++)
if(matrizFantasma[i][j]<matrizMenores[i][j])
matrizMenores[i][j]=matrizFantasma[i][j];
}
private static void crearMatrizFantasma(int[][] matrizFantasma, int xFantasma, int yFantasma) {//CREA LA MATRIZ DE CADA FANTASMAS
int cont=1;
matrizFantasma[yFantasma][xFantasma]=0;
for(int columna=xFantasma+1;columna<=17;columna++){//LLENA LA FILA HACIA LA DERECHA
matrizFantasma[yFantasma][columna]=cont;
cont++;
}
cont=1;
for(int columna=xFantasma-1;columna>=1;columna--){//LLENA LA FILA HACIA LA IZQUIERDA
matrizFantasma[yFantasma][columna]=cont;
cont++;
}
cont=1;
for(int fila=yFantasma-1;fila>=1;fila--){//LLENA LA COLUMNA HACIA ARRIBA
matrizFantasma[fila][xFantasma]=cont;
cont++;
}
cont=1;
for(int fila=yFantasma+1;fila<=19;fila++){//LLENA LA COLUMNA HACIA ABAJO
matrizFantasma[fila][xFantasma]=cont;
cont++;
}
for(int fila=yFantasma-1;fila>=1;fila--)//LLENA EL CONJUNTO HACIA ARRIBA A LA IZQUIERDA
for(int columna=1;columna<=xFantasma-1;columna++)
matrizFantasma[fila][columna]=matrizFantasma[fila+1][columna]+1;
for(int fila=yFantasma-1;fila>=1;fila--)//LLENA EL CONJUNTO HACIA ARRIBA A LA DERECHA
for(int columna=xFantasma+1;columna<=17;columna++)
matrizFantasma[fila][columna]=matrizFantasma[fila+1][columna]+1;
for(int fila=yFantasma+1;fila<=19;fila++)//LLENA EL CONJUNTO HACIA ABAJO A LA IZQUIERDA
for(int columna=1;columna<=xFantasma-1;columna++)
matrizFantasma[fila][columna]=matrizFantasma[fila-1][columna]+1;
for(int fila=yFantasma+1;fila<=19;fila++)//LLENA EL CONJUNTO HACIA ABAJO A LA DERECHA
for(int columna=xFantasma+1;columna<=17;columna++)
matrizFantasma[fila][columna]=matrizFantasma[fila-1][columna]+1;
}
public static void setTransformacion(int cli){
transformacion[cli-1]=1;
}
public static int getTransformacion(int clieJugador) {
return transformacion[clieJugador-1];
}
public static void resetTransformacion(int cli){
transformacion[cli-1]=0;
}
}
No hay comentarios:
Publicar un comentario