예제 #1
0
        private List <PunktTextComboAlsTupelErsatz> GetPoints(Bäumchen Baum, Graphics g)            //Errechnet die Knotenpunltpunkte und die Knotenpunktwerte
        {
            List <PunktTextComboAlsTupelErsatz> points = new List <PunktTextComboAlsTupelErsatz>(); //finale Liste
            Dictionary <Bäumchen, Point>        daddys = new Dictionary <Bäumchen, Point>();
            List <Bäumchen> possibles = new List <Bäumchen> {
                Baum
            };

            //Nein, das will ich nicht erklären, es funktioniert und das reicht
            //Es ist SEHR ineffizient, was die Speichernutzung angeht, hat aber eine nur quadratische Laufzeit
            for (int i = 0; i < my_Baum.GetDeep(); i++)
            {
                List <Bäumchen> news = new List <Bäumchen>();
                Dictionary <Bäumchen, Point> daddy_news = new Dictionary <Bäumchen, Point>();
                for (int u = 1; u <= possibles.Count; u++)
                {
                    if (possibles[u - 1] != null)
                    {
                        Point p = new Point(Convert.ToInt16(b.Width / 2 * (u * 2 - 1) / Math.Pow(2, i)), (i + 1) * 50);
                        points.Add(new PunktTextComboAlsTupelErsatz(p, possibles[u - 1].Value.ToString()));
                        daddy_news.Add(possibles[u - 1], new Point(p.X, p.Y - 25));
                        try { g.DrawLine(new Pen(Color.Black, 5), new Point(p.X, p.Y - 25), daddys[possibles[u - 1].geschlechtslosesElternteil]); } catch { }
                    }
                    try { news.Add(possibles[u - 1].Sons[0]); } catch { news.Add(null); }
                    try { news.Add(possibles[u - 1].Sons[1]); } catch { news.Add(null); }
                }
                daddys    = daddy_news;
                possibles = news;
            }
            return(points);
        }
예제 #2
0
파일: Form1.cs 프로젝트: Doge815/Baeumchen
        public Baumhaus()
        {
            var handle = GetConsoleWindow();

            ShowWindow(handle, SW_HIDE);
            Consolethread = new Thread(IchBinDieKonsole);
            Consolethread.Start();

            InitializeComponent();
            my_tree  = new Bäumchen(50);
            my_maler = new Baummaler(my_tree);
            mainholder.SetBaummaler(my_maler);
            rTB_out.Text = string.Join(", ", my_tree.Deep().ToArray());
        }
예제 #3
0
        public void Add(int value, bool redraw)  //Fügt neue Werte hinzu
        {
            if (value == my_int)
            {
                goto Skip;                  //Wenn der Wert gleich dem eigenen ist, wird geskipt
            }
            int pos = (value < my_int) ? (0) : (1);

            if (sons[pos] == null)
            {
                sons[pos] = new Bäumchen(value, this);                      //Wenn kein Sohn an der Position existiert, wird ein neuer erstellt
            }
            else
            {
                sons[pos].Add(value);   //wenn einer existiert, wird der Wert weitergegeben
            }
            //if (my_maler != null && redraw) my_maler.UpdateImage();
            Skip :;
        }
예제 #4
0
 public void Remove(int value, Bäumchen daddy = null)
 {
     if (value == my_int && geschlechtslosesElternteil != null)
     {
         geschlechtslosesElternteil.Sons[geschlechtslosesElternteil.sons.IndexOf(this)] = null;
     }
     else if (value < my_int)
     {
         Sons[0].Remove(value, this);
     }
     else if (value > my_int)
     {
         Sons[1].Remove(value, this);
     }
     else if (geschlechtslosesElternteil == null)
     {
         Reset(50);
     }
     if (geschlechtslosesElternteil == null)
     {
         ForceRedraw();
     }
 }
예제 #5
0
 internal Bäumchen(int value, Bäumchen father)   //Konstruktor der nur genutzt wird, um Kinder zu erzeugen, aber nicht den Haupt-Baum
 {
     my_int = value;
     geschlechtslosesElternteil = father;
 }
예제 #6
0
 public Baummaler(Bäumchen Baum) //Konstruktor
 {
     my_Baum = Baum;
     my_Baum.GetMaler(this);
 }