Exemplo n.º 1
0
        public override QuaxInfo SearchQuax(QuaxInfo curStatus)
        {
            if (MapQuadrat.MapTyp == MapQuadrat.MapTypen.Unbekannt)
            {
                if (NodeID == 0)
                {
                    NodeID = MapQuadrat.GetMapTyp();
                }
                else
                {
                    MapQuadrat.GetMapTyp();
                }
            }

            Console.Write(
                $"[{NodeID}] Node: ({MapQuadrat.LO_Eckpunkt.X}|{MapQuadrat.LO_Eckpunkt.Y}) -> ({MapQuadrat.RU_Eckpunkt.X}|{MapQuadrat.RU_Eckpunkt.Y}) - ");

            switch (MapQuadrat.MapTyp)
            {
            case MapQuadrat.MapTypen.Wasser:
                Console.WriteLine("Wasser");
                throw new Exception("Quax ist in Wasser Node");

            case MapQuadrat.MapTypen.Passierbar:
                Console.WriteLine("Passierbar");
                Console.WriteLine(
                    $"Quax gefunden: ({MapQuadrat.LO_Eckpunkt.X} | {MapQuadrat.LO_Eckpunkt.Y}) {MapQuadrat.Breite}");
                curStatus.QuaxNode = this;
                return(curStatus);

            case MapQuadrat.MapTypen.Gemischt:
                Console.WriteLine("Gemischt");

                QuadratNode nodeMitQuax = null;

                for (var i = 0; i < ChildNodes.Nodes.Length; i++)
                {
                    if (ChildNodes.Nodes[i].BeruehrtPoint(curStatus.QuaxPos))
                    {
                        nodeMitQuax = ChildNodes.Nodes[i];
                    }
                }

                if (nodeMitQuax == null)
                {
                    throw new Exception("Quax ist in keinem inneren Quadrat");
                }

                return(nodeMitQuax.SearchQuax(curStatus));

            case MapQuadrat.MapTypen.Unbekannt:
                throw new Exception("Unbekannter Map Typ");

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
Exemplo n.º 2
0
        public override PathInfo SearchPath(PathInfo curStatus)
        {
            if (MapQuadrat.MapTyp == MapQuadrat.MapTypen.Unbekannt)
            {
                if (NodeID == 0)
                {
                    NodeID = MapQuadrat.GetMapTyp();
                }
                else
                {
                    MapQuadrat.GetMapTyp();
                }
            }

            Console.Write(
                $"[{NodeID}] Abschluss Node: ({MapQuadrat.LO_Eckpunkt.X}|{MapQuadrat.LO_Eckpunkt.Y}) -> ({MapQuadrat.RU_Eckpunkt.X}|{MapQuadrat.RU_Eckpunkt.Y}) - ");

            switch (MapQuadrat.MapTyp)
            {
            case MapQuadrat.MapTypen.Wasser:
                Console.WriteLine("Wasser");
                return(curStatus);

            case MapQuadrat.MapTypen.Passierbar:
                Console.WriteLine("Passierbar");
                if (curStatus.LetzterWeg != this)
                {
                    if (BeruehrtPoint(curStatus.StadtPos))
                    {
                        curStatus.StadtGefunden = true;
                        Console.Write("STADT GEFUNDEN - ");
                    }

                    Console.WriteLine("Weg hinzugefuegt!");
                    curStatus.Weg.Add(this);
                }

                return(curStatus);

            case MapQuadrat.MapTypen.Gemischt:
                Console.WriteLine("Gemischt");
                throw new Exception("Abschluss Node ist gemischt");

            case MapQuadrat.MapTypen.Unbekannt:
                throw new Exception("Unbekannter Map Typ");

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
Exemplo n.º 3
0
        public override QuaxInfo SearchQuax(QuaxInfo curStatus)
        {
            if (MapQuadrat.MapTyp == MapQuadrat.MapTypen.Unbekannt)
            {
                if (NodeID == 0)
                {
                    NodeID = MapQuadrat.GetMapTyp();
                }
                else
                {
                    MapQuadrat.GetMapTyp();
                }
            }

            Console.Write(
                $"[{NodeID}] Abschluss Node: ({MapQuadrat.LO_Eckpunkt.X}|{MapQuadrat.LO_Eckpunkt.Y}) -> ({MapQuadrat.RU_Eckpunkt.X}|{MapQuadrat.RU_Eckpunkt.Y}) - ");

            switch (MapQuadrat.MapTyp)
            {
            case MapQuadrat.MapTypen.Wasser:
                Console.WriteLine("Wasser");
                throw new Exception("Quax ist in Wasser Node");

            case MapQuadrat.MapTypen.Passierbar:
                Console.WriteLine("Passierbar");
                Console.WriteLine(
                    $"Quax gefunden: ({MapQuadrat.LO_Eckpunkt.X} | {MapQuadrat.LO_Eckpunkt.Y}) {MapQuadrat.Breite}");
                curStatus.QuaxNode = this;
                return(curStatus);

            case MapQuadrat.MapTypen.Gemischt:
                Console.WriteLine("Gemischt");
                throw new Exception("Abschluss Node ist gemischt");

            case MapQuadrat.MapTypen.Unbekannt:
                throw new Exception("Unbekannter Map Typ");

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
Exemplo n.º 4
0
        public override PathInfo SearchPath(PathInfo curStatus)
        {
            if (MapQuadrat.MapTyp == MapQuadrat.MapTypen.Unbekannt)
            {
                if (NodeID == 0)
                {
                    NodeID = MapQuadrat.GetMapTyp();
                }
                else
                {
                    MapQuadrat.GetMapTyp();
                }
            }

            Console.Write(
                $"[{NodeID}] Node: ({MapQuadrat.LO_Eckpunkt.X}|{MapQuadrat.LO_Eckpunkt.Y}) -> ({MapQuadrat.RU_Eckpunkt.X}|{MapQuadrat.RU_Eckpunkt.Y}) - ");

            switch (MapQuadrat.MapTyp)
            {
            case MapQuadrat.MapTypen.Wasser:
                Console.WriteLine("Wasser");
                return(curStatus);

            case MapQuadrat.MapTypen.Passierbar:
                Console.WriteLine("Passierbar");

                if (BeruehrtPoint(curStatus.StadtPos))
                {
                    curStatus.StadtGefunden = true;
                    Console.Write("STADT GEFUNDEN - ");
                }

                if (curStatus.LetzterWeg != this)
                {
                    Console.WriteLine("Weg hinzugefuegt!");
                    curStatus.Weg.Add(this);
                }

                return(curStatus);

            case MapQuadrat.MapTypen.Gemischt:
                Console.WriteLine("Gemischt");

                ChildNodes.SortierChildNodes(curStatus.LetzterWeg, curStatus.StadtPos);

                var gefundeneQuadrate = 0;
                var isStartNodeParent = false;
                for (var i = 0; i < ChildNodes.Nodes.Length; i++)
                {
                    if (ChildNodes.Nodes[i] == curStatus.StartNode)
                    {
                        isStartNodeParent = true;
                    }
                }
                if (curStatus.Weg.Count == 1 && isStartNodeParent)
                {
                    gefundeneQuadrate = 1;
                }

                while (gefundeneQuadrate < 2)
                {
                    for (var i = 0; i < ChildNodes.ChildNodesSortiert.Length; i++)
                    {
                        var aktuelleNode      = ChildNodes.ChildNodesSortiert[i].Node;
                        var aktuelleWegLaenge = curStatus.Weg.Count;

                        if (!aktuelleNode.BeruehrtQuadratNode(curStatus.LetzterWeg))     // Beruehrt nicht den Weg
                        {
                            return
                                (curStatus);   // Weil es keinen Weg gibt (Zur Sicherheit andere nodes auch noch checken)
                        }
                        //Console.WriteLine(
                        //    $"[{NodeID}] Node: ({MapQuadrat.LO_Eckpunkt.X}|{MapQuadrat.LO_Eckpunkt.Y}) -> ({MapQuadrat.RU_Eckpunkt.X}|{MapQuadrat.RU_Eckpunkt.Y}) - CHILD NODE UEBERPRUEFEN");
                        var info = aktuelleNode.SearchPath(curStatus);

                        if (info.StadtGefunden)     // FERTIG
                        {
                            return(info);
                        }

                        if (info.Weg.Count > aktuelleWegLaenge
                            ) // child node ist passierbar und wurde zu Weg hinzugefuegt
                        {
                            if (ChildNodes.ChildNodesSortiert[i]
                                .KuerzesteTargetEntfernung /* || info.Weg.Count > vorherigeWegLaenge + 1*/
                                )                          // Durchquerbare child node gefunden --> node ist fertig
                            {
                                return(info);
                            }

                            // Weg hinzugefuegt
                            ChildNodes.SortierChildNodes(info.LetzterWeg, info.StadtPos);
                            gefundeneQuadrate++;

                            // Nochmal neu
                            break;
                        }

                        if (i == ChildNodes.ChildNodesSortiert.Length - 1)
                        {
                            // Dieses Node und all ihre child nodes helfen nicht weiter
                            Console.WriteLine(
                                $"[{NodeID}] Node: ({MapQuadrat.LO_Eckpunkt.X}|{MapQuadrat.LO_Eckpunkt.Y}) -> ({MapQuadrat.RU_Eckpunkt.X}|{MapQuadrat.RU_Eckpunkt.Y}) - HILFT NICHT WEITER");
                            return(info);
                        }

                        curStatus = info;
                    }
                }

                return(curStatus);

            case MapQuadrat.MapTypen.Unbekannt:
                throw new Exception("Unbekannter Map Typ");

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
Exemplo n.º 5
0
 public Node(Point loEckpunkt, int breite)
 {
     MapQuadrat = new MapQuadrat(loEckpunkt, breite);
     CalculateChildNodes();
 }
Exemplo n.º 6
0
 public AbschlussNode(Point luEckpunkt, int breite)
 {
     MapQuadrat = new MapQuadrat(luEckpunkt, breite);
 }
Exemplo n.º 7
0
 /// <summary>
 ///     Ueberprueft, ob eine <see cref="QuadratNode" /> einen <see cref="Point" /> beruehrt
 /// </summary>
 /// <param name="other">Der Punkt</param>
 /// <returns>True wenn sich beide beruehren</returns>
 public bool BeruehrtPoint(Point other)
 {
     return(MapQuadrat.BeruehrtPoint(other));
 }
Exemplo n.º 8
0
 /// <summary>
 ///     Ueberprueft, ob eine <see cref="QuadratNode" /> eine andere <see cref="QuadratNode" /> beruehrt
 /// </summary>
 /// <param name="other">Die andere Node</param>
 /// <returns>True wenn sich beide Nodes beruehren</returns>
 public bool BeruehrtQuadratNode(QuadratNode other)
 {
     return(MapQuadrat.BeruehrtQuadrat(other.MapQuadrat));
 }