// se aplica la estrategia solo si el aplicador esta a una distancia
 // valida para disparar y no ser daniado por el proyectil
 public void Aplicar()
 {
     Casilla posicionDelProyectil = this.aplicador.Posicion();
     int[] direccionDelProyectil = this.aplicador.Direccion();
     int rangoDelProyectil = Proyectil.RANGO;
     try
     {
         Casilla posicionAdyacente = posicionDelProyectil.CasillaAdyacenteEnLaDireccion(direccionDelProyectil);
         bool puedeAplicarse = true;
         while (rangoDelProyectil >= 0 && puedeAplicarse)
         {
             if (!posicionAdyacente.EstaVacia())
                 puedeAplicarse = false;
             rangoDelProyectil--;
             posicionAdyacente = posicionAdyacente.CasillaAdyacenteEnLaDireccion(direccionDelProyectil);
         }
         if (puedeAplicarse)
         {
             Proyectil proyectil = new Proyectil();
             Tablero.GetInstancia().AgregarEntidad(proyectil, posicionDelProyectil.X, posicionDelProyectil.Y);
             proyectil.Direccionar(this.aplicador.Direccion());
             proyectil.CuandoPaseElTiempo(this.aplicador.PorcentajeDeRetardo());
             proyectil.AnotarLanzador(this.aplicador);
         }
         else
             this.aplicador.NotificarExplosion(true);
     }
     catch (CasillaFueraDeRangoError e)
     {
         e.NoHacerNada();
         this.aplicador.NotificarExplosion(true);
     }
 }
        public void TestElProyectilExplotaPorqueSuProximaPosicionEstaFueraDeRango()
        {
            Proyectil proyectil = new Proyectil();
            tablero.AgregarEntidad(proyectil, 0, 0);

            // esto se hace para que el proyectil apunte hacia arriba
            int[] arriba = { -1, 0 };
            proyectil.Direccionar(arriba);

            // el proyectil explota porque se estrella contra la pared del tablero
            // (su proxima casilla esta fuera del tablero)
            proyectil.Explotar();
            // asserts
            Assert.IsTrue(proyectil.FueDestruido());

            // limpia el tablero
            tablero.Actualizar();
        }