コード例 #1
0
ファイル: PathFind.cs プロジェクト: fenixnix/Fractals
        static public void BStarStep(NLocate src, NLocate dst, NMap map, List <int> bufferIndex, NPathNode pathList)
        {
            if (src.Equals(dst))
            {
                Console.WriteLine("FindPath with B*");
                GPath = new List <NLocate>(pathList.GetPath());
                return;
            }
            var dstLoc = src.NearLocTo(dst);

            if (!map.Alive(dstLoc))
            {
                bufferIndex.Add(dstLoc.ToIndex(map));
                BStarStep(dstLoc, dst, map, bufferIndex, pathList.AddChild(dstLoc.X, dstLoc.Y));
            }
            else
            {
                foreach (var l in src.Branch(dstLoc))
                {
                    if (!bufferIndex.Contains(l.ToIndex(map.Width)) && !map.Alive(l))
                    {
                        bufferIndex.Add(l.ToIndex(map));
                        BStarStep(l, dst, map, bufferIndex, pathList.AddChild(l.X, l.Y));
                    }
                }
            }
        }
コード例 #2
0
ファイル: NLocate.cs プロジェクト: fenixnix/Fractals
        public IEnumerable <NLocate> LineTo(NLocate dst)
        {
            NLocate curLoc = this;

            while (true)
            {
                curLoc = curLoc.NearLocTo(dst);
                if (curLoc.Equals(dst))
                {
                    yield break;
                }
                yield return(curLoc);
            }
        }
コード例 #3
0
ファイル: NMove.cs プロジェクト: fenixnix/Fractals
        public static void AxisLine(NMap map, NLocate src, NLocate dst, byte digType)
        {
            if (src.Equals(dst))
            {
                return;
            }
            int     dx       = dst.X - src.X;
            int     dy       = dst.Y - src.Y;
            NLocate crossLoc = Math.Abs(dx) > Math.Abs(dy) ? new NLocate(dst.X, src.Y) : new NLocate(src.X, dst.Y);

            Line(map, src, crossLoc, digType);
            Line(map, dst, crossLoc, digType);
            map.SetBlock(crossLoc, digType);
        }
コード例 #4
0
ファイル: NMove.cs プロジェクト: fenixnix/Fractals
        public static void Line(NMap map, NLocate src, NLocate dst, byte digType)
        {
            if (src.Equals(dst))
            {
                return;
            }
            if (map.WithIn(src))
            {
                map.SetBlock(src.X, src.Y, digType);
            }

            List <NLocate> mos = new List <NLocate>();

            mos.AddRange(src.Direction4());
            mos.Sort((x, y) => x.DistanceTo(dst).CompareTo(y.DistanceTo(dst)));
            Line(map, mos[0], dst, digType);
        }
コード例 #5
0
ファイル: NMove.cs プロジェクト: fenixnix/Fractals
        public static void Noise(NMap map, NLocate src, NLocate dst, byte movType, byte digType)
        {
            if (src.Equals(dst))
            {
                return;
            }
            if (map.WithIn(src))
            {
                map.SetBlock(src.X, src.Y, digType);
            }

            List <NLocate> mos = new List <NLocate>();

            mos.AddRange(src.Direction4());
            mos.Sort((x, y) => x.DistanceTo(dst).CompareTo(y.DistanceTo(dst)));

            Dictionary <NLocate, double> rateDict = new Dictionary <NLocate, double>();

            if (map.WithIn(mos[0]))
            {
                rateDict.Add(mos[0], 0.6);
            }
            if (map.WithIn(mos[1]))
            {
                rateDict.Add(mos[1], 0.3);
            }
            if (map.WithIn(mos[2]))
            {
                rateDict.Add(mos[2], 0.1);
            }
            if (map.WithIn(mos[3]))
            {
                rateDict.Add(mos[3], 0.1);
            }

            NLocate mov = RandomSelectByRate <NLocate> .Select(rateDict);

            Noise(map, mov, dst, movType, digType);
        }