<ControlTemplate TargetType="Button">
<Grid>
<ContentPresenter />
</Grid>
</ControlTemplate>
// Заводите список полей, которые будут открываться, например, в виде очереди
Queue<Point> queue = new Queue<Point>();
// Добавляете туда текущую открываемую клетку
queue.Enqueue(new Point(col, row));
while(queue.Count > 0)
{
var cur = queue.Dequeue();
if(gameArr[cur.Y, cur.X] == '0')
{
// Добавляете в очередь все граничные клетки
// Они будут обработаны при следующих циклах while
queue.Enqueue(new Point(cur.X-1, cur.Y-1));
... добавление 8 клеток
}
// Ваша обработка открытия текущей клетки
}
public static void Main()
{
var str = "abcdefghijklmnop";
Console.WriteLine(str);
Console.WriteLine(string.Concat(Shuffle(str)));
}
private static Random Rnd = new Random((int)DateTime.Now.Ticks);
public static IEnumerable<char> Shuffle(string str)
{
var prime = 19;
var makers = new [] {2, 3, 10, 13, 14, 15};
var maker = makers[Rnd.Next(makers.Length)];
if(prime < str.Length + 2) throw new Exception("Слишком длинная строка");
var current = maker;
while(current != 1)
{
if(current < str.Length + 2)
yield return str[current - 2];
current *= maker;
current %= prime;
}
}