Example #1
0
 /**
  * Método que define el comportamiento de la entidad stormtrooper. Es obligatorio para toda
  * entidad animada. Calculará la ruta más cercana a la fuerza y se moverá hacia ella. En caso de
  * pasar caer en la misma celda que otro soldado, se quedará inmóvil si ésta está apagada, y se
  * moverá aleatoriamente a una celda adyacente, si está ardiendo.
  */
 public void actuar() {
   Orientacion o = super.calcularRuta();
   super.mover(o);
   if (this.getCelda() instanceof Explosion) {
     boolean ardiendo = ((Explosion) this.getCelda()).isArdiendo();
     for (Entidad e : this.getCelda().getEntidades()) {
       if (e instanceof StormTrooper && e != this) {
         if (ardiendo) {
           Random r = new Random();
           Celda c = getCelda().getCeldasVecinas().get(r.nextInt(4));
           mover(c.getPosicion().adyacencia(c.getPosicion()));
         } else {
           super.mover(null);
         }
       }
     }
   }
 }
  /**
   * Este método crea la lista de enemigos que deben ser creados en el mapa segun la ronda y el
   * nivel.
   *
   * @param nivel
   */
  public void crearNuevosEnemigos(int cantidad_enemigos) {

    Cantidad_Enemigos = cantidad_enemigos;

    if (ColaEnemigos == null) ColaEnemigos = new LinkedList();
    else ColaEnemigos.clear();

    /* Hago esta copia para no perder la informacion inicial.
     * Me facilita analizar si cuando se persiste la fabrica
     * respeta la cantidad al recuperarse.
     */
    int cantidadDeEnemigos = Cantidad_Enemigos;

    // Itero sobre todas las rondas
    for (int i = 0; i < niveles_base.length; i++) {

      /* Aca es donde calculo los enemigos que voy a crear
       * segun los porsentajes cargados en le array.
       */
      int cant_enemigos_actual = (int) (cantidadDeEnemigos * niveles_base[i]);
      /* A la cantidad de enemigos total que tengo le
       * resto los que voy a crear en esta ronda.
       */
      cantidadDeEnemigos = cantidadDeEnemigos - cant_enemigos_actual;

      Escenario escenario = Escenario.obtenerEscenario();
      Posicion aux_pos = new Posicion(escenario.getEntrada());

      for (int j = 0; j < cant_enemigos_actual; j++) {
        /* Uso un random para elegir al azar que enemigo voy
         * a crear.
         */
        int x = (int) (Math.random() * 4);
        Enemigo para_crear = (Enemigo) CodigosUtiles.get(String.valueOf(x));

        ColaEnemigos.add(para_crear.clone());
      }
    }

    // Establezco el intervalo entre salidas de enemigos. EL valor 150 fue
    // puesto para que el intervalo resultante fuera adecuado, es decir si
    // muy corto ni muy largo
    intervalo_entre_salidas = 150 / NumeroNivel;
  }
  /**
   * Act - do whatever the Capitan wants to do. This method is called whenever the 'Act' or 'Run'
   * button gets pressed in the environment.
   */
  public void act() {
    if (!pasoAlJugador()) {
      super.act();
      rebota();
    } else {
      Escenario e = (Escenario) getWorld();
      Batman i = e.getBatman();
      // i.restaSalud(i.getSalud()/2);

      e.restaNumEnemigos();

      getWorld().removeObject(this);
    }
  }
  /**
   * ESte método crea uan isntancia de la fabrica de enemigos, a partir de un elemento XML
   *
   * @param xmlElement El elemento XML que representa la Fabrica
   * @return Una instancia de la Fabrica de Enemigos con los datos del XML
   * @throws InvocationTargetException
   * @throws IllegalAccessException
   * @throws InstantiationException
   * @throws NoSuchMethodException
   * @throws ClassNotFoundException
   * @throws IllegalArgumentException
   * @throws SecurityException
   */
  public static FabricaDeEnemigos recuperar(Element xmlElement)
      throws SecurityException, IllegalArgumentException, ClassNotFoundException,
          NoSuchMethodException, InstantiationException, IllegalAccessException,
          InvocationTargetException {

    // Cargo los datos principales del XML
    int cant_enemigos = Integer.parseInt(xmlElement.getAttributeValue("Cantidad_Enemigos"));
    int num_nivel = Integer.parseInt(xmlElement.getAttributeValue("Nivel"));

    // Si no existe instancia crea uan isntancia nueva de la fabrica.
    if (fabrica == null) fabrica = new FabricaDeEnemigos(cant_enemigos, num_nivel);
    else {

      // Si ya existe, le cmabio los valores iniciales a la fabrica.
      fabrica.Cantidad_Enemigos = cant_enemigos;
      fabrica.NumeroNivel = num_nivel;

      fabrica.intervalo_entre_salidas = 150 / num_nivel;
    }

    /*
     * En ambos casos, la cola de enemigos que viene con el constructor no
     * tiene los enemigos adecuados, por eso la borramos y colocamos los
     * enemigos del XML
     */

    fabrica.ColaEnemigos.clear();

    List Element_List = xmlElement.getChildren();

    Iterator it = Element_List.iterator();

    while (it.hasNext()) {
      Element aux = (Element) it.next();
      if (aux.getName() == "Enemigo") {
        Enemigo enemigo = Enemigo.recuperar(aux);
        fabrica.ColaEnemigos.add(enemigo);
      }
    }
    Escenario escenario = Escenario.obtenerEscenario();
    escenario.setCantBichos(fabrica.ColaEnemigos.size() + escenario.getCantBichos());
    return fabrica;
  }
