Язык программирования:
C#
Среда программирования:
Microsoft Visual Studio
using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; namespace DemoScene { public partial class Form1 : Form { // Объявление переменных: int h, w; // Высота, ширина рабочей области Random r; // Элемента класса случайных чисел Pen myPen; // Ручка List<pointz> dots; // Массив элементов создаваемого класса pointz Temp; // Буферный элемент Graphics g; Bitmap bm; private void timer1_Tick(object sender, EventArgs e) { bm = new Bitmap(w, h); // Создание битмапа по размерам рабочей области g = Graphics.FromImage(bm); // Связь между графикой и битмапом. PointsPP(); // Движение и увеличение объектов. for (int i = 0; i < dots.Count; i++) { if (dots[i].GetX() > 0 && dots[i].GetY() > 0 && dots[i].GetX() < w && dots[i].GetY() < h) { // Если объект внутри рабочей области - отрисовка объекта. myPen.Color = dots[i].GetColor(); myPen.Width = dots[i].GetSize(); g.DrawEllipse(myPen, dots[i].GetX(), dots[i].GetY(), myPen.Width, myPen.Width); } else dots.Remove(dots[i]); // Иначе - удалить объект из списка. } // Отрисовка сетки: myPen = new Pen(Color.Black, 1); for (int i = 0; i <= w / 50; i++) { g.DrawLine(myPen, i * 50, 0, i * 50, h - 1); } for (int i = 0; i <= h / 50; i++) { g.DrawLine(myPen, 0, i * 50, w - 1, i * 50); } pictureBox1.Image = bm; // Вывод битмапа в рабочуу область. if (dots.Count == 0) timer1.Enabled = false; // Если в списке закончились // объекты - выключить таймер. } public Form1() { // Инициализация всех компонентов при старте: InitializeComponent(); dots = new List<pointz>(); r = new Random(); w = pictureBox1.Width; h = pictureBox1.Height; } private void pictureBox1_MouseClick(object sender, MouseEventArgs e) { timer1.Enabled = true; // Включение таймера. // Создание, инициализация объектов случайного цвета, добавление в список. int PointX = e.X, PointY = e.Y; Color RandColor = RandCol(); for (int i = 1; i <= 4; i++) { Temp = new pointz(PointX, PointY, i, RandColor, 4); dots.Add(Temp); } myPen = new Pen(Color.Purple, 3); } Color RandCol() // Генерация случайного цвета. { Color outCol = new Color(); outCol = Color.FromArgb(65535 * r.Next(40000, 50000) + r.Next(1, 16777216)); return outCol; // Возвращение случайного цвета. } void PointsPP() { for (int i = 0; i < dots.Count; i++) { if ((dots[i].GetX() % 50 == 0 && dots[i].GetNapr() > 2) || (dots[i].GetY() % 50 == 0) && dots[i].GetNapr() < 3) dots[i].SetSize(dots[i].GetSize() + 3); // увеличение "точки" при прохождении через решетку. switch(dots[i].GetNapr()) // Движение объектов, в зависимости от направления. { case 1: dots[i].SetY(dots[i].GetY() - 1); break; case 2: dots[i].SetY(dots[i].GetY() + 1); break; case 3: dots[i].SetX(dots[i].GetX() - 1); break; case 4: dots[i].SetX(dots[i].GetX() + 1); break; } } } } public class pointz // Класс цветных точек, выводимых на экране: { int X, Y, napr, size; // Объявление переменных координат, направления, размера. Color PointCol; // Объявление переменной, отвечающей за цвет точки. public pointz(int X, int Y, int napr, Color PColor, int size) // Базовый конструктор класса. { this.X = X; this.Y = Y; this.napr = napr; this.PointCol = PColor; this.size = size; } // Методы взаимодействия со всеми приватными переменными класса: public int GetX() { return X; } public int GetY() { return Y; } public int GetNapr() { return napr; } public Color GetColor() { return PointCol; } public void SetX(int X) { this.X = X; } public void SetY(int Y) { this.Y = Y; } public void SetSize(int size) { this.size = size; } public int GetSize() { return size; } } }
Прикрепленный файл | Размер |
---|---|
SimfikDuke_demo.zip | 146.65 кб |