Добавление родителей и ввод конструкторов

This commit is contained in:
insideq 2024-02-14 22:56:16 +04:00
parent d6acb857ab
commit 2dc0f239ca
9 changed files with 476 additions and 377 deletions

View File

@ -1,276 +0,0 @@
namespace ProjectExcavator;
/// <summary>
/// Класс, отвечающий за прорисовку и перемещение объекта-сущности
/// </summary>
public class DrawningExcavator
{
/// <summary>
/// Класс-сущность
/// </summary>
public EntityExcavator? EntityExcavator { get; private set; }
/// <summary>
/// Ширина окна
/// </summary>
private int? _pictureWidth;
/// <summary>
/// Высота окна
/// </summary>
private int? _pictureHeight;
/// <summary>
/// Левая координата прорисовки автомобиля
/// </summary>
private int? _startPosX;
/// <summary>
/// Верхняя координата прорисовки автомобиля
/// </summary>
private int? _startPosY;
/// <summary>
/// Ширина прорисовки автомобиля
/// </summary>
private readonly int _drawingExcWidth = 120; //дописать ширина
/// <summary>
/// Высота прорисовки автомобиля
/// </summary>
private readonly int _drawingExcHeight = 70; //дописать высота
/// <summary>
/// Инициализация свойств
/// </summary>
/// <param name="speed">Скорость</param>
/// <param name="weight">Вес</param>
/// <param name="bodyColor">Основной цвет</param>
/// <param name="additionalColor">Дополнительный цвет</param>
/// <param name="bodyKit">Признак наличия обвеса</param>
/// <param name="prop">Признак наличия опор</param>
/// <param name="ladle">Признак наличия ковша</param>
public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool bodyKit, bool prop, bool ladle)
{
EntityExcavator = new EntityExcavator();
EntityExcavator.Init(speed, weight, bodyColor, additionalColor, bodyKit, prop, ladle);
_pictureWidth = null;
_pictureHeight = null;
_startPosX = null;
_startPosY = null;
}
/// <summary>
/// Установка границ поля
/// </summary>
/// <param name="width">Ширина поля</param>
/// <param name="height">Высота поля</param>
/// <returns>true - границы заданы, false - проверка не пройдена, нельзя разместить объект в этих размерах</returns>
public bool SetPictureSize(int width, int height)
{
//TODO проверка, что объект "влезает" в размеры поля
//если влезает, сохраняем границы и корректируем позицию объекта, если она уже была установлена
if(_drawingExcWidth > width || _drawingExcHeight > height) {
return false;
}
_pictureWidth = width;
_pictureHeight = height;
if (_startPosX.HasValue || _startPosY.HasValue)
{
if (_startPosX + _drawingExcWidth > _pictureWidth)
{
_startPosX = _pictureWidth - _drawingExcWidth;
}
else if (_startPosX < 0) _startPosX = 0;
if (_startPosY + _drawingExcHeight > _pictureHeight)
{
_startPosY = _pictureHeight - _drawingExcHeight;
}
else if (_startPosY < 0) _startPosY = 0;
}
return true;
}
/// <summary>
/// Установка позиции
/// </summary>
/// <param name="x">Координата X</param>
/// <param name="y">Координата Y</param>
public void SetPosition(int x, int y, int width, int height)
{
if (!_pictureWidth.HasValue || !_pictureHeight.HasValue)
{
return;
}
//TODO если при установке объекта в эти координаты, он будет "выходить" за границы формы
//то надо изменить координаты, чтобы он оставался в этих границах
if (x + _drawingExcWidth > _pictureWidth)
{
_startPosX = _pictureWidth - _drawingExcWidth;
}
else if (x < 0) _startPosX = 0;
else _startPosX = x;
if (y + _drawingExcHeight > _pictureHeight)
{
_startPosY = _pictureHeight - _drawingExcHeight;
}
else if (y < 0) _startPosY = 0;
else _startPosY = y;
}
/// <summary>
/// Изменение направления движения
/// </summary>
/// <param name="direction">Направление</param>
/// <returns>true - перемещение выполнено, false - перемещение невозможно</returns>
public bool MoveTransport(DirectionType direction)
{
if (EntityExcavator == null || !_startPosX.HasValue || !_startPosY.HasValue)
{
return false;
}
switch (direction)
{
//влево
case DirectionType.Left:
if(_startPosX.Value - EntityExcavator.Step > 0)
{
_startPosX -= (int)EntityExcavator.Step;
}
return true;
//вверх
case DirectionType.Up:
if(_startPosY.Value - EntityExcavator.Step > 0)
{
_startPosY -= (int)EntityExcavator.Step;
}
return true;
//вправо
case DirectionType.Right:
if(_startPosX + EntityExcavator.Step < _pictureWidth - _drawingExcWidth)
{
_startPosX += (int)EntityExcavator.Step;
}
return true;
//вниз
case DirectionType.Down:
if(_startPosY + EntityExcavator.Step < _pictureHeight - _drawingExcHeight)
{
_startPosY += (int)EntityExcavator.Step;
}
return true;
default:
return false;
}
}
/// <summary>
/// Прорисовка объекта
/// </summary>
/// <param name="g"></param>
public void DrawTransport(Graphics g)
{
if(EntityExcavator == null || !_startPosX.HasValue || !_startPosY.HasValue)
{
return;
}
Pen pen = new(Color.Black);
Brush additionalBrush = new SolidBrush(EntityExcavator.AdditionalColor);
//обвесы
if (EntityExcavator.Prop)
{
//Опоры
//справа
g.DrawRectangle(pen, _startPosX.Value + 80, _startPosY.Value + 40, 11, 3);
g.DrawRectangle(pen, _startPosX.Value + 87, _startPosY.Value + 43, 5, 25);
g.DrawRectangle(pen, _startPosX.Value + 84, _startPosY.Value + 68, 11, 3);
//слева
g.DrawRectangle(pen, _startPosX.Value + 6, _startPosY.Value + 40, 13, 3);
g.DrawRectangle(pen, _startPosX.Value + 4, _startPosY.Value + 43, 5, 25);
g.DrawRectangle(pen, _startPosX.Value + 1, _startPosY.Value + 68, 11, 3);
//покраска справа
g.FillRectangle(additionalBrush, _startPosX.Value + 80, _startPosY.Value + 40, 11, 3);
g.FillRectangle(additionalBrush, _startPosX.Value + 87, _startPosY.Value + 43, 5, 25);
g.FillRectangle(additionalBrush, _startPosX.Value + 84, _startPosY.Value + 68, 11, 3);
//покраска слева
g.FillRectangle(additionalBrush, _startPosX.Value + 6, _startPosY.Value + 40, 13, 3);
g.FillRectangle(additionalBrush, _startPosX.Value + 4, _startPosY.Value + 43, 5, 25);
g.FillRectangle(additionalBrush, _startPosX.Value + 1, _startPosY.Value + 68, 11, 3);
}
if (EntityExcavator.Ladle)
{
//Ковш
//ковш(стрела)
g.DrawRectangle(pen, _startPosX.Value + 77, _startPosY.Value + 17, 14, 8);
g.DrawRectangle(pen, _startPosX.Value + 91, _startPosY.Value + 9, 20, 7);
g.DrawRectangle(pen, _startPosX.Value + 111, _startPosY.Value + 17, 9, 20);
Point[] pointsLadle =
{
new Point(_startPosX.Value + 120, _startPosY.Value + 37),
new Point(_startPosX.Value + 104, _startPosY.Value + 54),
new Point(_startPosX.Value + 120, _startPosY.Value + 54),
};
g.FillPolygon(additionalBrush, pointsLadle);
g.DrawPolygon(pen, pointsLadle);
//покраска
g.FillRectangle(additionalBrush, _startPosX.Value + 77, _startPosY.Value + 17, 14, 8);
g.FillRectangle(additionalBrush, _startPosX.Value + 91, _startPosY.Value + 9, 20, 7);
g.FillRectangle(additionalBrush, _startPosX.Value + 111, _startPosY.Value + 17, 9, 20);
}
//Границы экскаватора
g.DrawRectangle(pen, _startPosX.Value + 20, _startPosY.Value + 25, /*длина*/60, /*ширина*/20); //главная нижняя
g.DrawRectangle(pen, _startPosX.Value + 35, _startPosY.Value + 10, 5, 15);
g.DrawRectangle(pen, _startPosX.Value + 55, _startPosY.Value + 3, 22, 22); //кабина
Brush br = new SolidBrush(EntityExcavator.BodyColor);
g.FillRectangle(br, _startPosX.Value + 21, _startPosY.Value + 26, 59, 19);
g.FillRectangle(br, _startPosX.Value + 36, _startPosY.Value + 11, 4, 14);
Brush brBlue = new SolidBrush(Color.PowderBlue);
g.FillRectangle(brBlue, _startPosX.Value + 56, _startPosY.Value + 4, 21, 21);
//ручка для катков
Pen penEllip = new Pen(Color.Black);
penEllip.Width = 2;
//гусеницы (катки)
g.DrawEllipse(pen, _startPosX.Value + 15, _startPosY.Value + 47, 17, 17);
g.DrawEllipse(pen, _startPosX.Value + 63, _startPosY.Value + 47, 17, 17);
//гусеницы (гуценица)
g.DrawRectangle(pen, _startPosX.Value + 24, _startPosY.Value + 47, 48, 17);
//закрашивание катков
Brush brWhite = new SolidBrush(Color.White);
g.FillEllipse(brWhite, _startPosX.Value + 15, _startPosY.Value + 47, 17, 17);
g.FillEllipse(brWhite, _startPosX.Value + 63, _startPosY.Value + 47, 17, 17);
//жирные круги
g.DrawEllipse(penEllip, _startPosX.Value + 15, _startPosY.Value + 47, 17, 17);
g.DrawEllipse(penEllip, _startPosX.Value + 63, _startPosY.Value + 47, 17, 17);
//маленькие катки (верхние)
g.DrawEllipse(penEllip, _startPosX.Value + 40, _startPosY.Value + 48, 5, 5);
g.DrawEllipse(penEllip, _startPosX.Value + 50, _startPosY.Value + 48, 5, 5);
//нижние катки
g.DrawEllipse(penEllip, _startPosX.Value + 34, _startPosY.Value + 55, 8, 8);
g.DrawEllipse(penEllip, _startPosX.Value + 44, _startPosY.Value + 55, 8, 8);
g.DrawEllipse(penEllip, _startPosX.Value + 54, _startPosY.Value + 55, 8, 8);
}
}

