Добавление новых классов

This commit is contained in:
Максим Дмитриев 2025-02-23 19:08:40 +04:00
parent 41f539a290
commit 2cc24286b0
7 changed files with 239 additions and 117 deletions

View File

@ -1,4 +1,4 @@
namespace ProjectAirbus; namespace ProjectAirbus.Drawnings;
/// <summary> /// <summary>
/// Направление перемещения /// Направление перемещения

View File

@ -0,0 +1,62 @@
using ProjectAirbus.Entities;
namespace ProjectAirbus.Drawnings;
/// <summary>
/// Класс, отвечающий за прорисовку и перемещение объекта-сущности
/// </summary>
public class DrawningAirbus : DrawningBus
{
/// <summary>
/// Конструктор
/// </summary>
/// <param name="speed">Скорость</param>
/// <param name="weight">Вес</param>
/// <param name="bodyColor">Основной цвет</param>
/// <param name="additionalColor">Дополнительный цвет</param>
/// <param name="passengerSection">Признак наличия пассажирского отсека</param>
/// <param name="engines">Признак наличия двигателя</param>
public DrawningAirbus(int speed, double weight, Color bodyColor, Color additionalColor, bool passengerSection, bool engines) : base(155, 70)
{
EntityBus = new EntityAirbus(speed, weight, bodyColor, additionalColor, passengerSection, engines);
}
/// <summary>
/// Прорисовка объекта
/// </summary>
/// <param name="g"></param>
public override void DrawTransport(Graphics g)
{
if (EntityBus == null || EntityBus is not EntityAirbus airbus || !_startPosX.HasValue || !_startPosY.HasValue)
{
return;
}
Pen pen = new(Color.Black, 3);
Brush additionalBrush = new SolidBrush(airbus.AdditionalColor);
// доп. отсек для пассажиров
Point[] pointsSection =
{
new Point(_startPosX.Value + 45, _startPosY.Value + 30),
new Point(_startPosX.Value + 65, _startPosY.Value + 20),
new Point(_startPosX.Value + 95, _startPosY.Value + 20),
new Point(_startPosX.Value + 115, _startPosY.Value + 30)
};
if (airbus.PassengerSection)
{
g.FillPolygon(additionalBrush, pointsSection);
g.DrawPolygon(pen, pointsSection);
}
base.DrawTransport(g);
//доп. двигатель
if (airbus.Engines)
{
g.FillEllipse(additionalBrush, _startPosX.Value, _startPosY.Value + 30, 35, 15);
g.DrawEllipse(pen, _startPosX.Value, _startPosY.Value + 30, 35, 15);
}
}
}

View File

