Example #1
0
        private void DrawSquare(int square_horizontal, int square_vertical)
        {
            Rectangle sub_picture_dimensions = new Rectangle();

            switch (square_states[square_horizontal, square_vertical])
            {
            case 0:
                sub_picture_dimensions = new Rectangle(0, 0, 128, 128);
                break;

            case 1:
                sub_picture_dimensions = number_images[square_values[square_horizontal, square_vertical]];
                break;

            case 2:
                sub_picture_dimensions = new Rectangle(128, 0, 128, 128);
                break;
            }

            Bitmap temp = new Bitmap(this.canvas_width, this.canvas_height);

            using (Graphics g = Graphics.FromImage(temp))
            {
                g.DrawImage(canvas, Point.Empty);
                g.DrawImage(
                    Properties.Resources.minesweeper_tiles,
                    new Rectangle(square_horizontal * square_width + board_offset_horizontal, square_vertical * square_height + board_offset_vertical, square_width, square_height),
                    sub_picture_dimensions,
                    GraphicsUnit.Pixel
                    );
            }

            canvas = temp;
            Canvas_Panel.Invalidate();
        }
        private void Add_TextBox(int left_lim, int right_lim)
        {
            TextBox txtBox;
            int     coordinate_x = 0;
            int     coordinate_y = 0;

            for (int i = left_lim; i <= right_lim; i++)
            {
                txtBox = new TextBox()
                {
                    Name = "txtBox" + i.ToString(), Height = 22, Width = 60
                };
                if (i % 2 != 0)
                {
                    coordinate_y = -40;
                    coordinate_x = 10;
                }
                else
                {
                    coordinate_y = 40;
                    coordinate_x = -60;
                }

                txtBox.Margin   = new Thickness(coordinate_x, coordinate_y, 0, 0);
                txtBox.Height   = 25;
                txtBox.FontSize = 16;
                Canvas_Panel.Children.Add(txtBox);
                Canvas_Panel.RegisterName(txtBox.Name, txtBox);
            }
        }
Example #3
0
        private void DrawGrid(int num_tiles_horizontal, int num_tiles_vertical)
        {
            this.canvas_width  = board_offset_horizontal * 2 + square_width * num_tiles_horizontal;
            this.canvas_height = board_offset_vertical * 2 + square_height * num_tiles_vertical;

            this.ClientSize = new Size(canvas_width, canvas_height + menuStrip1.Height + toolStrip1.Height + statusStrip1.Height);

            Bitmap temp = new Bitmap(canvas_width, canvas_height);

            using (Graphics g = Graphics.FromImage(temp))
            {
                for (int i = 0; i < num_tiles_horizontal; i++)
                {
                    for (int j = 0; j < num_tiles_vertical; j++)
                    {
                        g.DrawImage(
                            Properties.Resources.minesweeper_tiles,
                            new Rectangle(i * square_width + board_offset_horizontal, j * square_height + board_offset_vertical, square_width, square_height),
                            new Rectangle(0, 0, 128, 128),
                            GraphicsUnit.Pixel
                            );
                    }
                }
            }

            canvas = temp;
            Canvas_Panel.Invalidate();
        }
Example #4
0
 private void Clear_Button_Click(object sender, EventArgs e)
 {
     Canvas_Panel.Refresh();//обновляем панель
     n     = 0;
     check = false;
     Matrica_DataGridView.Rows.Clear();    //удаление всех строк
     Matrica_DataGridView.Columns.Clear(); //удаление всех столбцов
     versh = -1;
     Result_TextBox.Text = "";
 }
        private void Edit_data(string text)
        {
            string[] number = text.Split(';');

            Add_TextBox(1, 2 * (number.Length - 1));

            for (int i = 0; i <= 2 * (number.Length - 1) - 2; i = i + 2)
            {
                string[] xy = number[i - i / 2].Split('/');
                for (int j = 1; j <= xy.Length; j++)
                {
                    object  item      = Canvas_Panel.FindName("txtBox" + (i + j).ToString());
                    TextBox edit_text = (TextBox)item;

                    edit_text.Text = xy[j - 1];
                }
            }
        }
        private void Add_data(int count)
        {
            gr_table.Name  = Name_box.Text;
            gr_table.index = type_gr.Text;

            for (int i = 1; i <= 2 * count; i++)
            {
                object  item = Canvas_Panel.FindName("txtBox" + i.ToString());
                TextBox text = (TextBox)item;
                if (i % 2 == 0)
                {
                    gr_table.xy += text.Text + ";";
                }
                else
                {
                    gr_table.xy += text.Text + "/";
                }
            }
        }
        private void Add_Click(object sender, RoutedEventArgs e)
        {
            var value = Convert.ToInt32(numericUpDown.Value);

            if (count_txtbox > value)
            {
                for (int i = 2 * Convert.ToInt32(numericUpDown.Value) + 1; i <= 2 * count_txtbox; i++)
                {
                    object  item = Canvas_Panel.FindName("txtBox" + i.ToString());
                    TextBox text = (TextBox)item;
                    Canvas_Panel.Children.Remove(text);
                    Canvas_Panel.UnregisterName(text.Name);
                }
            }
            else if (count_txtbox < value)
            {
                Add_TextBox(2 * count_txtbox + 1, 2 * value);
            }
            count_txtbox = value;
        }
