private int iteracionMejorParaRecuperarBalonSegunAltura(GameSituations sp) { int result = -1; int[] recuperadores = sp.getRecoveryBall(); if (recuperadores.length > 1) { int iteracionRecuperacion = recuperadores[0]; int iteracionesMaximas = 30; int cont = 0; while (cont < iteracionesMaximas || result != -1) { double[] posRecuperacion = sp.getTrajectory(iteracionRecuperacion); if (posRecuperacion.length == 3 && posRecuperacion[2] <= Constants.ALTURA_CONTROL_BALON) { // podemos controlar el balón por alto result = iteracionRecuperacion; break; } else { cont++; iteracionRecuperacion++; } } if (result == -1) { result = iteracionRecuperacion; } } return result; }
private void cambiarAlineacion(GameSituations sp, List<Command> result) { if (sp.isRivalStarts()) { // //System.out.println("SACA RIVAL. iteracionesParaSacar: " + iteracionesParaSacar); int cont = 0; int[] recuperadores = sp.getRecoveryBall(); if (recuperadores.length > 1) { for (int i = 1; i < 2; i++) { double[] posRecuperacion = sp.getTrajectory(recuperadores[0]); result.add( new CommandMoveTo( recuperadores[i], new Position(posRecuperacion[0], posRecuperacion[1]))); } } if (sp.ballPosition().equals(Constants.cornerInfDer)) { // //System.out.println("SAQUE " + cont++); usarAlineacion(result, cornerInferiorDer, sp); } else if (sp.ballPosition().equals(Constants.cornerInfIzq)) { // //System.out.println("SAQUE " + cont++); usarAlineacion(result, cornerInferiorIzq, sp); } else if (sp.ballPosition().equals(Constants.cornerSupIzq)) { // //System.out.println("SAQUE " + cont++); usarAlineacion(result, cornerSuperiorIzq, sp); } else if (sp.ballPosition().equals(Constants.cornerSupDer)) { // //System.out.println("SAQUE " + cont++); usarAlineacion(result, cornerSuperiorDer, sp); } } else if (sp.isStarts()) { // System.out.println("SACO. iteracionesParaSacar: " + iteracionesParaSacar); int cont = 0; iteracionesParaSacar++; int[] recuperadores = sp.getRecoveryBall(); if (recuperadores.length > 1) { for (int i = 1; i < 2; i++) { double[] posRecuperacion = sp.getTrajectory(recuperadores[0]); result.add( new CommandMoveTo( recuperadores[i], new Position(posRecuperacion[0], posRecuperacion[1]))); } } if (sp.ballPosition().equals(Constants.cornerInfDer)) { // //System.out.println("SAQUE " + cont++); usarAlineacion(result, cornerInferiorDer, sp); } else if (sp.ballPosition().equals(Constants.cornerInfIzq)) { // //System.out.println("SAQUE " + cont++); usarAlineacion(result, cornerInferiorIzq, sp); } else if (sp.ballPosition().equals(Constants.cornerSupIzq)) { // //System.out.println("SAQUE " + cont++); usarAlineacion(result, cornerSuperiorIzq, sp); } else if (sp.ballPosition().equals(Constants.cornerSupDer)) { // //System.out.println("SAQUE " + cont++); usarAlineacion(result, cornerSuperiorDer, sp); } } else { usarAlineacion(result, alineacion1, sp); } }
public List<Command> execute(GameSituations sp) { List<Command> result = new ArrayList<Command>(); cambiarAlineacion(sp, result); if (sp.canKick().length > 0) { for (int jugador : sp.canKick()) { if (jugador == porteroIndice) { CommandHitBall golpear = new CommandHitBall(jugador, 90, 1, 40); result.add(golpear); } else if (sp.isStarts()) { // //System.out.println("SACO. iteracionesParaSacar: " + iteracionesParaSacar); if (iteracionesParaSacar == Constants.ITERACIONES_SAQUE - 10) { int count = 0; Random r = new Random(); int j = -1; Position[] jugadores = sp.myPlayers(); while ((j = r.nextInt(jugadores.length)) == jugador && jugadores[jugador].getY() > jugadores[j].getY() && count < 20) { count++; } ; result.add(new CommandHitBall(jugador, jugadores[j], 3, r.nextInt(45))); iteracionesParaSacar = 0; } else if (iteracionesParaSacar > Constants.ITERACIONES_SAQUE) { iteracionesParaSacar = 0; } else { // Desplazamos a un compañero para que le pueda sacar el balón int[] jugadoresParaCombinar = sp.myPlayers()[jugador].nearestIndexes(sp.myPlayers(), 0, jugador); if (jugadoresParaCombinar.length > 0) { for (int jugadorParaCombinar : jugadoresParaCombinar) { if (jugadorParaCombinar != 0 && jugadorParaCombinar != jugador) { double x = 0; if (sp.ballPosition().getX() < 0) { x = sp.ballPosition().getX() + 10; } else { x = sp.ballPosition().getX() - 10; } Position newPosition = new Position(x, sp.ballPosition().getY()); CommandMoveTo muevete = new CommandMoveTo(jugadorParaCombinar, newPosition); result.add(muevete); break; } } } } } else if (jugador == 8 || jugador == 9 || jugador == 10 || jugador == 11) { Random r = new Random(); if (r.nextBoolean()) { result.add(new CommandHitBall(jugador, Constants.centroArcoSup, 3, 12 + r.nextInt(6))); } else { if (r.nextBoolean()) { result.add( new CommandHitBall(jugador, Constants.posteDerArcoSup, 3, 12 + r.nextInt(6))); } else { result.add( new CommandHitBall(jugador, Constants.posteIzqArcoSup, 3, 12 + r.nextInt(6))); } } } else if (jugador == 5 || jugador == 6) { result.add(new CommandHitBall(jugador)); } else { int count = 0; Random r = new Random(); int j = -1; Position[] jugadores = sp.myPlayers(); while ((j = r.nextInt(jugadores.length)) == jugador && jugadores[jugador].getY() > jugadores[j].getY() && count < 20) { count++; } ; result.add(new CommandHitBall(jugador, jugadores[j], 3, r.nextInt(45))); } } } // Portero int[] recuperadores = sp.getRecoveryBall(); if (recuperadores.length > 1) { for (int i = 1; i < 2; i++) { double[] posRecuperacion = sp.getTrajectory(iteracionMejorParaRecuperarBalonSegunAltura(sp)); result.add( new CommandMoveTo( recuperadores[i], new Position(posRecuperacion[0], posRecuperacion[1]))); } } // if(sp.myGoals() == sp.rivalGoals() && sp.ballPosition().distancia(sp.myPlayers()[0]) < 50){ // // if (sp.canKick().length > 0 && sp.rivalCanKick().length == 0) { // // for(int jugador : sp.canKick()){ // // if(jugador != 0){ // // El portero no actúa aquí // CommandHitBall golpear = new CommandHitBall(jugador); // result.add(golpear); // // ComandoIrA irA = new ComandoIrA(jugador, new Posicion(40, sp.myPlayers()[0].getY())); // result.add(irA); // } // } // // } // // } return result; }