@ -1,14 +1,17 @@
namespace ProjectAirbus; using ProjectAirbus.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
/// <summary> namespace ProjectAirbus.Drawnings;
/// Класс, отвечающий за прорисовку и перемещение объекта-сущности public class DrawningBus
/// </summary>
public class DrawningAirbus
{ {
/// <summary> /// <summary>
/// Класс-сущность /// Класс-сущность
/// </summary> /// </summary>
public EntityAirbus? EntityAirbus { get; private set; } public EntityBus? EntityBus { get; protected set; }
/// <summary> /// <summary>
/// Ширина окна /// Ширина окна
@ -23,12 +26,12 @@ public class DrawningAirbus
/// <summary> /// <summary>
/// Левая координата прорисовки аэробуса /// Левая координата прорисовки аэробуса
/// </summary> /// </summary>
private int? _startPosX; protected int? _startPosX;
/// <summary> /// <summary>
/// Верхняя кооридната прорисовки аэробуса /// Верхняя кооридната прорисовки аэробуса
/// </summary> /// </summary>
private int? _startPosY; protected int? _startPosY;
/// <summary> /// <summary>
/// Ширина прорисовки аэробуса /// Ширина прорисовки аэробуса
@ -41,24 +44,38 @@ public class DrawningAirbus
private readonly int _drawningAirbusHeight = 70; private readonly int _drawningAirbusHeight = 70;
/// <summary> /// <summary>
/// Инициализация свойств /// Пустой конструктор
/// </summary> /// </summary>
/// <param name="speed">Скорость</param> private DrawningBus()
/// <param name="weight">Вес</param>
/// <param name="bodyColor">Основной цвет</param>
/// <param name="additionalColor">Дополнительный цвет</param>
/// <param name="passengerSection">Признак наличия пассажирского отсека</param>
/// <param name="engines">Признак наличия двигателя</param>
public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool passengerSection, bool engines)
{ {
EntityAirbus = new EntityAirbus();
EntityAirbus.Init(speed, weight, bodyColor, additionalColor, passengerSection, engines);
_pictureWidth = null; _pictureWidth = null;
_pictureHeight = null; _pictureHeight = null;
_startPosX = null; _startPosX = null;
_startPosY = null; _startPosY = null;
} }
/// <summary>
/// Конструктор
/// </summary>
/// <param name="speed">Скорость</param>
/// <param name="weight">Вес</param>
/// <param name="bodyColor">Основной цвет</param>
public DrawningBus(int speed, double weight, Color bodyColor) : this()
{
EntityBus = new EntityBus(speed, weight, bodyColor);
}
/// <summary>
/// Конструктор для наследников
/// </summary>
/// <param name="drawningAirbusWidth">Ширина прорисовки аэробуса</param>
/// <param name="drawningAirbusHeight">Высота прорисовки аэробуса</param>
protected DrawningBus(int drawningAirbusWidth, int drawningAirbusHeight) : this()
{
_drawningAirbusWidth = drawningAirbusWidth;
_drawningAirbusHeight = drawningAirbusHeight;
}
/// <summary> /// <summary>
/// Установка границ поля /// Установка границ поля
/// </summary> /// </summary>
@ -121,7 +138,7 @@ public class DrawningAirbus
} }
else if (y < 0) else if (y < 0)
{ {
_startPosY= 0; _startPosY = 0;
} }
else else
{ {
@ -136,7 +153,7 @@ public class DrawningAirbus
/// <returns>true - перемещене выполнено, false - перемещение невозможно</returns> /// <returns>true - перемещене выполнено, false - перемещение невозможно</returns>
public bool MoveTransport(DirectionType direction) public bool MoveTransport(DirectionType direction)
{ {
if (EntityAirbus == null || !_startPosX.HasValue || !_startPosY.HasValue) if (EntityBus == null || !_startPosX.HasValue || !_startPosY.HasValue)
{ {
return false; return false;
} }
@ -145,30 +162,30 @@ public class DrawningAirbus
{ {
//влево //влево
case DirectionType.Left: case DirectionType.Left:
if (_startPosX.Value - EntityAirbus.Step > 0) if (_startPosX.Value - EntityBus.Step > 0)
{ {
_startPosX -= (int)EntityAirbus.Step; _startPosX -= (int)EntityBus.Step;
} }
return true; return true;
//вверх //вверх
case DirectionType.Up: case DirectionType.Up:
if (_startPosY.Value - EntityAirbus.Step > 0) if (_startPosY.Value - EntityBus.Step > 0)
{ {
_startPosY -= (int)EntityAirbus.Step; _startPosY -= (int)EntityBus.Step;
} }
return true; return true;
// вправо // вправо
case DirectionType.Right: case DirectionType.Right:
if (_startPosX.Value + EntityAirbus.Step + _drawningAirbusWidth < _pictureWidth) if (_startPosX.Value + EntityBus.Step + _drawningAirbusWidth < _pictureWidth)
{ {
_startPosX += (int)EntityAirbus.Step; _startPosX += (int)EntityBus.Step;
} }
return true; return true;
//вниз //вниз
case DirectionType.Down: case DirectionType.Down:
if (_startPosY.Value + EntityAirbus.Step + _drawningAirbusHeight < _pictureHeight) if (_startPosY.Value + EntityBus.Step + _drawningAirbusHeight < _pictureHeight)
{ {
_startPosY += (int)EntityAirbus.Step; _startPosY += (int)EntityBus.Step;
} }
return true; return true;
default: default:
@ -180,32 +197,16 @@ public class DrawningAirbus
/// Прорисовка объекта /// Прорисовка объекта
/// </summary> /// </summary>
/// <param name="g"></param> /// <param name="g"></param>
public void DrawTransport(Graphics g) public virtual void DrawTransport(Graphics g)
{ {
if (EntityAirbus == null || !_startPosX.HasValue || !_startPosY.HasValue) if (EntityBus == null || !_startPosX.HasValue || !_startPosY.HasValue)
{ {
return; return;
} }
Pen pen = new(Color.Black, 3); Pen pen = new(Color.Black, 3);
Brush additionalBrush = new SolidBrush(EntityAirbus.AdditionalColor);
Point[] pointsSection = //границы
{
new Point(_startPosX.Value + 45, _startPosY.Value + 30),
new Point(_startPosX.Value + 65, _startPosY.Value + 20),
new Point(_startPosX.Value + 95, _startPosY.Value + 20),
new Point(_startPosX.Value + 115, _startPosY.Value + 30)
};
// доп. отсек для пассажиров
if (EntityAirbus.PassengerSection)
{
g.FillPolygon(additionalBrush, pointsSection);
g.DrawPolygon(pen, pointsSection);
}
//границы аэробуса
Point[] pointsWing = Point[] pointsWing =
{ {
new Point(_startPosX.Value + 1, _startPosY.Value + 1), new Point(_startPosX.Value + 1, _startPosY.Value + 1),
@ -228,7 +229,7 @@ public class DrawningAirbus
g.DrawArc(pen, _startPosX.Value, _startPosY.Value + 30, 150, 30, -45, 225); g.DrawArc(pen, _startPosX.Value, _startPosY.Value + 30, 150, 30, -45, 225);
//закраска //закраска
Brush br = new SolidBrush(EntityAirbus.BodyColor); Brush br = new SolidBrush(EntityBus.BodyColor);
g.FillEllipse(br, _startPosX.Value + 1, _startPosY.Value + 31, 149, 29); g.FillEllipse(br, _startPosX.Value + 1, _startPosY.Value + 31, 149, 29);
g.FillPolygon(br, pointsWing); g.FillPolygon(br, pointsWing);
g.DrawLine(new Pen(Color.Black, 5), _startPosX.Value + 45, _startPosY.Value + 45, _startPosX.Value + 100, _startPosY.Value + 45); g.DrawLine(new Pen(Color.Black, 5), _startPosX.Value + 45, _startPosY.Value + 45, _startPosX.Value + 100, _startPosY.Value + 45);
@ -247,12 +248,5 @@ public class DrawningAirbus
g.DrawLine(pen, _startPosX.Value + 115, _startPosY.Value + 33, _startPosX.Value + 115, _startPosY.Value + 40); g.DrawLine(pen, _startPosX.Value + 115, _startPosY.Value + 33, _startPosX.Value + 115, _startPosY.Value + 40);
g.DrawLine(pen, _startPosX.Value + 115, _startPosY.Value + 40, _startPosX.Value + 150, _startPosY.Value + 40); g.DrawLine(pen, _startPosX.Value + 115, _startPosY.Value + 40, _startPosX.Value + 150, _startPosY.Value + 40);
g.DrawLine(pen, _startPosX.Value + 150, _startPosY.Value + 40, _startPosX.Value + 115, _startPosY.Value + 33); g.DrawLine(pen, _startPosX.Value + 150, _startPosY.Value + 40, _startPosX.Value + 115, _startPosY.Value + 33);
//доп. двигатель
if (EntityAirbus.Engines)
{
g.FillEllipse(additionalBrush, _startPosX.Value, _startPosY.Value + 30, 35, 15);
g.DrawEllipse(pen, _startPosX.Value, _startPosY.Value + 30, 35, 15);
}
} }
} }

View File

@ -1,25 +1,10 @@
namespace ProjectAirbus; namespace ProjectAirbus.Entities;
/// <summary> /// <summary>
/// Класс-сущность "Аэробус" /// Класс-сущность "Аэробус"
/// </summary> /// </summary>
public class EntityAirbus public class EntityAirbus : EntityBus
{ {
/// <summary>
/// Скорость
/// </summary>
public int Speed { get; private set; }
/// <summary>
/// Вес
/// </summary>
public double Weight { get; private set; }
/// <summary>
/// Основной цвет
/// </summary>
public Color BodyColor { get; private set; }
/// <summary> /// <summary>
/// Дополнительный цвет (для опциональных элементов) /// Дополнительный цвет (для опциональных элементов)
/// </summary> /// </summary>
@ -37,12 +22,7 @@ public class EntityAirbus
/// <summary> /// <summary>
/// Шаг перемещения автомобиля /// Конструктор
/// </summary>
public double Step => Speed * 100 / Weight;
/// <summary>
/// Инициализация полей объекта-класса аэробус
/// </summary> /// </summary>
/// <param name="speed">Скорость</param> /// <param name="speed">Скорость</param>
/// <param name="weight">Вес автомобиля</param> /// <param name="weight">Вес автомобиля</param>
@ -50,11 +30,8 @@ public class EntityAirbus
/// <param name="additionalColor">Дополнительный цвет</param> /// <param name="additionalColor">Дополнительный цвет</param>
/// <param name="passengerSection">Признак наличия доп. пассажирского отсека</param> /// <param name="passengerSection">Признак наличия доп. пассажирского отсека</param>
/// <param name="engines">Признак наличия доп. двигателей</param> /// <param name="engines">Признак наличия доп. двигателей</param>
public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool passengerSection, bool engines) public EntityAirbus(int speed, double weight, Color bodyColor, Color additionalColor, bool passengerSection, bool engines) : base(speed, weight, bodyColor)
{ {
Speed = speed;
Weight = weight;
BodyColor = bodyColor;
AdditionalColor = additionalColor; AdditionalColor = additionalColor;
PassengerSection = passengerSection; PassengerSection = passengerSection;
Engines = engines; Engines = engines;

View File

@ -0,0 +1,41 @@
namespace ProjectAirbus.Entities;
/// <summary>
/// Класс-сущность "Самолет"
/// </summary>
public class EntityBus
{
/// <summary>
/// Скорость
/// </summary>
public int Speed { get; private set; }
/// <summary>
/// Вес
/// </summary>
public double Weight { get; private set; }
/// <summary>
/// Основной цвет
/// </summary>
public Color BodyColor { get; private set; }
/// <summary>
/// Шаг перемещения автомобиля
/// </summary>
public double Step => Speed * 100 / Weight;
/// <summary>
/// Конструктор сущности
/// </summary>
/// <param name="speed">Скорость</param>
/// <param name="weight">Вес автомобиля</param>
/// <param name="bodyColor">Основной цвет</param>
public EntityBus(int speed, double weight, Color bodyColor)
{
Speed = speed;
Weight = weight;
BodyColor = bodyColor;
}
}

View File

@ -34,6 +34,7 @@
buttonRight = new Button(); buttonRight = new Button();
buttonDown = new Button(); buttonDown = new Button();
buttonUp = new Button(); buttonUp = new Button();
buttonCreateBus = new Button();
((System.ComponentModel.ISupportInitialize)pictureBoxAirbus).BeginInit(); ((System.ComponentModel.ISupportInitialize)pictureBoxAirbus).BeginInit();
SuspendLayout(); SuspendLayout();
// //
@ -51,11 +52,11 @@
buttonCreate.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; buttonCreate.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
buttonCreate.Location = new Point(22, 721); buttonCreate.Location = new Point(22, 721);
buttonCreate.Name = "buttonCreate"; buttonCreate.Name = "buttonCreate";
buttonCreate.Size = new Size(118, 41); buttonCreate.Size = new Size(231, 41);
buttonCreate.TabIndex = 1; buttonCreate.TabIndex = 1;
buttonCreate.Text = "Создать"; buttonCreate.Text = "Создать аэробус";
buttonCreate.UseVisualStyleBackColor = true; buttonCreate.UseVisualStyleBackColor = true;
buttonCreate.Click += ButtonCreate_Click; buttonCreate.Click += ButtonCreateAirbus_Click;
// //
// buttonLeft // buttonLeft
// //
@ -105,11 +106,23 @@
buttonUp.UseVisualStyleBackColor = true; buttonUp.UseVisualStyleBackColor = true;
buttonUp.Click += ButtonMove_Click; buttonUp.Click += ButtonMove_Click;
// //
// buttonCreateBus
//
buttonCreateBus.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
buttonCreateBus.Location = new Point(291, 721);
buttonCreateBus.Name = "buttonCreateBus";
buttonCreateBus.Size = new Size(231, 41);
buttonCreateBus.TabIndex = 6;
buttonCreateBus.Text = "Создать самолет";
buttonCreateBus.UseVisualStyleBackColor = true;
buttonCreateBus.Click += buttonCreateBus_Click;
//
// FormAirbus // FormAirbus
// //
AutoScaleDimensions = new SizeF(13F, 32F); AutoScaleDimensions = new SizeF(13F, 32F);
AutoScaleMode = AutoScaleMode.Font; AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(1401, 784); ClientSize = new Size(1401, 784);
Controls.Add(buttonCreateBus);
Controls.Add(buttonUp); Controls.Add(buttonUp);
Controls.Add(buttonDown); Controls.Add(buttonDown);
Controls.Add(buttonRight); Controls.Add(buttonRight);
@ -130,5 +143,6 @@
private Button buttonRight; private Button buttonRight;
private Button buttonDown; private Button buttonDown;
private Button buttonUp; private Button buttonUp;
private Button buttonCreateBus;
} }
} }

View File

@ -1,4 +1,6 @@
namespace ProjectAirbus; using ProjectAirbus.Drawnings;
namespace ProjectAirbus;
/// <summary> /// <summary>
/// Форма работы с объектом "Аэробус" /// Форма работы с объектом "Аэробус"
@ -8,7 +10,7 @@ public partial class FormAirbus : Form
/// <summary> /// <summary>
/// Поле-объект для прорисовки объекта /// Поле-объект для прорисовки объекта
/// </summary> /// </summary>
private DrawningAirbus? _drawningAirbus; private DrawningBus? _drawningBus;
/// <summary> /// <summary>
/// Конструктор формы /// Конструктор формы
@ -23,35 +25,67 @@ public partial class FormAirbus : Form
/// </summary> /// </summary>
private void Draw() private void Draw()
{ {
if (_drawningAirbus == null) if (_drawningBus == null)
{ {
return; return;
} }
Bitmap bmp = new(pictureBoxAirbus.Width, pictureBoxAirbus.Height); Bitmap bmp = new(pictureBoxAirbus.Width, pictureBoxAirbus.Height);
Graphics gr = Graphics.FromImage(bmp); Graphics gr = Graphics.FromImage(bmp);
_drawningAirbus.DrawTransport(gr); _drawningBus.DrawTransport(gr);
pictureBoxAirbus.Image = bmp; pictureBoxAirbus.Image = bmp;
} }
/// <summary> /// <summary>
/// Обработка нажатия кнопки "Создать" /// Создание объекта класса-перемещения
/// </summary> /// </summary>
/// <param name="sender"></param> /// <param name="type">Тип создаваемого объекта</param>
/// <param name="e"></param> private void CreateObject(string type)
private void ButtonCreate_Click(object sender, EventArgs e)
{ {
Random random = new(); Random random = new();
_drawningAirbus = new DrawningAirbus(); switch (type)
_drawningAirbus.Init(random.Next(100, 300), random.Next(1000, 3000), {
case nameof(DrawningBus):
_drawningBus = new DrawningBus(random.Next(100, 300), random.Next(1000, 3000),
Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)));
break;
case nameof(DrawningAirbus):
_drawningBus = new DrawningAirbus(random.Next(100, 300), random.Next(1000, 3000),
Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)), Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)),
Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)), Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)),
Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2))); Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2)));
_drawningAirbus.SetPictureSize(pictureBoxAirbus.Width, pictureBoxAirbus.Height); break;
_drawningAirbus.SetPosition(random.Next(10, 100), random.Next(10, 100)); default:
return;
}
_drawningBus.SetPictureSize(pictureBoxAirbus.Width, pictureBoxAirbus.Height);
_drawningBus.SetPosition(random.Next(10, 100), random.Next(10, 100));
_strategy = null;
comboBoxStrategy.Enabled = true;
Draw(); Draw();
} }
/// <summary>
/// Обработка нажатия кнопки "Создать аэробус"
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ButtonCreateAirbus_Click(object sender, EventArgs e)
{
CreateObject(nameof(DrawningAirbus));
}
/// <summary>
/// Обработка нажатия кнопки "Создать самолет"
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void buttonCreateBus_Click(object sender, EventArgs e)
{
CreateObject(nameof(DrawningBus));
}
/// <summary> /// <summary>
/// Перемещение объекта по форме (нажатие кнопок навигации) /// Перемещение объекта по форме (нажатие кнопок навигации)
/// </summary> /// </summary>
@ -59,7 +93,7 @@ public partial class FormAirbus : Form
/// <param name="e"></param> /// <param name="e"></param>
private void ButtonMove_Click(object sender, EventArgs e) private void ButtonMove_Click(object sender, EventArgs e)
{ {
if (_drawningAirbus == null) if (_drawningBus == null)
{ {
return; return;
} }
@ -69,16 +103,16 @@ public partial class FormAirbus : Form
switch (name) switch (name)
{ {
case "buttonUp": case "buttonUp":
result = _drawningAirbus.MoveTransport(DirectionType.Up); result = _drawningBus.MoveTransport(DirectionType.Up);
break; break;
case "buttonDown": case "buttonDown":
result = _drawningAirbus.MoveTransport(DirectionType.Down); result = _drawningBus.MoveTransport(DirectionType.Down);
break; break;
case "buttonLeft": case "buttonLeft":
result = _drawningAirbus.MoveTransport(DirectionType.Left); result = _drawningBus.MoveTransport(DirectionType.Left);
break; break;
case "buttonRight": case "buttonRight":
result = _drawningAirbus.MoveTransport(DirectionType.Right); result = _drawningBus.MoveTransport(DirectionType.Right);
break; break;
} }