Язык программирования:
C#
Среда программирования:
Visual Studio 2013
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { Bitmap buf; //Буфер для прорисовки промежуточных кадров Graphics _graphic; //Граффика SolidBrush background = new SolidBrush (Color.White); //Кисть для заливки фона SolidBrush figure = new SolidBrush(Color.Black); //Кисть для заливки фигур bool rotate = false; // Параметры скорости движения фигур int trspeed = 3; int rotspeed = 2; //Точки квадрата Point[] sq = { new Point(150, 150), new Point(150, 350), new Point(350, 350), new Point(350, 150)}; //Точки треугольников Point[] tr1 = { new Point(-1, 150), new Point(-101, 250), new Point(-1, 350) }; Point[] tr2 = { new Point(150, 500), new Point(250, 600), new Point(350, 500) }; Point[] tr3 = { new Point(500, 150), new Point(600, 250), new Point(500, 350) }; Point[] tr4 = { new Point(150, -1), new Point(250, -101), new Point(350, -1) }; public Form1() { InitializeComponent(); buf = new Bitmap(MainBox.Width, MainBox.Height);//Определение буфера _graphic = Graphics.FromImage(buf);//Определение графики из буфера _graphic.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;//Режим размытия граффики MainBox.BackColor = background.Color;//Цвет фона timer1.Enabled = true;//Включение таймера } //Кнопка выхода private void button1_Click_1(object sender, EventArgs e) { Application.Exit(); } //Функция таймера выполняется каждые 5 мс private void timer1_Tick(object sender, EventArgs e) { if (!rotate) { //Перемещение треугольников tr1[0].X += trspeed; tr1[1].X += trspeed; tr1[2].X += trspeed; tr2[0].Y -= trspeed; tr2[1].Y -= trspeed; tr2[2].Y -= trspeed; tr3[0].X -= trspeed; tr3[1].X -= trspeed; tr3[2].X -= trspeed; tr4[0].Y += trspeed; tr4[1].Y += trspeed; tr4[2].Y += trspeed; if (tr1[2].X >= 150) { //Если треугольники дошли до конца возвращение их в стартовые позиции rotate = true; sq[0].X = 250; sq[0].Y = 50; sq[1].X = 50; sq[1].Y = 250; sq[2].X = 250; sq[2].Y = 450; sq[3].X = 450; sq[3].Y = 250; tr1[0].X = -1; tr1[0].Y = 150; tr1[1].X = -101; tr1[1].Y = 250; tr1[2].X = -1; tr1[2].Y = 350; tr2[0].X = 150; tr2[0].Y = 500; tr2[1].X = 250; tr2[1].Y = 600; tr2[2].X = 350; tr2[2].Y = 500; tr3[0].X = 500; tr3[0].Y = 150; tr3[1].X = 600; tr3[1].Y = 250; tr3[2].X = 500; tr3[2].Y = 350; tr4[0].X = 150; tr4[0].Y = -1; tr4[1].X = 250; tr4[1].Y = -101; tr4[2].X = 350; tr4[2].Y = -1; } } else { //Вращение квадрата sq[0].X -= rotspeed; sq[0].Y += rotspeed; sq[1].X += rotspeed; sq[1].Y += rotspeed; sq[2].X += rotspeed; sq[2].Y -= rotspeed; sq[3].X -= rotspeed; sq[3].Y -= rotspeed; if (sq[0].X <= 150) { rotate = false; } } //Заливка фона и прорисовка фигур _graphic.Clear(background.Color); _graphic.FillPolygon(figure, sq); _graphic.FillPolygon(figure, tr1); _graphic.FillPolygon(figure, tr2); _graphic.FillPolygon(figure, tr3); _graphic.FillPolygon(figure, tr4); MainBox.Image = buf; } } }
Прикрепленный файл | Размер |
---|---|
Scherbak_Squere.rar | 89.82 кб |