View File

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

View File

@ -0,0 +1,240 @@
using ProjectExcavator.Entities;
namespace ProjectExcavator.Drawnings;
public class DrawningBulldozer
{
/// <summary>
/// Класс-сущность
/// </summary>
public EntityBulldozer? EntityBulldozer { get; protected set; }
/// <summary>
/// Ширина окна
/// </summary>
private int? _pictureWidth;
/// <summary>
/// Высота окна
/// </summary>
private int? _pictureHeight;
/// <summary>
/// Левая координата прорисовки автомобиля
/// </summary>
protected int? _startPosX;
/// <summary>
/// Верхняя координата прорисовки автомобиля
/// </summary>
protected int? _startPosY;
/// <summary>
/// Ширина прорисовки автомобиля
/// </summary>
private readonly int _drawingExcWidth = 80; //дописать ширина
/// <summary>
/// Высота прорисовки автомобиля
/// </summary>
private readonly int _drawingExcHeight = 61; //дописать высота
/// <summary>
/// Пустой конструктор
/// </summary>
private DrawningBulldozer()
{
_pictureWidth = null;
_pictureHeight = null;
_startPosX = null;
_startPosY = null;
}
/// <summary>
/// Конструктор
/// </summary>
/// <param name="speed">Скорость</param>
/// <param name="weight">Вес</param>
/// <param name="bodyColor">Основной цвет</param>
public DrawningBulldozer(int speed, double weight, Color bodyColor) : this()
{
EntityBulldozer = new EntityBulldozer(speed, weight, bodyColor);
}
/// <summary>
/// Конструктор для наследников
/// </summary>
/// <param name="drawingExcWidth">Ширина прорисовки автомобиля</param>
/// <param name="drawingExcHeight">Высота прорисовки автомобиля</param>
protected DrawningBulldozer(int drawingExcWidth, int drawingExcHeight) : this()
{
_drawingExcWidth = drawingExcWidth;
_pictureHeight = drawingExcHeight;
}
/// <summary>
/// Установка границ поля
/// </summary>
/// <param name="width">Ширина поля</param>
/// <param name="height">Высота поля</param>
/// <returns>true - границы заданы, false - проверка не пройдена, нельзя разместить объект в этих размерах</returns>
public bool SetPictureSize(int width, int height)
{
//TODO проверка, что объект "влезает" в размеры поля
//если влезает, сохраняем границы и корректируем позицию объекта, если она уже была установлена
if (_drawingExcWidth > width || _drawingExcHeight > height)
{
return false;
}
_pictureWidth = width;
_pictureHeight = height;
if (_startPosX.HasValue || _startPosY.HasValue)
{
if (_startPosX + _drawingExcWidth > _pictureWidth)
{
_startPosX = _pictureWidth - _drawingExcWidth;
}
else if (_startPosX < 0) _startPosX = 0;
if (_startPosY + _drawingExcHeight > _pictureHeight)
{
_startPosY = _pictureHeight - _drawingExcHeight;
}
else if (_startPosY < 0) _startPosY = 0;
}
return true;
}
/// <summary>
/// Установка позиции
/// </summary>
/// <param name="x">Координата X</param>
/// <param name="y">Координата Y</param>
public void SetPosition(int x, int y, int width, int height)
{
if (!_pictureWidth.HasValue || !_pictureHeight.HasValue)
{
return;
}
//TODO если при установке объекта в эти координаты, он будет "выходить" за границы формы
//то надо изменить координаты, чтобы он оставался в этих границах
if (x + _drawingExcWidth > _pictureWidth)
{
_startPosX = _pictureWidth - _drawingExcWidth;
}
else if (x < 0) _startPosX = 0;
else _startPosX = x;
if (y + _drawingExcHeight > _pictureHeight)
{
_startPosY = _pictureHeight - _drawingExcHeight;
}
else if (y < 0) _startPosY = 0;
else _startPosY = y;
}
/// <summary>
/// Изменение направления движения
/// </summary>
/// <param name="direction">Направление</param>
/// <returns>true - перемещение выполнено, false - перемещение невозможно</returns>
public bool MoveTransport(DirectionType direction)
{
if (EntityBulldozer == null || !_startPosX.HasValue || !_startPosY.HasValue)
{
return false;
}
switch (direction)
{
//влево
case DirectionType.Left:
if (_startPosX.Value - EntityBulldozer.Step > 0)
{
_startPosX -= (int)EntityBulldozer.Step;
}
return true;
//вверх
case DirectionType.Up:
if (_startPosY.Value - EntityBulldozer.Step > 0)
{
_startPosY -= (int)EntityBulldozer.Step;
}
return true;
//вправо
case DirectionType.Right:
if (_startPosX + EntityBulldozer.Step < _pictureWidth - _drawingExcWidth)
{
_startPosX += (int)EntityBulldozer.Step;
}
return true;
//вниз
case DirectionType.Down:
if (_startPosY + EntityBulldozer.Step < _pictureHeight - _drawingExcHeight)
{
_startPosY += (int)EntityBulldozer.Step;
}
return true;
default:
return false;
}
}
/// <summary>
/// Прорисовка объекта
/// </summary>
/// <param name="g"></param>
public virtual void DrawTransport(Graphics g)
{
if (EntityBulldozer == null || !_startPosX.HasValue || !_startPosY.HasValue)
{
return;
}
Pen pen = new(Color.Black);
//Границы экскаватора
g.DrawRectangle(pen, _startPosX.Value + 5, _startPosY.Value + 22, /*длина*/60, /*ширина*/20); //главная нижняя
g.DrawRectangle(pen, _startPosX.Value + 20, _startPosY.Value + 7, 5, 15);
g.DrawRectangle(pen, _startPosX.Value + 40, _startPosY.Value, 22, 22); //кабина
Brush br = new SolidBrush(EntityBulldozer.BodyColor);
g.FillRectangle(br, _startPosX.Value + 6, _startPosY.Value + 23, 59, 19);
g.FillRectangle(br, _startPosX.Value + 21, _startPosY.Value + 8, 4, 14);
Brush brBlue = new SolidBrush(Color.PowderBlue);
g.FillRectangle(brBlue, _startPosX.Value + 41, _startPosY.Value + 1, 21, 21);
//ручка для катков
Pen penEllip = new Pen(Color.Black);
penEllip.Width = 2;
//гусеницы (катки)
g.DrawEllipse(pen, _startPosX.Value, _startPosY.Value + 44, 17, 17);
g.DrawEllipse(pen, _startPosX.Value + 48, _startPosY.Value + 44, 17, 17);
//гусеницы (гуценица)
g.DrawRectangle(pen, _startPosX.Value + 9, _startPosY.Value + 44, 48, 17);
//закрашивание катков
Brush brWhite = new SolidBrush(Color.White);
g.FillEllipse(brWhite, _startPosX.Value, _startPosY.Value + 44, 17, 17);
g.FillEllipse(brWhite, _startPosX.Value + 48, _startPosY.Value + 44, 17, 17);
//жирные круги
g.DrawEllipse(penEllip, _startPosX.Value, _startPosY.Value + 44, 17, 17);
g.DrawEllipse(penEllip, _startPosX.Value + 48, _startPosY.Value + 44, 17, 17);
//маленькие катки (верхние)
g.DrawEllipse(penEllip, _startPosX.Value + 25, _startPosY.Value + 45, 5, 5);
g.DrawEllipse(penEllip, _startPosX.Value + 35, _startPosY.Value + 45, 5, 5);
//нижние катки
g.DrawEllipse(penEllip, _startPosX.Value + 19, _startPosY.Value + 52, 8, 8);
g.DrawEllipse(penEllip, _startPosX.Value + 29, _startPosY.Value + 52, 8, 8);
g.DrawEllipse(penEllip, _startPosX.Value + 39, _startPosY.Value + 52, 8, 8);
}
}

