Symulacja ruchu obiektu (statku) poruszającego się po ustalonej trasie.

0

Witam na początku chcę zaznaczyć, że jestem totalnie początkujący jesli chodzi o graficzny interfejs i mam takie oto pytanie : Chcę, zasymulować ruch obiektu (statek) ,który porusza się po trasie ,która składa się z odcinków (dwóch punktów i parametrów lotu) Moj kod:

namespace KontrolaLotow
{
    class Punkt
    {
        public int X { get; private set; }
        public int Y { get; private set; }
 
        public void Przesun(int dx, int dy)
        {
            this.X += dx;
            this.Y += dy;
        }
        public Punkt() { }
        public Punkt(int x, int y)
        {
            this.X = x;
            this.Y = y;
        }
        public Punkt(Punkt punkt)
        {
            this.X = punkt.X;
            this.Y = punkt.Y;
        }
    }
}

    class ParametrLotu
    {
        public double Wysokosc { get; set; }
        public String Kierunek { get; set; }
        public double Predkosc { get; set; }
        public ParametrLotu() { }
        public ParametrLotu(double wysokosc, String kierunek, double predkosc)
        {
            this.Wysokosc = wysokosc;
            this.Kierunek = kierunek;
            this.Predkosc = predkosc;
        }
        public ParametrLotu(ParametrLotu lot)
        {
            this.Wysokosc = lot.Wysokosc;
            this.Kierunek = lot.Kierunek;
            this.Predkosc = lot.Predkosc;
        }
    }

class Odcinek
    {
        public ParametrLotu Lot { get; private set; }
        public Punkt A { get; private set; }
        public Punkt B { get; private set; }
        public void Przesun(int dx, int dy)
        {
            A.Przesun(dx, dy);
            B.Przesun(dx, dy);
        }
        public Odcinek() { }
        public Odcinek(ParametrLotu lot, Punkt a, Punkt b)
        {
            this.Lot = lot;
            this.A = new Punkt(a);
            this.B = new Punkt(b);
        }
        public Odcinek(Odcinek odcinek)
        {
            this.Lot = new ParametrLotu(odcinek.Lot);
            this.A = new Punkt(odcinek.A);
            this.B = new Punkt(odcinek.B);
        }
    }

class Trasa
    {
        public List<Odcinek> Sklad { get; private set; }
        public Punkt Start { get; set; }
        public Punkt Meta { get; set; }
        public void DodajOdcinek(Odcinek odcinek)
        {
            this.Sklad.Add(odcinek);//Dodajemy odcinka
        }
        public void UsunOdcinek(Odcinek odcinek)
        {
            foreach (Odcinek o in Sklad)
                if (o == odcinek)
                    this.Sklad.Remove(o);//Usuwa po ID
        }
        public void ZmienOdcinek(Odcinek odcinek, Punkt b)
        {
        }
        public void PodzielOdcinek(Odcinek odcinek, Punkt a, ParametrLotu lot)
        {
        }
        public List<Line> PrzygotujTrase()
        {
            List<Line> Zbior = new List<Line>();
            foreach (Odcinek o in Sklad)
            {
                Line linia = new Line();
                linia.X1 = o.A.X;
                linia.Y1 = o.A.Y;
                linia.X2 = o.B.X;
                linia.Y2 = o.B.Y;
                Zbior.Add(linia);
            }
            return Zbior;
        }
 
        public Trasa() { this.Sklad = new List<Odcinek>(); }
 
        public Trasa(Punkt start, Punkt meta)
        {
            this.Sklad = new List<Odcinek>();
            this.Start = start;
            this.Meta = meta;
        }
        public Trasa(List<Odcinek> sklad, Punkt start, Punkt meta)
        {
            this.Sklad = new List<Odcinek>(sklad);
            this.Sklad = sklad;
            this.Start = start;
            this.Meta = meta;
        }
        public Trasa(Trasa trasa)
        {
            this.Sklad = new List<Odcinek>();
            this.Sklad = trasa.Sklad;
            this.Start = trasa.Start;
            this.Meta = trasa.Meta;
        }
    }

class Obiekt
    {
        public String Nazwa { get; private set; }
        public void WczytajZnacznik()
        {
            //if( is Samolot)
        }
        public virtual String WypiszParametry(Punkt p, float wysokosc) // Dla StopObiekt
        {
            return "Współrzędne:\nX: " + p.X + "  Y:" + p.Y + "\nWysokość:" + wysokosc;
        }
        public Obiekt() { }
        public Obiekt(String nazwa)
        {
            this.Nazwa = nazwa;
        }
        public Obiekt(Obiekt obiekt)
        {
            this.Nazwa = obiekt.Nazwa;
        }
    }

class Statek : Obiekt
    {
        public Trasa Droga { get; private set; }
        public Statek() { }
        public Statek(Trasa droga)
        {
            this.Droga = droga;
        }
   }

public partial class MainWindow : Window
    {
        public MainWindow()
        {
            // Przykladowa trasa jakiegos Statku
            Trasa t = new Trasa();
            t.Start = new Punkt(210, 210); t.Meta = new Punkt(116, 116);
            Odcinek odc1 = new Odcinek(new ParametrLotu(1000, "Północ", 50), t.Start, new Punkt(150, 150));
            Odcinek odc2 = new Odcinek(new ParametrLotu(1000, "Południe", 50), new Punkt(Convert.ToInt32(odc1.Linia.X2), Convert.ToInt32(odc1.Linia.Y2)), new Punkt(130, 130));
            Odcinek odc3 = new Odcinek(new ParametrLotu(1000, "Północ", 50), new Punkt(Convert.ToInt32(odc2.Linia.X2), Convert.ToInt32(odc2.Linia.Y2)), t.Meta);
            t.DodajOdcinek(odc1);
            t.DodajOdcinek(odc2);
            t.DodajOdcinek(odc3);
            Statek s1 = new Statek(t);
        }
    }

0

Imho powinieneś zrobić jakąś klasę co np co 100 ms będzie aktualizowała pozycję i prosiła widok o odświeżenie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1