Ejemplo n.º 1
0
 public Jet(Jet N)
 {
     Now     = (PointD)N.Now;
     Path    = N.Path.ToList();
     NowOil  = N.NowOil;
     MaxOil  = N.MaxOil;
     L       = N.L;
     FlyCost = N.FlyCost;
 }
Ejemplo n.º 2
0
 private void button1_Click(object sender, EventArgs e)
 {
     End = new PointD(5, 5);
     TL.Add(new Tower()
     {
         P = 2, Place = new PointD(2, 5), R = 2
     });
     TL.Add(new Tower()
     {
         P = 2, Place = new PointD(4, 2), R = 2
     });
     TL.Add(new Tower()
     {
         P = 1, Place = new PointD(5, 4), R = 3
     });
     w = 1;
     for (int i = 0; i <= costlimit; i++)
     {
         Jet j = new Jet(new PointD(1, 1), i);
         Recu(j);
     }
 }
Ejemplo n.º 3
0
        void Recu(Jet NowJet)
        {
            Graphics g;
            double   distemp = PointD.GetDistance(NowJet.Now, End);

            distemp = (distemp < 0.01d ? 0d : distemp);
            if (distemp == 0)
            {
                JL.Add(new Jet(NowJet));
                int FCindex = JL.FindIndex(x => x.FlyCost == JL.Min(y => y.FlyCost));
                if (tempindex != FCindex)
                {
                    tempindex = FCindex;
                    Show(JL[tempindex].Path);
                }
                Application.DoEvents();
                return;
            }
            if (NowJet.NowOil < 0)//沒油了
            {
                return;
            }
            if (distemp > NowJet.NowOil)
            {
                return;
            }

            Jet TempJet;

            if (true)//Point
            {
                int tempdis = (int)Math.Round(NowJet.NowOil, 0);
                if (tempdis < 0)
                {
                    return;
                }
                for (int i = 0; i <= tempdis; i++)
                {
                    for (int j = 0; j <= i; j++)
                    {
                        for (int k = 0; k <= i; k++)
                        {
                            TempJet = new Jet(NowJet);
                            PointD NP = new PointD(TempJet.Now.X + j, TempJet.Now.Y + k);

                            bool flag = false;
                            foreach (var item in TempJet.Path)
                            {
                                if (item.X == NP.X && item.Y == NP.Y)
                                {
                                    flag = true;
                                    break;
                                }
                            }
                            if (flag)
                            {
                                continue;
                            }
                            TempJet.FlyPoint(new PointD(i, j), TL, w);
                            Recu(TempJet);
                        }
                    }
                }
            }
            else//Angle
            {
                for (int i = 0; i <= 90; i += 1)
                {
                    TempJet = new Jet(NowJet);
                    TempJet.FlyAngle(i, TL, w);
                    Recu(TempJet);
                }
            }
        }