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"; } } } }
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); }