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); } }
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(); }
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; }
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(); }
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(); } } }
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;//сбрасываем значение для дальнейшей работы } } } }
private void Clear_Button_Click(object sender, EventArgs e) { Canvas_Panel.Refresh(); n = 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(); }