Ejemplo n.º 1
0
        public void SearchRoute(Vehicle v)
        {
            v.RouteIndex = 0;
            v.cost       = 0;
            v.TPtr       = 0;// tFram = 0;
            v.StopTime   = ConstDefine.STOP_TIME;
            if (!checkXY(v))
            {
                v.CurState = State.cannotToDestination;
                MessageBox.Show("起点或终点超出地图界限");
                return;
            }
            ////AstarSearch astarSearch = new AstarSearch(Elc);
            List <MyPoint> scannerNode = new List <MyPoint>();

            if (!Elc.IsSpecialArea(v.BeginX, v.BeginY))
            {
                scannerNode = Elc.GetScanner();
            }
            List <MyPoint> routeList = astarSearch.Search(Elc, scannerNode, v.LockNode, v.Id, Elc.WidthNum, Elc.HeightNum, v.BeginX, v.BeginY, v.EndX, v.EndY, v.Dir);

            //this.Speed = 0;
            Elc.mapnode[v.BeginX, v.BeginY].NodeCanUsed = v.Id;
            // Elc.mapnode[startX, startY].NodeCanUsed = false;//搜索完,小车自己所在的地方被小车占用
            if (routeList.Count < 1)
            {
                // MessageBox.Show("没有搜索到路线:"+v_num);
                v.CurState = State.cannotToDestination;
                //v.LockNode.cl;
            }
            else
            {
                v.Route = routeList;
                if (Elc.IsQueueEntra(v.EndX, v.EndY))
                {
                    MyPoint        nextEnd  = ElecMap.Instance.CalculateScannerPoint(new MyPoint(v.EndX, v.EndY));
                    List <MyPoint> addRoute = astarSearch.Search(Elc, new List <MyPoint>(), v.LockNode, v.Id, Elc.WidthNum, Elc.HeightNum, v.EndX, v.EndY, nextEnd.X, nextEnd.Y, v.Dir);
                    if (addRoute != null && addRoute.Count > 1)
                    {
                        for (int i = 1; i < addRoute.Count; i++)
                        {
                            v.Route.Add(addRoute[i]);
                        }
                        //v.EndX = nextEnd.X;
                        //v.EndY = nextEnd.Y;
                        v.EndLoc = "ScanArea";
                    }
                }
            }
        }
Ejemplo n.º 2
0
        public void TestSearchWithRoadMap()
        {
            var problem = new RoadMapProblem();
            var hOfn    = new StraightLineDistance();

            var testSubject = new AstarSearch(problem, hOfn);

            var testResult = testSubject.Search();

            Assert.AreEqual(418, testResult.PathCost);

            var destCity = testResult.State as City;

            Assert.IsNotNull(destCity);
            System.Diagnostics.Debug.WriteLine(testResult);
        }