/// @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; }
/// @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; }
/// @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; }