Exemplo n.º 1
0
        /// <summary>
        /// Starts the right.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="grid">The grid.</param>
        /// <param name="startx">The startx.</param>
        /// <param name="starty">The starty.</param>
        /// <param name="test">The test.</param>
        /// <param name="set">The set.</param>
        /// <param name="testup">if set to <c>true</c> [testup].</param>
        private static void StartRight <T>(ref MatrixO <T> grid, int startx, int starty, T test, T set, bool testup)
        {
            if (starty < 0 || starty >= grid.Height)
            {
                return;
            }

            for (var x = startx; x < grid.Width; x++)
            {
                var v1 = grid.Matrix[starty][x];
                var v2 = test;

                if ((grid.CompareF == null && v1.Equals(v2)) || (grid.CompareF != null && grid.CompareF(v1, v2)))
                {
                    grid.Matrix[starty][x] = set;

                    //test direction
                    if (testup && starty > 0 && grid.Matrix[starty - 1][x].Equals(test))
                    {
                        StartRight(ref grid, startx, starty - 1, test, set, testup);
                    }
                    else if (testup == false && starty < (grid.Height - 1) && grid.Matrix[starty + 1][x].Equals(test))
                    {
                        StartRight(ref grid, startx, starty + 1, test, set, testup);
                    }
                }
                else
                {
                    return;
                }
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Floods the fill.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="grid">The grid.</param>
        /// <param name="startX">The start x.</param>
        /// <param name="startY">The start y.</param>
        /// <param name="test">The test.</param>
        /// <param name="set">The set.</param>
        /// <param name="compareF">The compare f.</param>
        public static void FloodFill <T>(ref T[][] grid, int startX, int startY, T test, T set,
                                         CompareDel <T> compareF = null)
        {
            var g = new MatrixO <T> {
                Matrix = grid, Height = grid.Length, Width = grid[0].Length, CompareF = compareF
            };

            StartRight(ref g, startX, startY, test, set, true);
            StartRight(ref g, startX, startY + 1, test, set, false);
            grid = g.Matrix;
        }