Untitled
unknown
plain_text
2 years ago
7.2 kB
9
Indexable
using System;
using System.Drawing;
using System.Windows.Forms;
// Корневой класс фигур
public abstract class Shape
{
protected int x;
protected int y;
public Shape(int x, int y)
{
this.x = x;
this.y = y;
}
public abstract void Draw(Graphics graphics);
public abstract void MoveTo(int newX, int newY);
}
// Дочерний класс эллипсов
public class Ellipse : Shape
{
protected int radiusX;
protected int radiusY;
public Ellipse(int x, int y, int radiusX, int radiusY) : base(x, y)
{
this.radiusX = radiusX;
this.radiusY = radiusY;
}
public override void Draw(Graphics graphics)
{
graphics.DrawEllipse(Pens.Black, x - radiusX, y - radiusY, 2 * radiusX, 2 * radiusY);
}
public override void MoveTo(int newX, int newY)
{
// Проверка на выход за границы области рисования
if (newX >= 0 && newY >= 0)
{
x = newX;
y = newY;
}
else
{
MessageBox.Show("Cannot move the ellipse outside the drawing area");
}
}
// Уникальный метод для изменения радиуса окружности
public void ChangeRadius(int newRadiusX, int newRadiusY)
{
radiusX = newRadiusX;
radiusY = newRadiusY;
}
}
// Дочерний класс прямоугольников
public class Rectangle : Shape
{
protected int width;
protected int height;
public Rectangle(int x, int y, int width, int height) : base(x, y)
{
this.width = width;
this.height = height;
}
public override void Draw(Graphics graphics)
{
graphics.DrawRectangle(Pens.Black, x, y, width, height);
}
public override void MoveTo(int newX, int newY)
{
// Проверка на выход за границы области рисования
if (newX >= 0 && newY >= 0)
{
x = newX;
y = newY;
}
else
{
MessageBox.Show("Cannot move the rectangle outside the drawing area");
}
}
// Уникальный метод для изменения линейных размеров прямоугольника
public void ChangeSize(int newWidth, int newHeight)
{
width = newWidth;
height = newHeight;
}
}
// Дочерний класс окружностей
public class Circle : Ellipse
{
public Circle(int x, int y, int radius) : base(x, y, radius, radius)
{
}
// Уникальный метод для изменения радиуса окружности
public void ChangeRadius(int newRadius)
{
radiusX = newRadius;
radiusY = newRadius;
}
}
// Дочерний класс квадратов
public class Square : Rectangle
{
public Square(int x,int y,int side):base(x,y,side ,side )
{
}
// Уникальный метод для изменения линейных размеров квадрата
public void ChangeSize(int newSide)
{
width = newSide;
height = newSide;
}
}
// Дочерний класс многоугольников
public class Polygon : Shape
{
protected int sides;
public Polygon(int x, int y, int sides) : base(x, y)
{
this.sides = sides;
}
public override void Draw(Graphics graphics)
{
Point[] points = new Point[sides];
double angle = 2 * Math.PI / sides;
for (int i = 0; i < sides; i++)
{
int pointX = (int)(x + Math.Cos(i * angle) * 50);
int pointY = (int)(y + Math.Sin(i * angle) * 50);
points[i] = new Point(pointX, pointY);
}
graphics.DrawPolygon(Pens.Black, points);
}
public override void MoveTo(int newX, int newY)
{
// Проверка на выход за границы области рисования
if (newX >= 0 && newY >= 0)
{
x = newX;
y = newY;
}
else
{
MessageBox.Show("Cannot move the polygon outside the drawing area");
}
}
}
// Дочерний класс треугольников
public class Triangle : Polygon
{
public Triangle(int x,int y):base(x,y ,3 )
{
}
}
// Класс сложной фигуры
public class ComplexShape : Shape
{
private Shape[] shapes;
public ComplexShape(int x,int y ,Shape[] shapes):base(x,y )
{
this.shapes = shapes;
}
public override void Draw(Graphics graphics)
{
foreach (Shape shape in shapes)
{
shape.Draw(graphics);
}
}
public override void MoveTo(int newX, int newY)
{
// Проверка на выход за границы области рисования для каждой фигуры в составе сложной фигуры
bool canMove = true;
foreach (Shape shape in shapes)
{
if (newX < 0 || newY < 0)
{
canMove = false;
break;
}
}
if (canMove)
{
x = newX;
y = newY;
foreach (Shape shape in shapes)
{
shape.MoveTo(newX, newY);
}
}
else
{
MessageBox.Show("Cannot move the complex shape outside the drawing area");
}
}
}
// Пример использования библиотеки классов для графических примитивов в Windows Forms
public class MainForm : Form
{
private Shape[] shapes;
public MainForm()
{
// Создание экземпляров различных фигур
Ellipse ellipse = new Ellipse(50, 50, 30, 20);
Rectangle rectangle = new Rectangle(100, 100, 80, 60);
Circle circle = new Circle(200, 200, 40);
Square square = new Square(300, 300, 70);
Polygon polygon = new Polygon(400, 400, 5);
Triangle triangle = new Triangle(500,500);
// Создание сложной фигуры из простых фигур
shapes = new Shape[] { ellipse, rectangle, circle, square, polygon, triangle };
// Установка размеров формы
Size = new Size(600, 600);
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Graphics graphics = e.Graphics;
foreach (Shape shape in shapes)
{
shape.Draw(graphics);
}
}
protected override void OnMouseDown(MouseEventArgs e)
{
base.OnMouseDown(e);
// Перемещение фигуры по щелчку мыши
foreach (Shape shape in shapes)
{
shape.MoveTo(shape.x + 10, shape.y + 10);
}
Invalidate();
}
}
// Запуск приложения
public class Program
{
public static void Main()
{
Application.Run(new MainForm());
}
}Editor is loading...
Leave a Comment