Язык программирования:
C#
Среда программирования:
Visual Studio C#
Вариант 1
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 Shuffle { public partial class Form1 : Form { //объявление переменных //битмап, графика и заливка Bitmap B; Graphics G; SolidBrush bl, wh; SolidBrush fon1, fon2; //текущее состояние анимации int condidtion; int tick; //координаты кругов и радуиус int x; int y1; int y2; int animY; int rad; //функция прорисовки фона, которая рисует его в зависимот от состояния void Draw(int cnd) { //прорисовка самого фона G.FillRectangle(fon1, 0, 0, pictureBox1.Width, pictureBox1.Height); G.FillRectangle(fon2, 130, 20, 260, 460); //задание координат кругов x = 190; y1 = 60; y2 = 320; //в зависимости от состояния рисует либо белые, либо черные круги if (cnd == 1) { G.FillEllipse(bl, x, y1, rad, rad); G.FillEllipse(bl, x, y2, rad, rad); } else { G.FillEllipse(wh, x, y1, rad, rad); G.FillEllipse(wh, x, y2, rad, rad); } } public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { //инициализация битмап, графику B = new Bitmap(pictureBox1.Width, pictureBox1.Height); G = Graphics.FromImage(B); //включение сглаживания G.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; //присаиваются цвета заливки фона и кругов fon1 = new SolidBrush(Color.Silver); fon2 = new SolidBrush(Color.DimGray); bl = new SolidBrush(Color.Black); wh = new SolidBrush(Color.White); //задается радиус rad = 140; //первая прорисовка фона Draw(1); //инициализация вспомогательных переменых анимации tick = 0; condidtion = 1; //запуск таймера timer1.Enabled = true; //вывод битмапа на экран pictureBox1.Image = B; } private void timer1_Tick(object sender, EventArgs e) { //в зависимости от состояния прорисовывает либо белый падающий круг, либо чёрный if (condidtion == 1) { if (tick == 0) { //если цикл запустился первый раз, то рисуем круг на месте старта G.FillEllipse(wh, x, y1, rad, rad); //увеличивается тик счетчика tick += 10; //и задается начальная координата анимации animY = y1; } else if (tick <= 260) { //пока не прошли нужное расстояние //увеличивается счетчик и приращается координата animY += 5; tick += 5; //рисуется фон Draw(condidtion); //рисуется "падающий" круг G.FillEllipse(wh, x, animY, rad, rad); } else{ //иначе, если круг дошел до места //меняем состояние condidtion = 2; tick = 0; } } //аналогично первой части else if (condidtion == 2) { if (tick == 0) { G.FillEllipse(bl, x, y1, rad, rad); tick += 10; animY = y1; } else if (tick <= 260) { animY += 5; tick += 5; Draw(condidtion); G.FillEllipse(bl, x, animY, rad, rad); } else { condidtion = 1; tick = 0; } } //изображение выводится на экран pictureBox1.Image = B; } } }
Вариант 2
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 WindowsFormsApplication1 { public partial class Form1 : Form { //Инициализация bitmap и графики Bitmap bmp; Graphics g; Point p1 = Point.Empty; Point p2 = Point.Empty; int y = 20; bool k = false;//отвечает за цвет заливки выпадающего круга public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { timer1.Start();//вызываем функцию таймера } private void mydraw(int y, bool key) { //Создаем объекты для закрашивания фигур SolidBrush black = new SolidBrush(Color.Black); SolidBrush white = new SolidBrush(Color.White); SolidBrush gray = new SolidBrush(Color.Gray); Size s = Size.Empty;//размер круга //Создаем bitmap и графику из bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height); g = Graphics.FromImage(bmp); //инициализация переменных s.Width = 200; s.Height = 200; p1.X = pictureBox1.Width / 2 - s.Width / 2; p1.Y = 20; p2.X = p1.X; p2.Y = p1.Y + 350; //заливка фона g.FillRectangle(gray, 0, 0, pictureBox1.Width, pictureBox1.Height); //рисование фигур if (key) { g.FillEllipse(white, p1.X, p1.Y, s.Width, s.Height); g.FillEllipse(white, p2.X, p2.Y, s.Width, s.Height); g.FillEllipse(black, p1.X, y, s.Width, s.Height);//падающий круг } else { g.FillEllipse(black, p1.X, p1.Y, s.Width, s.Height); g.FillEllipse(black, p2.X, p2.Y, s.Width, s.Height); g.FillEllipse(white, p1.X, y, s.Width, s.Height);//падающий круг } } private void pictureBox1_Click(object sender, EventArgs e) { } private void timer1_Tick(object sender, EventArgs e) { y++;//падение круга if (y == p2.Y) { y = p1.Y;//возвращение на исходную позицию //изменение параметра if (k) k = false; else k = true; } mydraw(y,k);// вызов прорисовки pictureBox1.Image = bmp;//отображаем bitmap на PictureBox } } }
Прикрепленный файл | Размер |
---|---|
Вариант 1 (Архипцев) | 86.41 кб |
Вариант 2 (Шерфединов) | 5.47 кб |