View File

@ -0,0 +1,88 @@
using ProjectExcavator.Entities;
using System.Net.Sockets;
namespace ProjectExcavator.Drawnings;
/// <summary>
/// Класс, отвечающий за прорисовку и перемещение объекта-сущности
/// </summary>
public class DrawningExcavator : DrawningBulldozer
{
/// <summary>
/// Конструктор
/// </summary>
/// <param name="speed">Скорость</param>
/// <param name="weight">Вес</param>
/// <param name="bodyColor">Основной цвет</param>
/// <param name="additionalColor">Дополнительный цвет</param>
/// <param name="prop">Признак наличия опор</param>
/// <param name="ladle">Признак наличия ковша</param>
public DrawningExcavator(int speed, double weight, Color bodyColor, Color additionalColor, bool prop, bool ladle) : base(120, 70)
{
EntityBulldozer = new EntityExcavator(speed, weight, bodyColor, additionalColor, prop, ladle);
} //ДОПИСАТЬ!!!!!!!!!!!!!!!!!!!!!!!!!
public override void DrawTransport(Graphics g)
{
if (EntityBulldozer == null || EntityBulldozer is not EntityExcavator excavator || !_startPosX.HasValue || !_startPosX.HasValue)
{
return;
}
Pen pen = new(Color.Black);
Brush additionalBrush = new SolidBrush(excavator.AdditionalColor);
if (excavator.Prop)
{
//Опоры
//справа
g.DrawRectangle(pen, _startPosX.Value + 80, _startPosY.Value + 40, 11, 3);
g.DrawRectangle(pen, _startPosX.Value + 87, _startPosY.Value + 43, 5, 25);
g.DrawRectangle(pen, _startPosX.Value + 84, _startPosY.Value + 68, 11, 3);
//слева
g.DrawRectangle(pen, _startPosX.Value + 6, _startPosY.Value + 40, 13, 3);
g.DrawRectangle(pen, _startPosX.Value + 4, _startPosY.Value + 43, 5, 25);
g.DrawRectangle(pen, _startPosX.Value + 1, _startPosY.Value + 68, 11, 3);
//покраска справа
g.FillRectangle(additionalBrush, _startPosX.Value + 80, _startPosY.Value + 40, 11, 3);
g.FillRectangle(additionalBrush, _startPosX.Value + 87, _startPosY.Value + 43, 5, 25);
g.FillRectangle(additionalBrush, _startPosX.Value + 84, _startPosY.Value + 68, 11, 3);
//покраска слева
g.FillRectangle(additionalBrush, _startPosX.Value + 6, _startPosY.Value + 40, 13, 3);
g.FillRectangle(additionalBrush, _startPosX.Value + 4, _startPosY.Value + 43, 5, 25);
g.FillRectangle(additionalBrush, _startPosX.Value + 1, _startPosY.Value + 68, 11, 3);
}
if (excavator.Ladle)
{
//Ковш
//ковш(стрела)
g.DrawRectangle(pen, _startPosX.Value + 77, _startPosY.Value + 17, 14, 8);
g.DrawRectangle(pen, _startPosX.Value + 91, _startPosY.Value + 9, 20, 7);
g.DrawRectangle(pen, _startPosX.Value + 111, _startPosY.Value + 17, 9, 20);
Point[] pointsLadle =
{
new Point(_startPosX.Value + 120, _startPosY.Value + 37),
new Point(_startPosX.Value + 104, _startPosY.Value + 54),
new Point(_startPosX.Value + 120, _startPosY.Value + 54),
};
g.FillPolygon(additionalBrush, pointsLadle);
g.DrawPolygon(pen, pointsLadle);
//покраска
g.FillRectangle(additionalBrush, _startPosX.Value + 77, _startPosY.Value + 17, 14, 8);
g.FillRectangle(additionalBrush, _startPosX.Value + 91, _startPosY.Value + 9, 20, 7);
g.FillRectangle(additionalBrush, _startPosX.Value + 111, _startPosY.Value + 17, 9, 20);
}
_startPosX += 15;
_startPosY += 3;
base.DrawTransport(g);
_startPosX -= 15;
_startPosY -= 3;
}
}