Example #5
0
  @Override
  protected void onManagedUpdate(float pSecondsElapsed) {
    super.onManagedUpdate(pSecondsElapsed);

    if (!juegoCorriendo) {
      return;
    }

    // Acumular tiempo
    tiempoEnemigos += pSecondsElapsed;
    if (tiempoEnemigos > LIMITE_TIEMPO) {
      // Se cumplió el tiempo
      tiempoEnemigos = 0;
      if (LIMITE_TIEMPO > 0.5f) {
        LIMITE_TIEMPO -= 0.15f;
      }
      Sprite spriteEnemigo =
          cargarSprite(
              ControlJuego.ANCHO_CAMARA + regionEnemigo.getWidth(),
              (float) (Math.random() * ControlJuego.ALTO_CAMARA - regionEnemigo.getHeight())
                  + regionEnemigo.getHeight(),
              regionEnemigo);
      Enemigo nuevoEnemigo = new Enemigo(spriteEnemigo);
      listaEnemigos.add(nuevoEnemigo);
      attachChild(nuevoEnemigo.getSprite());
      Log.i("Tamaño", "Datos: " + listaEnemigos.size());
    }
    // Actualizar cada uno de los listaEnemigos y ver si alguno ya salió de la pantalla
    for (int i = listaEnemigos.size() - 1; i >= 0; i--) {
      Enemigo enemigo = listaEnemigos.get(i);

      enemigo.mover(-10, 0);

      if (enemigo.getSprite().getX() < -enemigo.getSprite().getWidth()) {
        detachChild(enemigo.getSprite());
        listaEnemigos.remove(enemigo);
      }

      // Revisa si choca el personaje con el enemigo
      if (spritePersonaje.collidesWith(enemigo.getSprite())) {
        detachChild(enemigo.getSprite());
        listaEnemigos.remove(enemigo);
        energia -= 10;
        Log.i("ENERGIA", "Energia: " + energia);
        if (energia <= 0) {
          juegoCorriendo = false;
          // Agrega pantalla de fin
          Sprite spriteFin =
              new Sprite(
                  ControlJuego.ANCHO_CAMARA / 2,
                  ControlJuego.ALTO_CAMARA / 2,
                  regionFin,
                  actividadJuego.getVertexBufferObjectManager()) {
                @Override
                public boolean onAreaTouched(
                    TouchEvent pSceneTouchEvent, float pTouchAreaLocalX, float pTouchAreaLocalY) {
                  if (pSceneTouchEvent.isActionUp()) {
                    onBackKeyPressed();
                  }
                  return super.onAreaTouched(pSceneTouchEvent, pTouchAreaLocalX, pTouchAreaLocalY);
                }
              };
          registerTouchArea(spriteFin);
          attachChild(spriteFin);
        }
      }
    }
  }