Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Pechat_33__33-4.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
381.05 Кб
Скачать

Результат роботи програми:

Рис. 10. Cтворюється новий об'єкт «квадрат» з центром у середині вікна

Рис. 11. Натискання кнопки дозволяє обрати наступний квадрат. Він стає червоним, а попередній, відповідно, синім.

Задача 14

Мовою C# розробити діалогову програму з графічним інтерфейсом:

    1. Створити базовий клас «коло», що рухається по вікну форми.

    2. Створити діалогову форму, на якій зображено тільки:

      1. декілька кіл, що рухаються,

      2. регулятор R1 для завдання швидкості чергового кола,

      3. кнопка K1, кожне натискання якої створює в центрі форми чергове коло розміром 30 пікселів і заданою швидкістю руху. Напрямок руху першого кола - вертикально вгору, кожного наступного - на 10° праворуч. При досягненні краю форми коло зникає.

Перевірити роботу складеної програми.

Код програми

using System;

using System.Collections.Generic;

using System.Drawing;

using System.Linq;

using System.Windows.Forms;

namespace Num_6

{

public partial class Form1 : Form

{

private readonly Graphics _graphics;

private const int CenterX = 175;

private const int CenterY = 175;

private const int D = 30;

private static int _currentAngle = 260;

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(R1.Value);

_circles.Add(c);

Draw(c);

}

private void Draw(Circle c)

{

var circle = new Rectangle(c.PositionX, c.PositionY, D, D);

_graphics.DrawEllipse(Pens.Black, circle);

}

private void MoveCircle(int index)

{

var c = _circles.ElementAt(index);

if (c.PositionX == 0 || c.PositionX == 380 - D || c.PositionY == 0 || c.PositionY == 370 - D)

{

_circles.Remove(c);

return;

}

var rads = _circles.ElementAt(index).Angle*Math.PI/180;

var posX = c.PositionX + (int)(Math.Cos(rads) * c.Speed);

var posY = c.PositionY + (int)(Math.Sin(rads) * c.Speed);

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(double s)

{

Speed = s;

PositionX = CenterX;

PositionY = CenterY;

_currentAngle += 10;

Angle = _currentAngle;

}

public double Speed { get; set; }

public int PositionX { get; set; }

public int PositionY { get; set; }

public int Angle { get; set; }

public bool IsSelected { get; set; }

}

private void Form1_Load(object sender, EventArgs e)

{

}

}

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]