Язык программирования:
C#
Среда программирования:
Microsoft Visual Studio Community
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace gif { public partial class Form1 : Form { SolidBrush bgcol = new SolidBrush(Color.White);//цвет фона SolidBrush white = new SolidBrush(Color.White); //определяем SolidBrush black = new SolidBrush(Color.Black);//цвета для кругов int sd; //счетчик int i1 = 0; //переменные для движения кругов int i2 = 0; int i3 = 0; int i4 = 0; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { timer1.Start(); //при загрузке формы стартует таймер } private void DrawEll1(Graphics gr, Bitmap bmp) //определяем функции для четырех промежуточных состояний DrawEll { gr.FillEllipse(black, 0, 0, 50, 50); gr.FillEllipse(white, 50, 0, 50, 50); gr.FillEllipse(white, 0, 50, 50, 50); gr.FillEllipse(black, 50, 50, 50, 50); } private void DrawEll2(Graphics gr, Bitmap bmp) { gr.FillEllipse(white, 0, 0, 50, 50); gr.FillEllipse(black, 50, 0, 50, 50); gr.FillEllipse(white, 0, 50, 50, 50); gr.FillEllipse(black, 50, 50, 50, 50); } private void DrawEll3(Graphics gr, Bitmap bmp) { gr.FillEllipse(white, 0, 0, 50, 50); gr.FillEllipse(black, 50, 0, 50, 50); gr.FillEllipse(black, 0, 50, 50, 50); gr.FillEllipse(white, 50, 50, 50, 50); } private void DrawEll4(Graphics gr, Bitmap bmp) { gr.FillEllipse(black, 0, 0, 50, 50); gr.FillEllipse(black, 50, 0, 50, 50); gr.FillEllipse(white, 0, 50, 50, 50); gr.FillEllipse(white, 50, 50, 50, 50); } private void MoveEll() //функция для движения кругов { Bitmap b = new Bitmap(100, 100); //создаем битмап Graphics g = Graphics.FromImage(b); //создаем графику g.FillRectangle(bgcol, 0, 0, 500, 500);//заливаем фон g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;//избавляемся от пиксельности по краям if (sd < 51) //определяем движение кругов при разных значениях счетчика анимации { DrawEll1(g, b); g.FillEllipse(white, -50 + i1, 0, 50, 50); g.FillEllipse(black, i1, 0, 50, 50); } if (sd >= 51 && sd < 65) //по окончании одного из четырех циклов делаем перерыв и рисуем промежуточный расклад кругов { DrawEll2(g, b); } if (sd >= 65 && sd < 116) // определяем движение кругов при разных значениях счетчика анимации { DrawEll2(g, b); g.FillEllipse(black, 50 - i2, 50, 50, 50); g.FillEllipse(white, 100 - i2, 50, 50, 50); } if (sd >= 116 && sd < 130) // по окончании одного из четырех циклов делаем перерыв и рисуем промежуточный расклад кругов { DrawEll3(g, b); } if (sd >= 130 && sd < 181) // определяем движение кругов при разных значениях счетчика анимации { DrawEll3(g, b); g.FillEllipse(black, 0, 50 - i3, 50, 50); g.FillEllipse(white, 0, 100 - i3, 50, 50); } if (sd >= 181 && sd < 195) // по окончании одного из четырех циклов делаем перерыв и рисуем промежуточный расклад кругов { DrawEll4(g, b); } if (sd >= 195 && sd < 246) // определяем движение кругов при разных значениях счетчика анимации { DrawEll4(g, b); g.FillEllipse(black, 50, 0 + i4, 50, 50); g.FillEllipse(white, 50, -50 + i4, 50, 50); } if (sd >= 246) // (2) { DrawEll1(g, b); } pictureBox1.BackgroundImage = b; //отображаем битмап на pictureBox } private void timer1_Tick(object sender, EventArgs e) { sd++; //увеличиваем счетчик //gr.FillRectangle(bgcol, 0, 0, 500, 500);//заливаем фон if (sd < 51) //пока счетчик < 51 { i1 += 1; //верхний левый круг движется вправо } if (sd >= 65 && sd < 116) { i2 += 1; //нижний правый круг движется влево } if (sd >= 130 && sd < 181) { i3 += 1; //нижний левый круг движется вверх } if (sd >= 195 && sd < 246) { i4 += 1; //верхний правый круг движетсят вниз } if (sd == 260) { sd = 0; i4 = 0; i1 = 0; i2 = 0; i3 = 0; } //обнуляем все счетчики MoveEll(); //вызываем функцию движения кругов } } }