Пример #1
0
        public void Run_ShortGraph_PathFound()
        {
            // ARRAGE
            var expectedPath = new List <IGraphNode>();

            var map = new GraphMap();

            map.AddNode(new HexNode(0, 0));
            map.AddNode(new HexNode(1, 0));
            map.AddNode(new HexNode(0, 1));

            var nodesArray = map.Nodes.ToArray();

            map.AddEdge(nodesArray[0], nodesArray[2]);
            map.AddEdge(nodesArray[2], nodesArray[1]);

            expectedPath.Add(nodesArray[0]);
            expectedPath.Add(nodesArray[2]);
            expectedPath.Add(nodesArray[1]);

            var context = CreatePathFindingContext(map);

            var astar = new AStar(context, expectedPath.First(), expectedPath.Last());

            // ACT
            var factState = astar.Run();

            // ASSERT

            factState.Should().Be(State.GoalFound);

            var factPath = astar.GetPath();

            factPath.Should().BeEquivalentTo(expectedPath);
        }
Пример #2
0
        public void FindNonBlockedNode_RoomWithCorridor_ExitNotBlocked()
        {
            // ARRANGE
            var map = new GraphMap();

            // В этом тесте можно использовать более простые реализации IMapNode

            // генерируем комнату
            var node00 = new HexNode(0, 0);

            map.AddNode(node00);
            var node10 = new HexNode(1, 0);

            map.AddNode(node10);

            var node01 = new HexNode(0, 1);

            map.AddNode(node01);
            var node11 = new HexNode(1, 1);

            map.AddNode(node11);

            map.AddEdge(node00, node10);
            map.AddEdge(node00, node01);

            map.AddEdge(node11, node10);
            map.AddEdge(node11, node01);

            var regionNodes = new IMapNode[] { node00, node01, node10, node11 };

            // генерируем выход
            var corridorNode = new HexNode(2, 0);

            map.AddNode(corridorNode);
            map.AddEdge(corridorNode, node10);



            // ACT
            var node = MapRegionHelper.FindNonBlockedNode(node10, map, regionNodes);


            // ASSERT
            node.Should().NotBe(node10);
            node.Should().NotBe(corridorNode);
        }