Курсовая работа Реализация класса динамически перемещающихся графических объектов средствами языка программирования C#. Реализация класса динамически перемещающихся графических объекто. Реализация класса динамически перемещающихся графических объектов средствами языка программирования C#
Скачать 366.36 Kb.
|
Рисунок 7 – Объект круг увеличивается на каждом витке Рисунок 8 – Объект круг уменьшается на каждом витке Рисунок 9 – Объект черепаха уменьшается на каждом витке Если нажать на кнопку “Проверить объект”, то можно узнать состояние объекта (рис. 9). Рисунок 9 –Информация об объекте Исключительная ситуация может возникнуть тогда, когда объект не создан и пользователь нажимает на кнопку “Перемещение”(Увеличить или уменьшить), то программа выведет ошибку (рис. 10). Рисунок 10 – Не выбран объект ЗАКЛЮЧЕНИЕ В результате курсовой работы была выполнена поставленная цель – Реализовать анимацию нескольких объектов по выбору пользователя. Реализованы различные анимации для каждого объекта. Программа реализована с помощью языка программирования C#. Выполнен удобный пользовательский интерфейс с помощью Windows Forms. Приобретены навыки создания UML-диаграммы и отчетов. Были получены навыки в тестирование и отладки программного продукта. Полученные навыки и умения пригодятся в дальнейшем для успешного построения карьеры. БИБЛИОГРАФИЧЕСКИЙ СПИСОК 1. Metanit сайт о программирование [Электронный ресурс] – Режим доступа: https://metanit.com/ - 19.12.2020. 2. CitForum о программирование [Электронный ресурс] – Режим доступа: http://citforum.ru/ - 19.12.2020. 3. Стандарт организации "Оформление выпускных квалификационных и курсовых работ (проектов)" СТО СМК 4.2.3.21-2018. – Благовещенск: АмГУ, 2018. – 75 с. 4. Галаган, Т. А. Методические указания к курсовому проектированию по дисциплине «Объектно–ориентированный анализ, программирование» / Т. А. Галаган. – Благовещенск: Амурский государственный университет, 2020. – 24 с. ПРИЛОЖЕНИЕ А UML-диаграмма программы Рисунок А.1 содержит представление UML-диаграммы программы. Рисунок А1 – UML-диаграмма программы ПРИЛОЖЕНИЕ Б Код программы Код файла Form1.cs 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 WindowsFormsApp6 { public partial class Form1 : Form { Graphics g; TurtleFigureMoveUpDown turtle; CircleMove figure; public Form1() { InitializeComponent(); g = pictureBox1.CreateGraphics(); } private void button1_Click(object sender, EventArgs e) { if (radioButton1.Checked) { g.Clear(Color.White); turtle = new TurtleFigureMoveUpDown(pictureBox1.Width / 2, pictureBox1.Height / 2); turtle.Create(g, pictureBox1.Width / 2, pictureBox1.Height / 2); figure = null; } else if (radioButton2.Checked) { g.Clear(Color.White); figure = new CircleMove(pictureBox1.Width / 2, pictureBox1.Height / 2); figure.Create(g, pictureBox1.Width / 2, pictureBox1.Height / 2); turtle = null; } else { MessageBox.Show("Выберите объект", "Информация"); } } private void button2_Click(object sender, EventArgs e) { if (turtle != null) { turtle.Move(g); } else if (figure != null) { figure.Move(g); } else { MessageBox.Show("Выберите объект", "Информация"); } } private void button5_Click(object sender, EventArgs e) { if(turtle!=null) { turtle.StopMove(); turtle = null; } if (figure != null) { figure.StopMove(); figure = null; } g.Clear(Color.White); } private void button4_Click(object sender, EventArgs e) { if (turtle == null && figure == null) { MessageBox.Show("Объект не создан","Проверка"); } else { MessageBox.Show("Объект создан", "Проверка"); } } private void button3_Click(object sender, EventArgs e) { if (radioButton1.Checked && turtle != null) turtle.MoveIncrease(g); else if (radioButton2.Checked && figure != null) figure.MoveIncrease(g); else MessageBox.Show("Объект не создан", "Ошибка"); } private void button7_Click(object sender, EventArgs e) { if (radioButton1.Checked && turtle != null) turtle.MoveDecrease(g); else if (radioButton2.Checked && figure != null) figure.MoveDecrease(g); else MessageBox.Show("Объект не создан", "Ошибка"); } private void button6_Click_1(object sender, EventArgs e) { if (figure != null) { figure.StopMove(); } else if (turtle != null) { turtle.StopMove(); } } } } Код файла Class1.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Drawing.Drawing2D; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApp6 { interface MoveUpDown { void MoveIncrease(Graphics g); void MoveDecrease(Graphics g); } abstract class Figure { protected Random r; protected Timer timer; protected int CenterX; protected int CenterY; protected float time; public abstract void Create(Graphics g, int sizeX, int sizeY); public abstract void Move(Graphics g); public void StopMove() { if (timer != null) timer.Stop(); } } class TurtleFigure : Figure { protected Pen p = new Pen(Color.Black, 1); protected int sizePaw = 14; //Размер лапы protected int sizeEye = 4; //Размер глаза protected int sizeHeadX = 22; //Размер лапы protected int sizeHeadY = 20; //Размер глаза public TurtleFigure(int sizeX, int SizeY) { CenterX = sizeX; CenterY = SizeY; } public override void Create(Graphics g, int sizeX, int sizeY) { g.FillEllipse(Brushes.Green, sizeX - 11, sizeY - 19, sizeHeadX, sizeHeadY); g.DrawEllipse(p, sizeX - 11, sizeY - 19, sizeHeadX, sizeHeadY); g.FillEllipse(Brushes.Black, sizeX - 7, sizeY - 14, sizeEye, sizeEye); g.FillEllipse(Brushes.Black, sizeX + 3, sizeY - 14, sizeEye, sizeEye); g.FillEllipse(Brushes.Green, sizeX - 32, sizeY + 4, sizePaw, sizePaw); g.DrawEllipse(p, sizeX - 32, sizeY + 4, sizePaw, sizePaw); g.FillEllipse(Brushes.Green, sizeX + 18, sizeY + 4, sizePaw, sizePaw); g.DrawEllipse(p, sizeX + 18, sizeY + 4, sizePaw, sizePaw); g.FillEllipse(Brushes.Green, sizeX - 30, sizeY + 44, sizePaw, sizePaw); g.DrawEllipse(p, sizeX - 30, sizeY + 44, sizePaw, sizePaw); g.FillEllipse(Brushes.Green, sizeX + 16, sizeY + 44, sizePaw, sizePaw); g.DrawEllipse(p, sizeX + 16, sizeY + 44, sizePaw, sizePaw); g.FillEllipse(Brushes.Brown, sizeX - 25, sizeY, 50, 60); g.DrawEllipse(p, sizeX - 25, sizeY, 50, 60); } public override void Move(Graphics g) { timer = new Timer(); timer.Interval = 500; time = 0; Brush b = Brushes.Brown; r = new Random(); int k; timer.Tick += (sender, args) => { int x = (int)(CenterX + 120 * Math.Sin(time)); int y = (int)(CenterY + 120 * Math.Cos(time)); time += 0.5f; g.Clear(Color.White); if (time % 7 == 0) { time = 0; x = (int)(CenterX + 120 * Math.Sin(time)); y = (int)(CenterY + 120 * Math.Cos(time)); k = r.Next(0, 3); switch (k) { case 0: b = Brushes.Brown; break; case 1: b = Brushes.SaddleBrown; break; case 2: b = Brushes.Gray; break; } time += 0.5f; } this.Create(g, x, y); g.FillEllipse(b, x - 25, y, 50, 60); }; timer.Start(); } } class TurtleFigureMoveUpDown : TurtleFigure, MoveUpDown { public TurtleFigureMoveUpDown(int sizeX, int SizeY) : base(sizeX, SizeY) { } int countCircle; int changeSizeEye; int changeSizeHeadY; int changeSizePaw; int changeSizeHeadX; public void MoveIncrease(Graphics g) { int x; int y; changeSizeEye = sizeEye; changeSizeHeadY = sizeHeadY; changeSizePaw = sizePaw; changeSizeHeadX = sizeHeadX; countCircle = 0; g.Clear(Color.White); timer = new Timer(); timer.Interval = 500; time = 0; timer.Tick += (sender, args) => { x = (int)(CenterX + 120 * Math.Sin(time)); y = (int)(CenterY + 120 * Math.Cos(time)); time += 0.5f; g.Clear(Color.White); if (time % 7 == 0) { countCircle++; if (countCircle == 2) timer.Stop(); time = 0; changeSizeEye++; changeSizeHeadY += 2; changeSizePaw += 2; changeSizeHeadX += 2; x = (int)(CenterX + 120 * Math.Sin(time)); y = (int)(CenterY + 120 * Math.Cos(time)); } g.FillEllipse(Brushes.Green, x - changeSizeHeadX / 2 + 2, y - changeSizeHeadY + 1, changeSizeHeadX, changeSizeHeadY); g.DrawEllipse(p, x - changeSizeHeadX / 2 + 2, y - changeSizeHeadY + 1, changeSizeHeadX, changeSizeHeadY); g.FillEllipse(Brushes.Black, x - changeSizeEye - 2, y - 3 * changeSizeEye, changeSizeEye, changeSizeEye); g.FillEllipse(Brushes.Black, x + changeSizeEye, y - 3 * changeSizeEye, changeSizeEye, changeSizeEye); g.FillEllipse(Brushes.Green, x - 2 * changeSizePaw - 3, y + changeSizePaw - 10, changeSizePaw, changeSizePaw); g.DrawEllipse(p, x - 2 * changeSizePaw - 3, y + changeSizePaw - 10, changeSizePaw, changeSizePaw); g.FillEllipse(Brushes.Green, x + changeSizePaw + 4, y + changeSizePaw - 10, changeSizePaw, changeSizePaw); g.DrawEllipse(p, x + changeSizePaw + 4, y + changeSizePaw - 10, changeSizePaw, changeSizePaw); g.FillEllipse(Brushes.Green, x - changeSizePaw * 2 - 4, y + changeSizePaw * 2 + 6, changeSizePaw, changeSizePaw); g.DrawEllipse(p, x - changeSizePaw * 2 - 4, y + changeSizePaw * 2 + 6, changeSizePaw, changeSizePaw); g.FillEllipse(Brushes.Green, x + changeSizePaw + 4, y + changeSizePaw * 2 + 6, changeSizePaw, changeSizePaw); g.DrawEllipse(p, x + changeSizePaw + 4, y + changeSizePaw * 2 + 6, changeSizePaw, changeSizePaw); g.FillEllipse(Brushes.Brown, x - 25, y, 50, 60); g.DrawEllipse(p, x - 25, y, 50, 60); }; timer.Start(); } public void MoveDecrease(Graphics g) { int x; int y; changeSizeEye = sizeEye; changeSizeHeadY = sizeHeadY; changeSizePaw = sizePaw; changeSizeHeadX = sizeHeadX; countCircle = 0; g.Clear(Color.White); timer = new Timer(); timer.Interval = 300; time = 0; timer.Tick += (sender, args) => { x = (int)(CenterX + 120 * Math.Sin(time)); y = (int)(CenterY + 120 * Math.Cos(time)); time += 0.5f; g.Clear(Color.White); if (time % 7 == 0) { countCircle++; if (countCircle == 3) timer.Stop(); time = 0; changeSizeHeadY -= 1; changeSizePaw -= 1; changeSizeHeadX -= 1; x = (int)(CenterX + 120 * Math.Sin(time)); y = (int)(CenterY + 120 * Math.Cos(time)); } g.FillEllipse(Brushes.Green, x - 11, y - 17, changeSizeHeadX, changeSizeHeadY); g.DrawEllipse(p, x - 11, y - 17, changeSizeHeadX, changeSizeHeadY); g.FillEllipse(Brushes.Black, x - 7, y - 13, changeSizeEye, changeSizeEye); g.FillEllipse(Brushes.Black, x + 3, y - 13, changeSizeEye, changeSizeEye); g.FillEllipse(Brushes.Green, x - 30, y + 4, changeSizePaw, changeSizePaw); g.DrawEllipse(p, x - 30, y + 4, changeSizePaw, changeSizePaw); g.FillEllipse(Brushes.Green, x + 18, y + 4, changeSizePaw, changeSizePaw); g.DrawEllipse(p, x + 18, y + 4, changeSizePaw, changeSizePaw); g.FillEllipse(Brushes.Green, x - 30, y + 44, changeSizePaw, changeSizePaw); g.DrawEllipse(p, x - 30, y + 44, changeSizePaw, changeSizePaw); g.FillEllipse(Brushes.Green, x + 16, y + 44, changeSizePaw, changeSizePaw); g.DrawEllipse(p, x + 16, y + 44, changeSizePaw, changeSizePaw); g.FillEllipse(Brushes.Brown, x - 25, y, 50, 60); g.DrawEllipse(p, x - 25, y, 50, 60); }; timer.Start(); } } //////////////////// ///////////Класс черепашка//////////// //////////////////// class CircleFigure : Figure { protected int size = 50; protected Brush brush = Brushes.Violet; int count; public CircleFigure(int CenterX, int CenterY) { this.CenterX = CenterX; this.CenterY = CenterY; } public override void Create(Graphics g, int sizeX, int sizeY) { g.FillEllipse(brush, sizeX - size, sizeY - size, 100, 100); } public override void Move(Graphics g) { timer = new Timer(); timer.Interval = 300; time = 0; count = 0; timer.Tick += (sender, args) => { g.Clear(Color.White); if(time%6==0) { time = 0; switch(count) { case 0: brush = Brushes.Violet; break; case 1: brush = Brushes.Red; break; case 2: brush = Brushes.Blue; break; case 3: brush = Brushes.Green; break; case 4: brush = Brushes.Yellow; break; case 5: brush = Brushes.AliceBlue; break; default: brush = Brushes.DarkBlue; count = 0; break; } count++; } int x = (int)(CenterX + 100 * Math.Sin(time)); int y = (int)(CenterY + 100 * Math.Cos(time)); time += 0.5f; g.FillEllipse(brush, x - size, y - size, 2*size, 2*size); }; timer.Start(); } } class CircleMove: CircleFigure, MoveUpDown { public CircleMove(int CenterX, int CenterY) : base(CenterX, CenterY) { } int sizeChange; public void MoveIncrease(Graphics g) { timer = new Timer(); timer.Interval = 500; time = 0; sizeChange = size; timer.Tick += (sender, args) => { g.Clear(Color.White); int x = (int)(CenterX + 100 * Math.Sin(time)); int y = (int)(CenterY + 100 * Math.Cos(time)); time ++; g.FillEllipse(brush, x - sizeChange, y - sizeChange, sizeChange * 2, sizeChange * 2); if (time % 6 == 0) { sizeChange += 5; time = 0; } }; timer.Start(); } public void MoveDecrease(Graphics g) { timer = new Timer(); timer.Interval = 500; time = 0; sizeChange = size; timer.Tick += (sender, args) => { g.Clear(Color.White); time++; int x = (int)(CenterX + 100 * Math.Sin(time)); int y = (int)(CenterY + 100 * Math.Cos(time)); g.FillEllipse(brush, x - sizeChange, y - sizeChange, sizeChange * 2, sizeChange * 2); if (time % 6 == 0) { sizeChange -= 5; if (sizeChange <= 0) timer.Stop(); time = 0; } }; timer.Start(); } } } |