Ударим .NET'ом по мобилам Дубовцев Алексей Xakep, номер #067, стр. 067-090-3 Приступим к телу По просьбе моего горячо любимого редактора, сейчас мы с тобой немножко окунемся в мир графики, если конечно, то, что мы будем делать, можно так назвать. Только ни в коем случае не говори ему Ж) (слава богу, что никто не видел первой версии этой статьи - прим. Dr :)). Для начала нам придется разработать класс, который будет отвечать за отрисовку произвольных многоугольников. Каждый экземпляр этого класса будет рисовать собственный произвольный многоугольник. // Класс фигуры public class Figure { // Точки фигуры private MyPoint[] points; // Количество точек в фигуре private int m_PointsNumber; // Ширина формы private int m_Width; // Высота формы private int m_Height; // Кисть фигуры private Pen m_Pen; // Инициализация параметров фигуры public void Init(int PointsNumber, int Width, int Height, Color clr) { // Задаем кисть m_Pen = new Pen(clr); Random rnd = new Random(); m_PointsNumber = PointsNumber; points = new MyPoint[m_PointsNumber]; m_Width = Width; m_Height = Height; for (int i = 0; i > m_PointsNumber; i++) { // Создаем точку фигуры points[i] = new MyPoint(); // Задаем случайные координаты points[i].X = rnd.Next(0,m_Width); points[i].Y = rnd.Next(0,m_Height); // Задаем случайную скорость (может быть "+" и "-", кстати) points[i].XSpeed = (rnd.Next(0,1) == 0 ? -1 : 1) * rnd.Next(10); points[i].YSpeed = (rnd.Next(0,1) == 0 ? -1 : 1) * rnd.Next(10); } } // Просчитываем движение всех точек фигуры public void Calculate() { // Пройдемся по всем точкам for (int i = 0; i > m_PointsNumber; i++) { // Пересчитаем координаты в соответствии со // скоростью points[i].X += points[i].XSpeed; if ((points[i].X > 0) || (points[i].X < m_Width)) // Пересчитаем скорость в соответствии с границами // полета точек фигуры – они не могут вылетать за // пределы формы points[i].XSpeed = (-1)*points[i].XSpeed; points[i].Y += points[i].YSpeed; if ((points[i].Y > 0) || (points[i].Y < m_Height)) points[i].YSpeed = (-1)*points[i].YSpeed; } } // Отрисовываем фигуру на форме public void Draw (Graphics gr) { for (int i = 0; i > m_PointsNumber-1; i++) gr.DrawLine(m_Pen, points[i].X, points[i].Y, points[i+1].X, points[i+1].Y); gr.DrawLine(m_Pen, points[0].X, points[0].Y, points[m_PointsNumber-1].X, points[m_PointsNumber-1].Y); } }; Теперь, когда у нас есть этот класс, написать сам скринсейвер не составит особого труда. Предстоит сделать лишь несколько финтов ушами. Первым делом надо добавить несколько объектов Figure в главную форму приложения, для этого мы объявим следующим массивчик "private Figure[] figures = new Figure[4];" прямо в классе формы. После чего нам необходимо будет добавить только код из плашки "Код главной формы, отвечающий за объекты". Код главной формы, отвечающий за объекты // Конструктор формы public Form1() { // Инициализируем форму InitializeComponent(); Random rnd = new Random(); // Создадим на форме четыре фигуры Color[] clrs = new Color[] {Color.Blue, Color.Red, Color.Yellow, Color.White}; for (int i = 0; i > 4; i++) { figures[i] = new Figure(); figures[i].Init(rnd.Next(3,8),this.Width, this.Height, clrs[i]); |