Example #8
0
        private void DrawEntireBoard()
        {
            Bitmap temp = new Bitmap(this.canvas_width, this.canvas_height);

            using (Graphics g = Graphics.FromImage(temp))
            {
                g.DrawImage(canvas, Point.Empty);
                for (int i = 0; i < number_squares_horizontal; i++)
                {
                    for (int j = 0; j < number_squares_vertical; j++)
                    {
                        g.DrawImage(
                            Properties.Resources.minesweeper_tiles,
                            new Rectangle(i * square_width + board_offset_horizontal, j * square_height + board_offset_vertical, square_width, square_height),
                            number_images[square_values[i, j]],
                            GraphicsUnit.Pixel
                            );
                    }
                }
            }

            canvas = temp;
            Canvas_Panel.Invalidate();
        }
Example #9
0
        private void Canvas_Panel_MouseClick(object sender, MouseEventArgs e)
        {
            int click_x = e.X;
            int click_y = e.Y;
            int square_x, square_y;

            if (click_x > board_offset_horizontal && click_x < this.ClientSize.Width - board_offset_horizontal &&
                click_y > board_offset_vertical && click_y < this.ClientSize.Height - board_offset_vertical)
            {
                // Translate mouse click co-ordinates into board co-ordinates
                click_x -= board_offset_horizontal;
                click_y -= board_offset_vertical;
                square_x = click_x / square_width;
                square_y = click_y / square_height;

                switch (e.Button)
                {
                case MouseButtons.Left:
                    if (square_states[square_x, square_y] != 1)
                    {
                        square_states[square_x, square_y] = 1;
                        DrawSquare(square_x, square_y);
                        num_squares_left--;
                        Update_Status_Bar();
                        if (square_values[square_x, square_y] == 0)
                        {
                            Bitmap temp = new Bitmap(canvas_width, canvas_height);
                            using (Graphics g = Graphics.FromImage(temp))
                            {
                                g.DrawImage(canvas, Point.Empty);
                                showAdjacentSquares(square_x, square_y, g);
                            }
                            canvas = temp;
                            Canvas_Panel.Invalidate();
                        }
                    }
                    break;

                case MouseButtons.Right:
                    switch (square_states[square_x, square_y])
                    {
                    case 0:
                        square_states[square_x, square_y] = 2;
                        DrawSquare(square_x, square_y);
                        num_mines_left--;
                        Update_Status_Bar();
                        break;

                    case 2:
                        square_states[square_x, square_y] = 0;
                        DrawSquare(square_x, square_y);
                        num_mines_left++;
                        Update_Status_Bar();
                        break;
                    }
                    break;
                }

                if (square_states[square_x, square_y] == 1 && square_values[square_x, square_y] == 9)
                {
                    Game_Loss();
                }
                if (num_squares_left == num_mines)
                {
                    Game_Win();
                }
            }
        }
