Нарисуем корабль, например, такой:
Ваши действия:
1) Создайте приложение Windows Forms, namespace = «Кораблик».
2) Размер формы задайте 900х500, на ней разместите визуальный объект для рисования pictureBox1, измените его свойство Dock = Fill; (он займет все пространство формы).
3) Кликнув на компоненте, вы создадите событие pictureBox1.Click и форму для метода обработки этого события pictureBox1_Click ();
4) Не забудьте добавить библиотеку System.Drawing. Ненужные библиотеки можно удалить (нужны всего три: System, System.Windows.Forms и System.Drawing).
5) В окне кода файла Form1.cs получите следующий текст:
using System; using System.Drawing; using System.Windows.Forms; namespace Кораблик { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void pictureBox1_Click(object sender, EventArgs e) { ... } } }
Теперь нам осталось только написать обработчик события, добавленный нами метод pictureBox1_Click ( ), для чего вставим следующие операторы с комментариями:
// Объявляем объект "g" класса Graphics и предоставляем // ему возможность рисования на pictureBox1: Graphics g = pictureBox1.CreateGraphics(); g.Clear(Color.Turquoise); // Создаем объекты-кисти для закрашивания фигур SolidBrush myCorp = new SolidBrush(Color.DarkMagenta); SolidBrush myTrum = new SolidBrush(Color.DarkOrchid); SolidBrush myTrub = new SolidBrush(Color.DeepPink); SolidBrush mySeа = new SolidBrush(Color.Blue); //Выбираем перо myPen желтого цвета толщиной в 2 пикселя: Pen myWind = new Pen(Color.Yellow, 2); // Закрашиваем фигуры g.FillRectangle(myTrub,300,125,75,75); // 1 труба (прямоугольник) g.FillRectangle(myTrub,480,125,75,75); // 2 труба (прямоугольник) g.FillPolygon(myCorp, new Point[] // корпус (трапеция) { new Point(100,300),new Point(700,300), new Point(700,300),new Point(600,400), new Point(600,400),new Point(200,400), new Point(200,400),new Point(100,300) } ); g.FillRectangle(myTrum, 250, 200, 350, 100); // палуба (прямоугольник) // Море - 12 секторов-полуокружностей int x = 50; int Radius = 50; while (x <= pictureBox1.Width - Radius) { g.FillPie(mySeа, 0 + x, 375, 50, 50, 0, -180); x += 50; } // Иллюминаторы for (int y = 300; y <= 550; y += 50) { g.DrawEllipse(myWind, y, 240, 20, 20); // 6 окружностей }
В этом примере мы использовали методы класса Graphics: FillRectangle(), FillPolygon(), FillPie() и DrawEllipse(). Найдите их в таблице предыдущей статьи. Кроме того мы используем структуры Point; oбъекты-кисти класса SolidBrush; объект-перо класса Pen. Для рисования волн моря использовался цикл while, для иллюминаторов — цикл for. Полигон задается массивом точек для соединения их сплошной ломаной.
И все, программу можно проверять. Кликнув в окне, сможем увидеть наш кораблик:
Перейдем к следующему примеру «Рисование контура и закраска произвольной области, ограниченной ломаной прямой».
NEW: Наш Чат, в котором вы можете обсудить любые вопросы, идеи, поделиться опытом или связаться с администраторами.
![]() |
![]() |
![]() |
![]() |
Зачем в создании корпуса задействовали 8 точек, когда нужно всего 4? Там все точки зачем-то дублируются
А что за namespace = «Кораблик».??
Имя может быть любое, даже записанное русскими буквами. Вы, когда создаете проект и выбираете его шаблон, в окне «Настроить новый проект» вместо имени по умолчанию WindowsFormsApp1 (или подобного) напишите любое другое допустимое имя, например, Океанский_лайнер, измените, если необходимо, путь к Вашему проекту, и нажмите кнопку «Создать» (проект). Весь Ваш проект теперь будет в папке Океанский_лайнер. Думаю, что это удобно. Я чаще имя пространства имен задаю двумя-тремя английскими словами, например Ocean_Liner. То есть у Вас полная свобода выбора, пишите, как Вам удобно, важно, чтобы новые компоненты проекта находились в этом namespace или были подключены через директиву using (как System и другие).
это делается через класс?
Да. Объект g класса Graphics объявляется в методе pictureBox1_Click(), который в свою очередь задан как метод Form1.
Рисование (после клика на pictureBox1) состоит в вызове методов класса Graphics.