Beispiel #1
0
        public void FindNonBlockedNode_80409354_NodeFound()
        {
            // ARRANGE
            var hexMap = new HexMap(200);

            var region = new List <IMapNode>();

            for (var x = 80; x <= 93; x++)
            {
                for (var y = 40; y <= 54; y++)
                {
                    var node = new HexNode(x, y);
                    region.Add(node);
                    hexMap.AddNode(node);
                }
            }

            // генерация коридоров
            hexMap.AddNode(new HexNode(79, 40));
            hexMap.AddNode(new HexNode(78, 40));

            hexMap.AddNode(new HexNode(39, 89));
            hexMap.AddNode(new HexNode(38, 89));

            hexMap.AddNode(new HexNode(39, 90));
            hexMap.AddNode(new HexNode(38, 90));

            hexMap.AddNode(new HexNode(94, 40));
            hexMap.AddNode(new HexNode(95, 40));

            hexMap.AddNode(new HexNode(94, 48));
            hexMap.AddNode(new HexNode(94, 49));
            hexMap.AddNode(new HexNode(95, 49));
            hexMap.AddNode(new HexNode(95, 50));

            // эмулируем выборку сундуков в предыдущих итерациях
            var availableNodes = new List <IMapNode>(region);
            var rolled         = new[] { 114, 136, 0, 123, 179, 0, 111, 3 };

            foreach (int rolledIndex in rolled)
            {
                var rolledNode   = availableNodes[rolledIndex]; // узел, который валил поиск.
                var selectedNode = MapRegionHelper.FindNonBlockedNode(rolledNode, hexMap, availableNodes);

                availableNodes.Remove(selectedNode);
            }



            // ACT
            var testedNode = availableNodes[0];  // узел, который валил поиск.
            var factNode   = MapRegionHelper.FindNonBlockedNode(testedNode, hexMap, availableNodes);



            // ASSERT
            factNode.Should().NotBeNull();
        }
Beispiel #2
0
        public void FindNonBlockedNode_NextIsCorridorNode_NodeFound()
        {
            // ARRANGE
            var mapMock = new Mock <GraphMap>().As <IMap>();

            mapMock.CallBase = true;
            var map = mapMock.Object;

            // В этом тесте можно использовать более простые реализации 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);

            mapMock.Setup(x => x.GetNext(It.Is <IMapNode>(n => n == node10)))
            .Returns(new IMapNode[] { corridorNode, node00, node11 });



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


            // ASSERT
            node.Should().NotBe(node10);
            node.Should().NotBe(corridorNode);
        }
Beispiel #3
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);
        }