
- •Навчальної практики
- •Задача 2
- •Перевизначення методу Len() з урахуванням способу завдання вектора,
- •Код програми
- •Задача 7
- •Код програми
- •Результат роботи програми:
- •Задача 8
- •Код програми
- •Результат роботи програми:
- •Задача 10
- •Код програми
- •Результат роботи програми:
- •Задача 14
- •Код програми
- •Результат роботи програми:
- •Задача 15
- •Код програми
- •Результат роботи програми:
- •Задача 17
- •Код програми
- •Результат роботи програми:
Результат роботи програми:
Рис. 13. Діалогова форма, на якій зображено декілька кіл, що рухаються
Задача 15
Мовою C# розробити діалогову програму з графічним інтерфейсом:
Створити базовий клас «коло», що рухається по вікну форми.
Створити діалогову форму, на якій зображено тільки:
декілька кіл, що рухаються,
регулятор R1, дозволяє задавати і змінювати загальну швидкість руху всіх кіл,
кнопка K1, кожне натискання якої створює наступне коло розміру 60 пікселів і з заданої регулятором R1 швидкістю руху. Початкове положення і напрямок руху задаються випадково. При досягненні краю форми коло «відскакує» від нього за законом дзеркального відображення.
Кожне натискання кнопки додає до моделі наступне коло.
При зіткненні двох кіл обоє зникають.
Перевірити роботу складеної програми.
Код програми
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
namespace Num_7
{
public partial class Form1 : Form
{
private readonly Graphics _graphics;
private const int D = 60;
private readonly List<Circle> _circles = new List<Circle>();
public Form1()
{
InitializeComponent();
FormBorderStyle = FormBorderStyle.FixedSingle;
_graphics = CreateGraphics();
_graphics.Clear(Color.White);
}
private void AddSquare()
{
var c = new Circle();
_circles.Add(c);
Draw(c);
}
private void Draw(Circle c)
{
var circle = new Rectangle(c.PositionX, c.PositionY, D, D);
_graphics.DrawEllipse(c.Color, circle);
}
private void MoveCircle(int index)
{
var c = _circles.ElementAt(index);
if (c.PositionX == 0 ||
c.PositionY == 0 ||
c.PositionX == 380 - D ||
c.PositionY == 370 - D) c.Angle += 90;
var rads = _circles.ElementAt(index).Angle*Math.PI/180;
var posX = c.PositionX + (int)(Math.Cos(rads) * R1.Value);
var posY = c.PositionY + (int)(Math.Sin(rads) * R1.Value);
c.PositionX = posX > 380 - D ? 380 - D : posX < 0 ? 0 : posX;
c.PositionY = posY > 370 - D ? 370 - D : posY < 0 ? 0 : posY;
_circles.RemoveAt(index);
_circles.Add(c);
}
private void K1_Click(object sender, EventArgs e)
{
AddSquare();
}
private void timer1_Tick(object sender, EventArgs e)
{
for (var i = 0; i < _circles.Count; i++)
{
MoveCircle(i);
}
_graphics.Clear(Color.White);
foreach (var c in _circles)
{
Draw(c);
}
}
public class Circle
{
public Circle()
{
var r = new Random();
PositionX = r.Next(10,350);
PositionY = r.Next(10,350);
Angle = r.Next(0,361);
Color = new Pen(System.Drawing.Color.FromArgb(r.Next(0, 256), r.Next(0, 256), r.Next(0, 256)));
}
public Pen Color { get; set; }
public int PositionX { get; set; }
public int PositionY { get; set; }
public int Angle { get; set; }
public bool IsSelected { get; set; }
}
}
}