View File

@ -0,0 +1,39 @@
namespace ProjectExcavator.Entities;
/// <summary>
/// Класс-сущность "Бульдозер"
/// </summary>
public class EntityBulldozer
{
/// <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 EntityBulldozer(int speed, double weight, Color bodyColor)
{
Speed = speed;
Weight = weight;
BodyColor = bodyColor;
}
}

View File

@ -0,0 +1,35 @@
namespace ProjectExcavator.Entities;
/// <summary>
/// Класс-сущность "Экскаватор"
/// </summary>
public class EntityExcavator : EntityBulldozer
{
/// <summary>
/// Дополнительный цвет (для опциональных элементов)
/// </summary>
public Color AdditionalColor { get; private set; }
/// <summary>
/// Признак наличия опор
/// </summary>
public bool Prop { get; private set; }
/// <summary>
/// Признак наличия ковша
/// </summary>
public bool Ladle { get; private set; }
/// <summary>
/// Инициализация полей объекта-класса экскаватора
/// </summary>
/// <param name="additionalColor">Дополнительный цвет</param>
/// <param name="bodyKit">Признак наличия обвеса</param>
/// <param name="prop">Признак наличия опор</param>
/// <param name="ladle">Признак наличия ковша</param>
public EntityExcavator(int speed, double weight, Color bodyColor, Color additionalColor, bool prop, bool ladle) : base(speed, weight, bodyColor)
{
AdditionalColor = additionalColor;
Prop = prop;
Ladle = ladle;
}
}

