コード例 #1
0
        //

        void draw(int sizeWidth, int sizeHeight)            //рисуем игровое поле:
        {
            field = new OverrButton[sizeHeight, sizeWidth]; //создаём двумерный массив наших новых кнопок с доп. полями
            int x = 0, y = 0;                               //начальные координаты кнопок

            for (int i = 0; i < sizeHeight; i++)
            {
                x = 0; //обнуление координаты икс для перевода на новую строку последующие кнопки
                for (int j = 0; j < sizeWidth; j++)
                {
                    field[i, j] = new OverrButton {                              //определяем наш массив кнопок в зависимости от того, какую сложность мы выбрали в главном меню
                        Width     = sizeButtonsPx,                               //ширина кнопочки, которая берется из константы
                        Height    = sizeButtonsPx,                               //высота кнопочки, которая берется из константы
                        BackColor = Color.LightBlue,                             //определяем цвет кнопочки
                        xButton   = i, yButton = j
                    };                                                           //задаём кнопке координаты x и y в поле для успешного манипулирования над ней в будущем
                    panelField.Controls.Add(field[i, j]);                        //добавляем кнопочку в элементы контрола Panel, чтобы они отображались внутри
                    field[i, j].Location = new Point(x, y);                      //определяем координаты для визуального отображения кнопки
                    x += sizeButtonsPx;                                          //прибавляем к иксу константу, чтобы следующая кнопочка отображалась следом после предыдущей
                    field[i, j].MouseDown += new MouseEventHandler(field_Click); //добавляем к кнопочке событие, которое срабатывает при нажатии на любую кнопку на мыше
                    if (rnd.Next(101) < 10)                                      //рандомная генерация бомбочек на поле
                    {
                        bombCount += 1;
                        field[i, j].thisIsBomb = true;
                    }
                }
                y += sizeButtonsPx;                                                                  //смещение по оси y после прохода по первому циклу
            }
            Size += new Size(field[0, sizeWidth - 1].Location.X + sizeButtonsPx, y + sizeButtonsPx); //определяем размер формы в зависимости от количества элементов на форме
        }
コード例 #2
0
        //

        int checkAround(OverrButton btn)//проверяет количество бомбочек вокруг выбранной кнопки
        {
            int k = 0;

            for (int i = btn.xButton - 1; i <= btn.xButton + 1; i += 1)
            {
                for (int j = btn.yButton - 1; j <= btn.yButton + 1; j += 1)
                {
                    try
                    {
                        k = field[i, j].thisIsBomb ? k += 1 : k;
                    }
                    catch { }
                }
            }
            return(k);
        }
コード例 #3
0
        //

        void field_Click(object sander, MouseEventArgs e) //событие при нажатии на кнопку в поле
        {
            OverrButton button = (OverrButton)sander;     //обещаем, что наш объект - это кнопка, и записываем результат в переменную, для дальнейших манипуляций

            if (MouseButtons.Left == e.Button)            //если нажата левая кнопка мыши, то:
            {
                if (button.thisIsBomb)                    //если нажали на бомбу, то конец игры
                {
                    gameLose();
                }
                else//если нажали не на бомбу, то:
                {
                    for (int i = button.xButton - rnd.Next(3); i <= button.xButton + rnd.Next(3); i++)
                    {
                        for (int j = button.yButton - rnd.Next(3); j <= button.yButton + rnd.Next(3); j++) //рандомно проходимся вокруг нажатой кнопки
                        {
                            try                                                                            //нужен для того, чтобы приложение не вылетало с исключением о выходе индекса за пределы массива
                            {
                                if (!field[i, j].thisIsBomb)                                               //если вокруг нажатой клавиши нет бомбы, то пишем сколько находится вокруг бомб и отключаем пустые кнопки
                                {
                                    field[i, j].Text      = "" + checkAround(field[i, j]);                 //на пустой кнопке пишем сколько вокруг бомб
                                    field[i, j].Enabled   = false;                                         //отключаем пустую кнопку
                                    field[i, j].BackColor = Color.White;                                   //красим в белый цвет пустую кнопку, для лучшего восприятия для игрока
                                }
                            }
                            catch (Exception) { }//действия при  вылете приложения с исключением(в нашем случае ничего делать не надо)
                        }
                    }
                }
            }
            else if (MouseButtons.Right == e.Button)                         //происходит при нажатии на правую кнопку мыши
            {
                if (button.thisIsBomb & button.BackColor == Color.LightBlue) //если нажатя кнопка имеет цвет голубой и это бомба, тогда мы считаем правильно засчитанный выбор
                {
                    button.BackColor = Color.Gray;
                    markCount       += 1;
                }
                else if (button.thisIsBomb & button.BackColor == Color.Gray) //если нажатая кнопка это бомба и цвет её серый, тогда мы убираем правильный ответ и красим кнопку в голубой
                {
                    button.BackColor = Color.LightBlue;
                    markCount       -= 1;
                }
                else //если выбранная кнопка не бомба, то мы просто меняем её цвет на серый или голубой
                {
                    button.BackColor = button.BackColor == Color.LightBlue ? Color.Gray : Color.LightBlue;
                }
            }
            if (markCount == bombCount) //определяем условие выигрыша - если отмеченных марок столько же, сколько бомб, то:
            {
                activeButtons = 0;
                for (int i = 0; i < sizeHeight; i++)
                {
                    for (int j = 0; j < sizeWidth; j += 1)
                    {
                        if (field[i, j].Enabled) // считаем количество активных кнопок
                        {
                            activeButtons += 1;
                        }
                    }
                }
                if (activeButtons == markCount)//если количество активных кнопок = отмеченных кнопок, то уведомляем игрока о выигрыше
                {
                    MessageBox.Show("Вы выиграли!\nПоздравляем!");
                    for (int i = 0; i < sizeHeight; i++)
                    {
                        for (int j = 0; j < sizeWidth; j++)
                        {
                            field[i, j].Enabled = false; //отключаем все поля
                        }
                    }
                    timerWinGame.Enabled         = true;  //разукрашиваем поле
                    timerGameMinDuration.Enabled = false; //отключаем таймер подсчета времени
                }
            }
        }