Проблемы с генерацией поля для судоку. C#

Делаю курсовую, тема - генерация поля для игры в судоку, с возможностью выбора уровня сложности. Поле выводится в WinForms и представляет из себя набор кнопок с рандомно сгенерированными числами. В зависимости от уровня сложности, нужное количество кнопок скрывается. Нужное число выбирается через нажатие на кнопку, т.е. изначально кнопка пустая, 1 нажатие - значение 1, еще одно - 2 и тд. Остальные нескрытные кнопки, по идее, должны быть не кликабельны, но почему-то если их кол-во меньше 26, некоторые остаются кликабельными. Что я делаю не так? Заранее спасибо

public partial class Form1 : Form
{
    const int n = 3;
    const int sizeButton = 50;
    public int[,] map = new int[n * n, n * n];
    public Button[,] buttons = new Button[n * n, n * n];
    public Form1()
    {
        InitializeComponent();
        
    }



        public void GenerateMap()
        {
            for (int i = 0; i < n * n; i++)
            {
                for (int j = 0; j < n * n; j++)
                {
                    map[i, j] = (i * n + i / n + j) % (n * n) + 1;
                    buttons[i, j] = new Button();
                }
            }

            Random r = new Random();

            for (int i = 0; i < r.Next(100, 1000); i++)
            {
                ShuffleMap(i % 5);
            }

            CreateMap();

        }


        public void ShuffleMap(int i)
        {
            switch (i)
            {
                case 0:
                    MatrixTransposition();
                    break;
                case 1:
                    SwapRowsInBlock();
                    break;
                case 2:
                    SwapColumnsInBlock();
                    break;
                case 3:
                    SwapBlocksInRow();
                    break;
                case 4:
                    SwapBlocksInColumn();
                    break;
                default:
                    MatrixTransposition();
                    break;
            }
        }

        public void SwapBlocksInColumn()
        {
            Random r = new Random();
            var block1 = r.Next(0, n);
            var block2 = r.Next(0, n);
            while (block1 == block2)
                block2 = r.Next(0, n);
            block1 *= n;
            block2 *= n;
            for (int i = 0; i < n * n; i++)
            {
                var k = block2;
                for (int j = block1; j < block1 + n; j++)
                {
                    var temp = map[i, j];
                    map[i, j] = map[i, k];
                    map[i, k] = temp;
                    k++;
                }
            }
        }

        public void SwapBlocksInRow()
        {
            Random r = new Random();
            var block1 = r.Next(0, n);
            var block2 = r.Next(0, n);
            while (block1 == block2)
                block2 = r.Next(0, n);
            block1 *= n;
            block2 *= n;
            for (int i = 0; i < n * n; i++)
            {
                var k = block2;
                for (int j = block1; j < block1 + n; j++)
                {
                    var temp = map[j, i];
                    map[j, i] = map[k, i];
                    map[k, i] = temp;
                    k++;
                }
            }
        }

        public void SwapRowsInBlock()
        {
            Random r = new Random();
            var block = r.Next(0, n);
            var row1 = r.Next(0, n);
            var line1 = block * n + row1;
            var row2 = r.Next(0, n);
            while (row1 == row2)
                row2 = r.Next(0, n);
            var line2 = block * n + row2;
            for (int i = 0; i < n * n; i++)
            {
                var temp = map[line1, i];
                map[line1, i] = map[line2, i];
                map[line2, i] = temp;
            }
        }

        public void SwapColumnsInBlock()
        {
            Random r = new Random();
            var block = r.Next(0, n);
            var row1 = r.Next(0, n);
            var line1 = block * n + row1;
            var row2 = r.Next(0, n);
            while (row1 == row2)
                row2 = r.Next(0, n);
            var line2 = block * n + row2;
            for (int i = 0; i < n * n; i++)
            {
                var temp = map[i, line1];
                map[i, line1] = map[i, line2];
                map[i, line2] = temp;
            }
        }