View File

@ -1,67 +0,0 @@
namespace ProjectExcavator;
/// <summary>
/// Класс-сущность "Спортивный автомобиль"
/// </summary>
public class EntityExcavator
{
/// <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 Color AdditionalColor { get; private set; }
/// <summary>
/// Признак наличия обвеса
/// </summary>
public bool BodyKit { get; private set; }
/// <summary>
/// Признак наличия опор
/// </summary>
public bool Prop { get; private set; }
/// <summary>
/// Признак наличия ковша
/// </summary>
public bool Ladle { 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>
/// <param name="additionalColor">Дополнительный цвет</param>
/// <param name="bodyKit">Признак наличия обвеса</param>
/// <param name="prop">Признак наличия опор</param>
/// <param name="ladle">Признак наличия ковша</param>
public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool bodyKit, bool prop, bool ladle)
{
Speed = speed;
Weight = weight;
BodyColor = bodyColor;
AdditionalColor = additionalColor;
BodyKit = bodyKit;
Prop = prop;
Ladle = ladle;
}
}

View File

@ -29,11 +29,12 @@
private void InitializeComponent() private void InitializeComponent()
{ {
pictureBoxExcavator = new PictureBox(); pictureBoxExcavator = new PictureBox();
buttonCreate = new Button(); buttonCreateExcavator = new Button();
buttonLeft = new Button(); buttonLeft = new Button();
buttonRight = new Button(); buttonRight = new Button();
buttonDown = new Button(); buttonDown = new Button();
buttonUp = new Button(); buttonUp = new Button();
buttonCreateBulldozer = new Button();
((System.ComponentModel.ISupportInitialize)pictureBoxExcavator).BeginInit(); ((System.ComponentModel.ISupportInitialize)pictureBoxExcavator).BeginInit();
SuspendLayout(); SuspendLayout();
// //
@ -45,17 +46,17 @@
pictureBoxExcavator.TabIndex = 0; pictureBoxExcavator.TabIndex = 0;
pictureBoxExcavator.TabStop = false; pictureBoxExcavator.TabStop = false;
// //
// buttonCreate // buttonCreateExcavator
// //
buttonCreate.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; buttonCreateExcavator.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
buttonCreate.BackColor = SystemColors.Control; buttonCreateExcavator.BackColor = SystemColors.Control;
buttonCreate.Location = new Point(12, 569); buttonCreateExcavator.Location = new Point(12, 569);
buttonCreate.Name = "buttonCreate"; buttonCreateExcavator.Name = "buttonCreateExcavator";
buttonCreate.Size = new Size(75, 23); buttonCreateExcavator.Size = new Size(198, 23);
buttonCreate.TabIndex = 1; buttonCreateExcavator.TabIndex = 1;
buttonCreate.Text = "Создать"; buttonCreateExcavator.Text = "Создать экскаватор";
buttonCreate.UseVisualStyleBackColor = false; buttonCreateExcavator.UseVisualStyleBackColor = false;
buttonCreate.Click += buttonCreate_Click; buttonCreateExcavator.Click += ButtonCreateExcavator_Click;
// //
// buttonLeft // buttonLeft
// //
@ -67,7 +68,7 @@
buttonLeft.Size = new Size(35, 35); buttonLeft.Size = new Size(35, 35);
buttonLeft.TabIndex = 2; buttonLeft.TabIndex = 2;
buttonLeft.UseVisualStyleBackColor = true; buttonLeft.UseVisualStyleBackColor = true;
buttonLeft.Click += buttonMove_Click; buttonLeft.Click += ButtonMove_Click;
// //
// buttonRight // buttonRight
// //
@ -79,7 +80,7 @@
buttonRight.Size = new Size(35, 35); buttonRight.Size = new Size(35, 35);
buttonRight.TabIndex = 3; buttonRight.TabIndex = 3;
buttonRight.UseVisualStyleBackColor = true; buttonRight.UseVisualStyleBackColor = true;
buttonRight.Click += buttonMove_Click; buttonRight.Click += ButtonMove_Click;
// //
// buttonDown // buttonDown
// //
@ -91,7 +92,7 @@
buttonDown.Size = new Size(35, 35); buttonDown.Size = new Size(35, 35);
buttonDown.TabIndex = 4; buttonDown.TabIndex = 4;
buttonDown.UseVisualStyleBackColor = true; buttonDown.UseVisualStyleBackColor = true;
buttonDown.Click += buttonMove_Click; buttonDown.Click += ButtonMove_Click;
// //
// buttonUp // buttonUp
// //
@ -103,18 +104,31 @@
buttonUp.Size = new Size(35, 35); buttonUp.Size = new Size(35, 35);
buttonUp.TabIndex = 5; buttonUp.TabIndex = 5;
buttonUp.UseVisualStyleBackColor = true; buttonUp.UseVisualStyleBackColor = true;
buttonUp.Click += buttonMove_Click; buttonUp.Click += ButtonMove_Click;
//
// buttonCreateBulldozer
//
buttonCreateBulldozer.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
buttonCreateBulldozer.BackColor = SystemColors.Control;
buttonCreateBulldozer.Location = new Point(225, 569);
buttonCreateBulldozer.Name = "buttonCreateBulldozer";
buttonCreateBulldozer.Size = new Size(198, 23);
buttonCreateBulldozer.TabIndex = 6;
buttonCreateBulldozer.Text = "Создать бульдозер";
buttonCreateBulldozer.UseVisualStyleBackColor = false;
buttonCreateBulldozer.Click += ButtonCreateBulldozer_Click;
// //
// FormExcavator // FormExcavator
// //
AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font; AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(931, 604); ClientSize = new Size(931, 604);
Controls.Add(buttonCreateBulldozer);
Controls.Add(buttonUp); Controls.Add(buttonUp);
Controls.Add(buttonDown); Controls.Add(buttonDown);
Controls.Add(buttonRight); Controls.Add(buttonRight);
Controls.Add(buttonLeft); Controls.Add(buttonLeft);
Controls.Add(buttonCreate); Controls.Add(buttonCreateExcavator);
Controls.Add(pictureBoxExcavator); Controls.Add(pictureBoxExcavator);
Name = "FormExcavator"; Name = "FormExcavator";
Text = "Экскаватор"; Text = "Экскаватор";
@ -125,10 +139,11 @@
#endregion #endregion
private PictureBox pictureBoxExcavator; private PictureBox pictureBoxExcavator;
private Button buttonCreate; private Button buttonCreateExcavator;
private Button buttonLeft; private Button buttonLeft;
private Button buttonRight; private Button buttonRight;
private Button buttonDown; private Button buttonDown;
private Button buttonUp; private Button buttonUp;
private Button buttonCreateBulldozer;
} }
} }

