示例#1
0
  /// @pre temps > 0
  /// @post Retorna una taula(t). t[0] i t[1] són les coordenades de n després de que hagui passat
  // temps iteracions
  double[] preveurePosicio(Nau n, double temps) {
    double dx = temps * n.velocitat_ * Math.cos(Math.toRadians(n.angleVelocitat_));
    double dy = temps * n.velocitat_ * -Math.sin(Math.toRadians(n.angleVelocitat_));

    double[] t = n.obtenirCentreTriangle();
    double centrex = t[0];
    double centrey = t[1];

    double[] previsio = {centrex + dx, centrey + dy};
    return previsio;
  }
示例#2
0
  /// @pre --
  /// @post retorna l'angle que ha d'apuntar la NauEnemiga(e) per aconseguir que un RaigLaser
  // disparat per e
  ///     col·lisioni amb n
  private int angleApuntarMoviment(Nau n) {
    double[] cn = n.obtenirCentreTriangle();
    double[] ce = obtenirCentreTriangle();

    double dist = Math.hypot(Math.abs(cn[0] - ce[0]), Math.abs(cn[1] - ce[1]));
    double temps = dist / velocitatRaig_;
    double[] previsio = preveurePosicio(n, temps);

    double angle = angleApuntar(previsio);
    return (int) angle;
  }
示例#3
0
  /// @pre NauEnemiga viva
  /// @post la NauEnemiga evita el Meteorit més proper de lm
  ///       si no hi ha cap Meteorit proper llavors ataca a n
  ///       si n és null llavors únicament evita meteorits
  public RaigLaser atacarNau(Nau n, LinkedList<Meteorit> lm) {
    RaigLaser r = null;

    pararRotacio();
    if (!evitarMeteorits(lm) && n != null) {
      double[] pos = n.obtenirCentreTriangle();
      if (distancia(pos[0], pos[1]) <= l_ * 10) {
        r = apuntaDispara(n);
      } else {
        movimentObjectiu(pos);
      }
    }
    return r;
  }