/// <summary>
/// 泛洪算法翻开连片的区域
/// </summary>
/// <param name="x">开始泛洪元素位置的x</param>
/// <param name="y">开始泛洪元素位置的y</param>
/// <param name="visited">访问表</param>
public void FloodFillElement(int x,int y,bool[,] visited)
{
//通知邻居一起做
//检测x,y是否在范围内
if (x >= 0 && x < width && y >= 0 && y < height)
{
//是否访问过
if (visited[x, y]) return;
//翻不翻开,怎么翻开
if (mapArray[x, y].elementType != ElementType.CantCovered)
{
((SingleCoveredElement)mapArray[x, y]).UnCoveredElement();
}
if (CountAdjacentTraps(x, y) > 0) return;
if (mapArray[x, y].elementType == ElementType.CantCovered) return;
//将自己标记为访问过
visited[x, y] = true;
FloodFillElement(x+1, y, visited);
FloodFillElement(x-1, y, visited);
FloodFillElement(x, y+1, visited);
FloodFillElement(x, y-1, visited);
FloodFillElement(x+1, y+1, visited);
FloodFillElement(x+1, y-1, visited);
FloodFillElement(x-1, y+1, visited);
FloodFillElement(x-1, y-1, visited);
}
泛洪算法的使用
最新推荐文章于 2022-07-29 13:13:08 发布