Example #10
0
        bool check = false;                 //проверка для заполнения первых 2 столбцов
        private void Canvas_Panel_MouseDown(object sender, MouseEventArgs e)
        {
            Pen pen_default  = new Pen(Color.MediumBlue, 3); //карандаш для круга по умолчанию
            Pen pen_selected = new Pen(Color.Red, 3);        //карандаш для выбранного круга
            Pen pen_for_line = new Pen(Color.GhostWhite, 2); //карандаш для соединительных линий

            if (e.Button == MouseButtons.Right)              //если нажата правая кнопка мыши
            {
                koortoch[n].rad = 15;
                koortoch[n].x   = e.X - koortoch[n].rad;
                koortoch[n].y   = e.Y - koortoch[n].rad;
                Canvas_Panel.CreateGraphics().DrawEllipse(pen_default, koortoch[n].x, koortoch[n].y,
                                                          koortoch[n].rad * 2, koortoch[n].rad * 2); //рисуем круг
                {
                    //данные необходимые для рисования соединительных линий
                    String     drawString = (n + 1).ToString();
                    Font       drawFont   = new Font("Arial", 14);
                    SolidBrush drawBrush  = new SolidBrush(Color.DarkBlue);
                    PointF     drawPoint  = new PointF(koortoch[n].x + koortoch[n].rad / 2, koortoch[n].y + koortoch[n].rad / 2);
                    //выводим цифру внутри вершины
                    Canvas_Panel.CreateGraphics().DrawString(drawString, drawFont, drawBrush, drawPoint);
                }
                n++; //увеличиваем счётчик вершины

                if (check == false)
                {
                    var column1 = new DataGridViewColumn();           //"специальный" певрый столбец
                    column1.HeaderText   = "0";                       //текст в шапке
                    column1.ReadOnly     = true;                      //значение в этой колонке нельзя править
                    column1.Name         = "0";                       //текстовое имя колонки, его можно использовать вместо обращений по индексу
                    column1.CellTemplate = new DataGridViewTextBoxCell();
                    column1.DefaultCellStyle.BackColor = Color.White; //цвет фона
                    column1.DefaultCellStyle.ForeColor = Color.Black; //цвет текста
                    Matrica_DataGridView.Columns.Add(column1);        //добавляем стобец
                    //добавляем следующий столбец
                    Matrica_DataGridView.Columns.Add("1", "1");
                    Matrica_DataGridView[0, 0].Value = 1;
                    check = true;
                }
                else
                {
                    //добавляем строку и столбец
                    for (int i = n; i < n + 1; ++i)
                    {
                        Matrica_DataGridView.Columns.Add(i.ToString(), i.ToString());
                        Matrica_DataGridView.Rows.Add();
                    }
                    //заполняем самый первый столбец порядковыми чсилами
                    for (int i = 0; i < n; ++i)
                    {
                        Matrica_DataGridView[0, i].Value = i + 1;
                    }
                }
            }
            if (e.Button == MouseButtons.Left)  //если нажата левая кнопка мыши
            {
                if (versh == -1)                //если пока не запомнили ни одну из вершин
                {
                    for (int i = 0; i < n; i++) //проверяем попал ли щелчок мыши на какую-то из вершин
                    {
                        if (e.X - koortoch[i].rad <= koortoch[i].x + koortoch[i].rad &&
                            e.X - koortoch[i].rad >= koortoch[i].x - koortoch[i].rad &&
                            e.Y - koortoch[i].rad <= koortoch[i].y + koortoch[i].rad &&
                            e.Y - koortoch[i].rad >= koortoch[i].y - koortoch[i].rad)
                        {
                            versh = i;                                                                           //если попали, то запоминаем вершину по которой щелкнули
                            Canvas_Panel.CreateGraphics().DrawEllipse(pen_selected, koortoch[i].x, koortoch[i].y,
                                                                      koortoch[i].rad * 2, koortoch[i].rad * 2); //выделяем круг
                            break;                                                                               //выходим из цикла
                        }
                    }
                }
                else //если по одной из вершин уже раннее щелкнули(запомнили), то
                {
                    int toversh = -1;
                    for (int i = 0; i < n; i++) //проверяем попал ли щелчок мыши на какую-то из вершин
                    {
                        if (e.X - koortoch[i].rad <= koortoch[i].x + koortoch[i].rad &&
                            e.X - koortoch[i].rad >= koortoch[i].x - koortoch[i].rad &&
                            e.Y - koortoch[i].rad <= koortoch[i].y + koortoch[i].rad &&
                            e.Y - koortoch[i].rad >= koortoch[i].y - koortoch[i].rad)
                        {
                            toversh = i;//если попали, то запоминаем вершину по которой щелкнули
                            //выделяем круг
                            Canvas_Panel.CreateGraphics().DrawEllipse(pen_selected, koortoch[i].x, koortoch[i].y,
                                                                      koortoch[i].rad * 2, koortoch[i].rad * 2);
                            break;//выходим из цикла
                        }
                    }
                    if ((toversh != -1) && (versh != toversh))//если щелкнули сначала по одной, а потом по другой вершине
                    {
                        //центр первой выделенной вершины
                        Point p1 = new Point(koortoch[versh].x + koortoch[versh].rad,
                                             koortoch[versh].y + koortoch[versh].rad);
                        //центр второй выделенной вершины
                        Point p2 = new Point(koortoch[toversh].x + koortoch[toversh].rad,
                                             koortoch[toversh].y + koortoch[toversh].rad);
                        //рисуем соединительную линию
                        Canvas_Panel.CreateGraphics().DrawLine(pen_for_line, p1, p2);
                        //отмечаем в мартрице смежностей пути
                        Matrica_DataGridView[versh + 1, toversh].Value = 1;
                        Matrica_DataGridView[toversh + 1, versh].Value = 1;
                        //возвращаем круги в состояние по умолчанию
                        Canvas_Panel.CreateGraphics().DrawEllipse(pen_default, koortoch[versh].x, koortoch[versh].y,
                                                                  koortoch[versh].rad * 2, koortoch[versh].rad * 2);
                        Canvas_Panel.CreateGraphics().DrawEllipse(pen_default, koortoch[toversh].x, koortoch[toversh].y,
                                                                  koortoch[toversh].rad * 2, koortoch[toversh].rad * 2);
                        versh = -1;//сбрасываем значение для дальнейшей работы
                    }
                }
            }
        }
