Пример #1
0
  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;
  }
Пример #2
0
  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);
    }
  }
Пример #3
0
  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;
  }