View File

@ -1,8 +1,10 @@
namespace ProjectExcavator; using ProjectExcavator.Drawnings;
namespace ProjectExcavator;
public partial class FormExcavator : Form public partial class FormExcavator : Form
{ {
private DrawningExcavator? _drawningExcavator; private DrawningBulldozer? _drawningBulldozer;
public FormExcavator() public FormExcavator()
{ {
InitializeComponent(); InitializeComponent();
@ -10,34 +12,56 @@ public partial class FormExcavator : Form
private void Draw() private void Draw()
{ {
if (_drawningExcavator == null) if (_drawningBulldozer == null)
{ {
return; return;
} }
Bitmap bmp = new(pictureBoxExcavator.Width, pictureBoxExcavator.Height); Bitmap bmp = new(pictureBoxExcavator.Width, pictureBoxExcavator.Height);
Graphics gr = Graphics.FromImage(bmp); Graphics gr = Graphics.FromImage(bmp);
_drawningExcavator.DrawTransport(gr); _drawningBulldozer.DrawTransport(gr);
pictureBoxExcavator.Image = bmp; pictureBoxExcavator.Image = bmp;
} }
private void buttonCreate_Click(object sender, EventArgs e) private void CreateObject(string type)
{ {
Random random = new(); Random random = new();
_drawningExcavator = new DrawningExcavator(); switch (type)
_drawningExcavator.Init(random.Next(100, 300), random.Next(1000, 3000), {
case nameof(DrawningBulldozer):
_drawningBulldozer = new DrawningBulldozer(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(DrawningExcavator):
_drawningBulldozer = new DrawningExcavator(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)), Convert.ToBoolean(random.Next(0, 2)));
_drawningExcavator.SetPictureSize(pictureBoxExcavator.Width, pictureBoxExcavator.Height); break;
_drawningExcavator.SetPosition(random.Next(10,100), random.Next(10,100), pictureBoxExcavator.Width, pictureBoxExcavator.Height); default:
return;
}
_drawningBulldozer.SetPictureSize(pictureBoxExcavator.Width, pictureBoxExcavator.Height);
_drawningBulldozer.SetPosition(random.Next(10, 100), random.Next(10, 100), pictureBoxExcavator.Width, pictureBoxExcavator.Height);
Draw(); Draw();
} }
private void buttonMove_Click(object sender, EventArgs e) private void ButtonCreateExcavator_Click(object sender, EventArgs e)
{ {
if(_drawningExcavator == null) CreateObject(nameof(DrawningExcavator));
}
private void ButtonCreateBulldozer_Click(object sender, EventArgs e)
{
CreateObject(nameof(DrawningBulldozer));
}
private void ButtonMove_Click(object sender, EventArgs e)
{
if (_drawningBulldozer == null)
{ {
return; return;
} }
@ -47,16 +71,16 @@ public partial class FormExcavator : Form
switch (name) switch (name)
{ {
case "buttonUp": case "buttonUp":
result = _drawningExcavator.MoveTransport(DirectionType.Up); result = _drawningBulldozer.MoveTransport(DirectionType.Up);
break; break;
case "buttonDown": case "buttonDown":
result = _drawningExcavator.MoveTransport(DirectionType.Down); result = _drawningBulldozer.MoveTransport(DirectionType.Down);
break; break;
case "buttonRight": case "buttonRight":
result = _drawningExcavator.MoveTransport(DirectionType.Right); result = _drawningBulldozer.MoveTransport(DirectionType.Right);
break; break;
case "buttonLeft": case "buttonLeft":
result = _drawningExcavator.MoveTransport(DirectionType.Left); result = _drawningBulldozer.MoveTransport(DirectionType.Left);
break; break;
} }
@ -65,4 +89,5 @@ public partial class FormExcavator : Form
Draw(); Draw();
} }
} }
} }