Example #1
0
        public void Capture(string d1, string d2, string d3, string d4)
        {
            //Env.WIDTH = 1;
            var territory = new Territory(V.Get(0, 0));

            var shifts = new Dictionary <string, V>
            {
                { "right", V.Get(1, 0) },
                { "left", V.Get(-1, 0) },
                { "up", V.Get(0, 1) },
                { "down", V.Get(0, -1) },
            };

            var s1 = shifts[d1];
            var s2 = shifts[d2];
            var s3 = shifts[d3];
            var s4 = shifts[d4];

            var p = new List <V>
            {
                V.Get(10, 10)
            };

            p.Add(p.Last() + s1);
            p.Add(p.Last() + s1);
            p.Add(p.Last() + s2);
            p.Add(p.Last() + s1);
            p.Add(p.Last() + s1);
            p.Add(p.Last() + s2);
            p.Add(p.Last() + s2);
            p.Add(p.Last() + s3);
            p.Add(p.Last() + s3);
            p.Add(p.Last() + s3);
            p.Add(p.Last() + s4);
            p.Add(p.Last() + s3);

            territory.Points.Clear();
            territory.Points.Add(p.First() * Env.WIDTH);
            territory.Points.Add(p.Last() * Env.WIDTH);

            var capture = territory.Capture(p.Skip(1).Select(x => x * Env.WIDTH).ToList());

            foreach (var v in capture)
            {
                Console.Out.WriteLine($"{v / Env.WIDTH}->{p.IndexOf(v / Env.WIDTH) + 1:X}");
            }

            capture.Select(x => x / Env.WIDTH)
            .Should()
            .BeEquivalentTo(
                p.Except(new[] { p.First(), p.Last() })
                .Concat(
                    new[]
            {
                p[0] + s1 * 2 + s2 * 2,
                p[0] + s1 * 3 + s2 * 2
            }));
        }