Пример #1
0
        public void opennuli()
        {
            generator gen = new generator();

            gen.field = new int[, ]
            {
                { 2, 3, 2, 1, 0 },
                { -1, -1, -1, 1, 0 },
                { 3, 4, 3, 1, 0 },
                { 1, -1, 1, 0, 0 },
                { 1, 1, 1, 0, 0 }
            };

            // gen.calculate();

            gen.opennuli(4, 4);
            Assert.AreEqual(10, gen.field[0, 4]);
            Assert.AreEqual(10, gen.field[3, 3]);
            Assert.AreEqual(10, gen.field[3, 3]);
            Assert.AreEqual(1, gen.field[2, 3]);
            Assert.AreEqual(3, gen.field[2, 2]);
        }
Пример #2
0
        private void Btn_Click(object sender, RoutedEventArgs e)
        {
            //получение значения лежащего в Tag
            int n = (int)((Button)sender).Tag;

            //установка фона нажатой кнопки, цвета и размера шрифта
            ((Button)sender).Background = Brushes.MistyRose;

            int num = gen.getCell(n % 5, n / 5);


            if (num > 0)
            {
                ((Button)sender).Click -= Btn_Click;

                open++;
                ((Button)sender).Foreground = Brushes.MidnightBlue;
                ((Button)sender).FontSize   = 23;
                //запись в нажатую кнопку её номера
                ((Button)sender).Content = num;

                //
                //посчитать число закрытых клеток без мин и если оно равно 0, сообщить о победе

                //----------------------------------------------------------
                if (open == ((5 * 5) - mines))
                {
                    MessageBox.Show("Победа!");
                    sp.IsEnabled = false;
                }
            }

            if (num == 0)
            {
                gen.opennuli(n % 5, n / 5);

                Button[] buttons = new Button[sp.Children.Count];
                sp.Children.CopyTo(buttons, 0);

                for (int i = 0; i < buttons.Length; i++)
                {
                    if (gen.getCell(i % 5, i / 5) == 10)
                    {
                        open++;

                        (buttons[i]).Foreground = Brushes.MidnightBlue;
                        (buttons[i]).FontSize   = 23;
                        //запись в нажатую кнопку её номера
                        (buttons[i]).Content = 0;
                        (buttons[i]).Click  -= Btn_Click;
                    }
                }
                //
                //посчитать число закрытых клеток без мин и если оно равно 0, сообщить о победе

                //----------------------------------------------------------
                if (open == ((5 * 5) - mines))
                {
                    MessageBox.Show("Победа!");
                    sp.IsEnabled = false;
                }
            }
            if (num == -1)
            {
                // int num; // входящая позиция от мышки

                //получаем массив кнопок из сетки
                Button[] buttons = new Button[sp.Children.Count];
                sp.Children.CopyTo(buttons, 0);

                //перебираем все кнопки
                for (int i = 0; i < sp.Children.Count; i++)
                {
                    //получаем координаты ячейки поля соответствующей кнопке
                    int x = (int)(buttons[i]).Tag % 5;
                    int y = (int)(buttons[i]).Tag / 5;

                    //получаем значение из поля
                    int m = gen.getCell(x, y);

                    //если там мина
                    if (m == -1)
                    {
                        StackPanel minePnl;
                        //создание и инициализация переменной для хранения изображения мины
                        Image img = new Image();
                        //загрузка изображения mine.jpg из папки imgs
                        img.Source = mine;

                        //инициализация и установка ориентации, можно вызвать в методе инициализации формы
                        minePnl             = new StackPanel();
                        minePnl.Orientation = Orientation.Horizontal;
                        //установка толщины границы объекта
                        minePnl.Margin = new Thickness(1);
                        //добавление в объект изображения
                        minePnl.Children.Add(img);

                        buttons[i].Content = minePnl;
                    }
                    //bool success = minesCheck();
                }
                sp.IsEnabled = false;
            }
        }