Example #11
0
 private void Clear_Button_Click(object sender, EventArgs e)
 {
     Canvas_Panel.Refresh();
     n = 0;
 }
Example #12
0
        int versh = -1;                      //понадобиться нам для обработки различных ситуаций при нажатии мыши

        private void Canvas_Panel_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right) // Если нажата правая кнопка мыши
            {
                Pen pen_default = new Pen(Color.Blue, 2);
                koortoch[n].rad = 15;
                koortoch[n].x   = e.X - koortoch[n].rad;
                koortoch[n].y   = e.Y - koortoch[n].rad;
                Canvas_Panel.CreateGraphics().DrawEllipse(pen_default, koortoch[n].x, koortoch[n].y,
                                                          koortoch[n].rad * 2, koortoch[n].rad * 2);
                String     drawString = (n + 1).ToString();
                Font       drawFont   = new Font("Arial", 14);
                SolidBrush drawBrush  = new SolidBrush(Color.Black);
                PointF     drawPoint  = new PointF(koortoch[n].x + koortoch[n].rad / 2, koortoch[n].y + koortoch[n].rad / 2);
                Canvas_Panel.CreateGraphics().DrawString(drawString, drawFont, drawBrush, drawPoint);
                n++;
            }
            if (e.Button == MouseButtons.Left) // Если нажата левая кнопка мыши
            {
                Pen pen_selected = new Pen(Color.Red, 2);
                if (versh == -1)                //если пока не запомнили ни одну из вершин
                {
                    for (int i = 0; i < n; i++) //проверяем попал ли щелчок мыши на какую-то из вершин
                    {
                        if (e.X - koortoch[i].rad <= koortoch[i].x + koortoch[i].rad &&
                            e.X - koortoch[i].rad >= koortoch[i].x - koortoch[i].rad &&
                            e.Y - koortoch[i].rad <= koortoch[i].y + koortoch[i].rad &&
                            e.Y - koortoch[i].rad >= koortoch[i].y - koortoch[i].rad)
                        {
                            versh = i;//если попали, то запоминаем вершину по которой щелкнули
                            Canvas_Panel.CreateGraphics().DrawEllipse(pen_selected, koortoch[i].x, koortoch[i].y,
                                                                      koortoch[i].rad * 2, koortoch[i].rad * 2);
                            break;
                        }
                    }
                }
                else //если по одной из вершин уже раннее щелкнули(запомнили), то
                {
                    int toversh = -1;
                    for (int i = 0; i < n; i++) //проверяем попал ли щелчок мыши на какую-то из вершин
                    {
                        if (e.X - koortoch[i].rad <= koortoch[i].x + koortoch[i].rad &&
                            e.X - koortoch[i].rad >= koortoch[i].x - koortoch[i].rad &&
                            e.Y - koortoch[i].rad <= koortoch[i].y + koortoch[i].rad &&
                            e.Y - koortoch[i].rad >= koortoch[i].y - koortoch[i].rad)
                        {
                            toversh = i;//если попали, то запоминаем вершину по которой щелкнули
                            Canvas_Panel.CreateGraphics().DrawEllipse(pen_selected, koortoch[i].x, koortoch[i].y,
                                                                      koortoch[i].rad * 2, koortoch[i].rad * 2);
                            break;
                        }
                    }
                    if ((toversh != -1) && (versh != toversh))//если щелкнули сначала по одной, а потом по другой вершине
                    {
                        Point p1 = new Point(koortoch[versh].x + koortoch[versh].rad, koortoch[versh].y + koortoch[versh].rad);
                        Point p2 = new Point(koortoch[toversh].x + koortoch[toversh].rad, koortoch[toversh].y + koortoch[toversh].rad);
                        Canvas_Panel.CreateGraphics().DrawLine(pen_selected, p1, p2);
                        toversh = -1;
                        versh   = -1;
                    }
                }
            }
            Result_TextBox.Text = versh.ToString();
        }