Пример #1
0
        private static void FillCell(BitmapSpan contraints, VectorInt2 p, IBitmap output)
        {
            if (p.X < 0 || p.Y < 0)
            {
                return;
            }
            if (p.X > contraints.Size.X || p.Y > contraints.Size.Y)
            {
                return;
            }

            if (contraints[p])
            {
                return;
            }
            if (output[p])
            {
                return;
            }

            output[p] = true;

            FillCell(contraints, p + VectorInt2.Up, output);
            FillCell(contraints, p + VectorInt2.Down, output);
            FillCell(contraints, p + VectorInt2.Left, output);
            FillCell(contraints, p + VectorInt2.Right, output);
        }
Пример #2
0
        public static Bitmap Fill(BitmapSpan contraints, VectorInt2 p)
        {
            var result = new Bitmap(contraints.Size);

            Fill(contraints, p, result);
            return(result);
        }
Пример #3
0
        public static bool DynamicCheck(StaticMaps staticMaps, IStateMaps node, BitmapSpan both)
        {
            // Box Rule
            foreach (var crate in node.CrateMap.TruePositions())
            {
                if (staticMaps.GoalMap[crate])
                {
                    continue;
                }

                if (both[crate + VectorInt2.Left] &&
                    both[crate + VectorInt2.Left + VectorInt2.Down] &&
                    both[crate + VectorInt2.Down]
                    )
                {
                    return(true);
                }

                if (both[crate + VectorInt2.Left] &&
                    both[crate + VectorInt2.Left + VectorInt2.Up] &&
                    both[crate + VectorInt2.Up]
                    )
                {
                    return(true);
                }

                if (both[crate + VectorInt2.Right] &&
                    both[crate + VectorInt2.Right + VectorInt2.Down] &&
                    both[crate + VectorInt2.Down]
                    )
                {
                    return(true);
                }

                if (both[crate + VectorInt2.Right] &&
                    both[crate + VectorInt2.Right + VectorInt2.Up] &&
                    both[crate + VectorInt2.Up]
                    )
                {
                    return(true);
                }
            }

            return(false);
        }
Пример #4
0
 public static void Fill(BitmapSpan contraints, VectorInt2 p, IBitmap output)
 {
     FillCell(contraints, p, output);
 }