예제 #1
0
        public void VisibleTest()
        {
            Func <IHexCoordinate, bool> isBlock = c => c.Equals(HexCoordinates.Cube(0, 0, 0));

            Assert.True(Center.Visible(HexCoordinates.Cube(1, -1, 0), isBlock));
            Assert.False(Center.Visible(HexCoordinates.Cube(-1, 0, 1), isBlock));
        }
예제 #2
0
        public void LineTest()
        {
            var expected = new List <IHexCoordinate>
            {
                Center,
                HexCoordinates.Cube(1, 0, -1),
                HexCoordinates.Cube(0, 0, 0),
                HexCoordinates.Cube(0, -1, 1)
            };

            CollectionAssert.AreEqual(expected, Center.Line(HexCoordinates.Cube(0, -1, 1)));
        }
예제 #3
0
        public void FieldOfViewTest()
        {
            Func <IHexCoordinate, bool> isBlock = c =>
                                                  c.Equals(HexCoordinates.Cube(0, 0, 0)) ||
                                                  c.Equals(HexCoordinates.Cube(1, 0, -1)) ||
                                                  c.Equals(HexCoordinates.Cube(2, 0, -2)) ||
                                                  c.Equals(HexCoordinates.Cube(0, 2, -2));
            var field = Center.FieldOfView(5, isBlock).ToList();

            Assert.False(field.Contains(HexCoordinates.Cube(0, 0, 0)));
            Assert.False(field.Contains(HexCoordinates.Cube(-1, -2, 3)));
            Assert.False(field.Contains(HexCoordinates.Cube(2, -1, -1)));
            Assert.False(field.Contains(HexCoordinates.Cube(3, 0, -3)));
            Assert.True(field.Contains(HexCoordinates.Cube(1, 2, -3)));
            Assert.True(field.Contains(HexCoordinates.Cube(4, 0, -4)));
        }
예제 #4
0
        public void DiagonalTest()
        {
            var expected = new List <IHexCoordinate>
            {
                HexCoordinates.Cube(3, 0, -3),
                HexCoordinates.Cube(2, -1, -1),
                HexCoordinates.Cube(0, 0, 0),
                HexCoordinates.Cube(-1, 2, -1),
                HexCoordinates.Cube(0, 3, -3),
                HexCoordinates.Cube(2, 2, -4)
            };
            var result =
                EnumUtils.Values <HexDirection>().Select(direction => Center.Diagonal(direction)).ToList();

            CollectionAssert.AreEquivalent(expected, result);
        }
예제 #5
0
        public void ReachableTest()
        {
            var expected = new List <IHexCoordinate>
            {
                HexCoordinates.Cube(0, 1, -1),
                HexCoordinates.Cube(0, 2, -2),
                HexCoordinates.Cube(1, 2, -3),
                HexCoordinates.Cube(2, 1, -3)
            };
            Func <IHexCoordinate, bool> isBlock = c =>
                                                  c.Equals(HexCoordinates.Cube(0, 0, 0)) ||
                                                  c.Equals(HexCoordinates.Cube(1, 0, -1)) ||
                                                  c.Equals(HexCoordinates.Cube(2, 0, -2));

            CollectionAssert.AreEquivalent(expected, Center.Reachable(1, isBlock));
        }
예제 #6
0
        public void NeighborTest()
        {
            Assert.AreEqual(HexCoordinates.Cube(2, 0, -2), Center.Neighbor(HexDirection.A));
            var neighbor =
                EnumUtils.Values <HexDirection>().Select(direction => Center.Neighbor(direction)).ToList();

            CollectionAssert.AreEquivalent(neighbor, Center.AllNeighbors());
            neighbor = new List <IHexCoordinate>
            {
                HexCoordinates.Cube(2, 0, -2),
                HexCoordinates.Cube(1, 0, -1),
                HexCoordinates.Cube(0, 1, -1),
                HexCoordinates.Cube(0, 2, -2),
                HexCoordinates.Cube(1, 2, -3),
                HexCoordinates.Cube(2, 1, -3)
            };
            CollectionAssert.AreEquivalent(neighbor, Center.AllNeighbors());
        }
예제 #7
0
        public void HexGridTest()
        {
            _grid.Add(HexCoordinates.Cube(0, 0, 0), 0);
            _grid.Add(HexCoordinates.Cube(1, -1, 0), 0);
            _grid.Add(HexCoordinates.Cube(1, -2, 1), 0);
            _grid.Add(HexCoordinates.Cube(-1, 0, 1), 0);
            _grid.Add(HexCoordinates.Cube(-1, 1, 0), 0);
            _grid.Add(HexCoordinates.Cube(0, 1, -1), 0);
            _grid.Add(HexCoordinates.Cube(1, 0, -1), 0);
            _grid.Add(HexCoordinates.Cube(2, -3, 1), 0);
            var path     = _grid.BreadthFirstSearch(HexCoordinates.Cube(0, 0, 0), HexCoordinates.Cube(2, -3, 1));
            var expected = new List <IHexCoordinate>
            {
                HexCoordinates.Cube(0, 0, 0),
                HexCoordinates.Cube(1, -1, 0),
                HexCoordinates.Cube(1, -2, 1),
                HexCoordinates.Cube(2, -3, 1)
            };

            CollectionAssert.AreEquivalent(expected, path);
        }
예제 #8
0
 public void FromRingTest()
 {
     Assert.AreEqual(HexCoordinates.Cube(1, -1, 0), HexCoordinates.Ring(Center, 2, 5));
     Assert.AreEqual(HexCoordinates.Cube(4, -2, -2), HexCoordinates.Ring(Center, 3, 4));
 }
예제 #9
0
 public void FromCubeTest()
 {
     Assert.Throws <ArgumentException>(() => { HexCoordinates.Cube(1, 1, 1); });
 }
예제 #10
0
 public void DistanceTest()
 {
     Assert.AreEqual(2, Center.Distance(HexCoordinates.Cube(1, -1, 0)));
 }
예제 #11
0
 public void RotateTest()
 {
     Assert.AreEqual(HexCoordinates.Cube(-2, 4, -2), Center.Rotate(HexCoordinates.Cube(4, -2, -2), 3));
 }
예제 #12
0
 public void Initialize()
 {
     Center = HexCoordinates.Cube(1, 1, -2);
 }
예제 #13
0
 public void RingOfTest()
 {
     Assert.AreEqual(HexCoordinates.Ring(Center, 3, 9), Center.ToRing(HexCoordinates.Cube(-1, 0, 1)));
     Assert.AreEqual(HexCoordinates.Ring(Center, 3, 9), Center.ToRing(HexCoordinates.Cube(-1, 0, 1)));
     Assert.AreEqual(HexCoordinates.Ring(Center, 2, 3), Center.ToRing(HexCoordinates.Ring(Center, 2, 3).ConvertTo()));
 }