        public void MatrixTransposition()
        {
            int[,] tMap = new int[n * n, n * n];
            for (int i = 0; i < n * n; i++)
            {
                for (int j = 0; j < n * n; j++)
                {
                    tMap[i, j] = map[j, i];
                }
            }
            map = tMap;
        }

        public void CreateMap()
        {

            for (int i = 0; i < n * n; i++)
            {

                for (int j = 0; j < n * n; j++)
                {
                    Button button = new Button();
                    buttons[i, j] = button;
                    button.Size = new Size(sizeButton, sizeButton);
                    button.Text = map[i, j].ToString();
                    button.Click += OnCellPressed;


                    button.Location = new Point(j * sizeButton, i * sizeButton);
                    this.Controls.Add(button);
                    if (j != 3
                         && j != 4
                         && j != 5
                         && i != 4
                         && i != 3
                         && i != 4
                         && i != 5)
                    {
                        button.BackColor = Color.LightBlue;
                    };
                    if (i != 0
                        && i != 1
                        && i != 2
                        && i != 6
                        && i != 7
                        && i != 8
                        && j != 0
                        && j != 1
                        && j != 2
                        && j != 6
                        && j != 7
                        && j != 8)
                    { button.BackColor = Color.LightBlue; }
                }
            }
        }

        public void OnCellPressed(object sender, EventArgs e)
        {
            Button pressedButton = sender as Button;
            string buttonText = pressedButton.Text;
            if (string.IsNullOrEmpty(buttonText))
            {
                pressedButton.Text = "1";
            }
            else
            {
                int num = int.Parse(buttonText);
                num++;
                if (num == 10)
                    num = 1;
                pressedButton.Text = num.ToString();
            }

        }

        private void button1_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < n * n; i++)
            {
                for (int j = 0; j < n * n; j++)
                {
                    var btnText = buttons[i, j].Text;
                    if (btnText != map[i, j].ToString())
                    {
                        MessageBox.Show("Неверно!");
                        return;
                    }
                }
            }
            MessageBox.Show("Верно!");
            for (int i = 0; i < n * n; i++)
            {
                for (int j = 0; j < n * n; j++)
                {
                    this.Controls.Remove(buttons[i, j]);
                }
            }
            
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {

        }


        private void button2_Click(object sender, EventArgs e)
        {

            int N = 0;
            string Hide = comboBox1.Text;

            switch (Hide)
            {
                case "Демо":
                    N = 6;
                    break;
                case "Легкий":
                    N = 26;
                    break;
                case "Средний":
                    N = 35;
                    break;
                case "Тяжелый":
                    N = 45;
                    break;
                default:
                MessageBox.Show("Не выбран уровень сложности");
                    break;
            };
        if (N > 0)
        {
            InitializeComponent();
            GenerateMap();
        }

        Random r = new Random();
            while (N > 0)
            {
                for (int i = 0; i < n * n; i++)
                {
                    for (int j = 0; j < n * n; j++)
                    {
                        if (!string.IsNullOrEmpty(buttons[i, j].Text))
                        {

                            int a = r.Next(0, 5);
                            buttons[i, j].Text = a == 0 ? "" : buttons[i, j].Text;
                            buttons[i, j].Enabled = a == 0 ? true : false;

                            if (a == 0)
                                N--;
                            if (N <= 0)
                                break;
                        }
                    }
                    if (N <= 0)
                        break;
                }

            }
           
        }

        private void button3_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < n * n; i++)
            {
                for (int j = 0; j < n * n; j++)
                {
                    this.Controls.Remove(buttons[i, j]);
                }
            }
           
        }

    private void button4_Click(object sender, EventArgs e)
    {
        Close();
    }

    private void button5_Click(object sender, EventArgs e)
    {
        MessageBox.Show("Курсовой проект Генератор судоку ");

    }
}

Ответы (0 шт):