diff --git a/Lab1_OAP/Lab1_OAP.sln b/Lab1_OAP/Lab1_OAP.sln new file mode 100644 index 0000000..92627e6 --- /dev/null +++ b/Lab1_OAP/Lab1_OAP.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.8.34525.116 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Lab1_OAP", "Lab1_OAP\Lab1_OAP.vcxproj", "{39E703FF-4168-4ACA-84CA-CDD94BFE3FD3}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {39E703FF-4168-4ACA-84CA-CDD94BFE3FD3}.Debug|x64.ActiveCfg = Debug|x64 + {39E703FF-4168-4ACA-84CA-CDD94BFE3FD3}.Debug|x64.Build.0 = Debug|x64 + {39E703FF-4168-4ACA-84CA-CDD94BFE3FD3}.Debug|x86.ActiveCfg = Debug|Win32 + {39E703FF-4168-4ACA-84CA-CDD94BFE3FD3}.Debug|x86.Build.0 = Debug|Win32 + {39E703FF-4168-4ACA-84CA-CDD94BFE3FD3}.Release|x64.ActiveCfg = Release|x64 + {39E703FF-4168-4ACA-84CA-CDD94BFE3FD3}.Release|x64.Build.0 = Release|x64 + {39E703FF-4168-4ACA-84CA-CDD94BFE3FD3}.Release|x86.ActiveCfg = Release|Win32 + {39E703FF-4168-4ACA-84CA-CDD94BFE3FD3}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {AD8890FA-E7D7-4EB8-996C-597872ABE83B} + EndGlobalSection +EndGlobal diff --git a/Lab1_OAP/Lab1_OAP/Lab1_OAP.cpp b/Lab1_OAP/Lab1_OAP/Lab1_OAP.cpp new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/Lab1_OAP/Lab1_OAP/Lab1_OAP.cpp @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Lab1_OAP/Lab1_OAP/Lab1_OAP.vcxproj b/Lab1_OAP/Lab1_OAP/Lab1_OAP.vcxproj new file mode 100644 index 0000000..7b4bd6f --- /dev/null +++ b/Lab1_OAP/Lab1_OAP/Lab1_OAP.vcxproj @@ -0,0 +1,135 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 17.0 + Win32Proj + {39e703ff-4168-4aca-84ca-cdd94bfe3fd3} + Lab1OAP + 10.0 + + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + + + + + + + + + + + + + + + + + + + + Level3 + true + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + + + + + \ No newline at end of file diff --git a/Lab1_OAP/Lab1_OAP/Lab1_OAP.vcxproj.filters b/Lab1_OAP/Lab1_OAP/Lab1_OAP.vcxproj.filters new file mode 100644 index 0000000..0805cb7 --- /dev/null +++ b/Lab1_OAP/Lab1_OAP/Lab1_OAP.vcxproj.filters @@ -0,0 +1,22 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Исходные файлы + + + \ No newline at end of file diff --git a/ProjectGasolineTanker/ProjectGasolineTanker/DrawingGasolineTanker.cs b/ProjectGasolineTanker/ProjectGasolineTanker/DrawingGasolineTanker.cs deleted file mode 100644 index 12c41af..0000000 --- a/ProjectGasolineTanker/ProjectGasolineTanker/DrawingGasolineTanker.cs +++ /dev/null @@ -1,186 +0,0 @@ -namespace ProjectGasolineTanker; - -/// -/// Класс, отвечающий за прорисовку и перемещение объекта-сущности -/// -public class DrawingGasolineTanker -{ - /// - /// Класс-сущность - /// - public EntityGasolineTanker? EntityGasolineTanker { get; private set; } - - /// - /// Ширина окна - /// - private int? _pictureWidth; - - /// - /// Высота окна - /// - private int? _pictureHeight; - - /// - /// Левая координата прорисовки газовоза - /// - private int? _startPosX; - - /// - /// Верхняя кооридната прорисовки газовоза - /// - private int? _startPosY; - - /// - /// Ширина прорисовки газовоза - /// - private readonly int _drawingTankerWidth = 160; - - /// - /// Высота прорисовки газовоза - /// - private readonly int _drawingTankerHeight = 55; - - /// - /// Инициализация свойств - /// - /// Скорость - /// Вес - /// Основной цвет - /// Дополнительный цвет - /// Признак наличия обвеса - /// Признак наличия украшения на колесах - public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool bodyKit, bool ornamentWheels) - { - EntityGasolineTanker = new EntityGasolineTanker(); - EntityGasolineTanker.Init(speed, weight, bodyColor, additionalColor, bodyKit, ornamentWheels); - _pictureWidth = null; - _pictureHeight = null; - _startPosX = null; - _startPosY = null; - } - - /// - /// Установка границ поля - /// - /// Ширина поля - /// Высота поля - /// true - границы заданы, false - проверка не пройдена, нельзя разместить объект в этих размерах - public bool SetPictureSize(int width, int height) - { - // TODO проверка, что объект "влезает" в размеры поля - // если влезает, сохраняем границы и корректируем позицию объекта, если она была уже установлена - _pictureWidth = width; - _pictureHeight = height; - return true; - } - - /// - /// Установка позиции - /// - /// Координата X - /// Координата Y - public void SetPosition(int x, int y) - { - if (!_pictureHeight.HasValue || !_pictureWidth.HasValue) - { - return; - } - - // TODO если при установке объекта в эти координаты, он будет "выходить" за границы формы - // то надо изменить координаты, чтобы он оставался в этих границах - _startPosX = x; - _startPosY = y; - } - - /// - /// Изменение направления перемещения - /// - /// Направление - /// true - перемещение выполнено, false - перемещение невозможно - public bool MoveTransport(DirectionType direction) - { - if (EntityGasolineTanker == null || !_startPosX.HasValue || !_startPosY.HasValue) - { - return false; - } - - switch (direction) - { - //влево - case DirectionType.Left: - if (_startPosX.Value - (int)EntityGasolineTanker.Step > 0) - { - _startPosX -= (int)EntityGasolineTanker.Step; - } - return true; - //вверх - case DirectionType.Up: - if (_startPosY.Value - (int)EntityGasolineTanker.Step > 0) - { - _startPosY -= (int)EntityGasolineTanker.Step; - } - return true; - //вправо - case DirectionType.Right: - if (_startPosX.Value + _drawingTankerWidth + (int)EntityGasolineTanker.Step < _pictureWidth) - { - _startPosX += (int)EntityGasolineTanker.Step; - } - return true; - //вниз - case DirectionType.Down: - if (_startPosY.Value + _drawingTankerHeight + (int)EntityGasolineTanker.Step < _pictureHeight) - { - _startPosY += (int)EntityGasolineTanker.Step; - } - return true; - default: - return false; - } - } - - /// - /// Прорисовка объекта - /// - /// - public void DrawTransport(Graphics g) - { - if (EntityGasolineTanker == null || !_startPosX.HasValue || !_startPosY.HasValue) - { - return; - } - //бак бензовоза - Pen pen = new Pen(Color.Black); - Brush dopBrush = new SolidBrush(EntityGasolineTanker.AdditionalColor); - if (EntityGasolineTanker.BodyKit) - { - g.FillRectangle(dopBrush, _startPosX.Value + 25, _startPosY.Value + 5, 100, 35); - g.FillRectangle(dopBrush, _startPosX.Value + 80, _startPosY.Value, 10, 5); - } - - //колеса - Brush brBlack = new SolidBrush(Color.Black); - g.FillEllipse(brBlack, _startPosX.Value + 130, _startPosY.Value + 35, 20, 20); - g.FillEllipse(brBlack, _startPosX.Value + 10, _startPosY.Value + 35, 20, 20); - g.FillEllipse(brBlack, _startPosX.Value + 30, _startPosY.Value + 35, 20, 20); - //корпус - Brush br = new SolidBrush(EntityGasolineTanker?.BodyColor ?? Color.Black); - g.FillRectangle(br, _startPosX.Value + 115, _startPosY.Value + 5, 40, 40); - g.FillRectangle(br, _startPosX.Value + 10, _startPosY.Value + 35, 140, 10); - //окно - Brush brBlue = new SolidBrush(Color.LightBlue); - g.FillRectangle(brBlue, _startPosX.Value + 120, _startPosY.Value + 10, 25, 25); - //окантовка - g.DrawRectangle(pen, _startPosX.Value + 120, _startPosY.Value + 10, 25, 25); - g.DrawRectangle(pen, _startPosX.Value + 115, _startPosY.Value + 5, 40, 40); - g.DrawRectangle(pen, _startPosX.Value + 10, _startPosY.Value + 35, 105, 10); - //крыло колеса - if (EntityGasolineTanker != null && EntityGasolineTanker.OrnamentWheels) - { - Pen penGray = new Pen(Color.Gray); - g.DrawEllipse(penGray, _startPosX.Value + 130, _startPosY.Value + 35, 20, 20); - g.DrawEllipse(penGray, _startPosX.Value + 10, _startPosY.Value + 35, 20, 20); - g.DrawEllipse(penGray, _startPosX.Value + 30, _startPosY.Value + 35, 20, 20); - } - } -} \ No newline at end of file diff --git a/ProjectGasolineTanker/ProjectGasolineTanker/DirectionType.cs b/ProjectGasolineTanker/ProjectGasolineTanker/Drawings/DirectionType.cs similarity index 89% rename from ProjectGasolineTanker/ProjectGasolineTanker/DirectionType.cs rename to ProjectGasolineTanker/ProjectGasolineTanker/Drawings/DirectionType.cs index 9ba1c53..0e27236 100644 --- a/ProjectGasolineTanker/ProjectGasolineTanker/DirectionType.cs +++ b/ProjectGasolineTanker/ProjectGasolineTanker/Drawings/DirectionType.cs @@ -1,4 +1,4 @@ -namespace ProjectGasolineTanker; +namespace ProjectGasolineTanker.Drawings; /// /// Направление перемещения diff --git a/ProjectGasolineTanker/ProjectGasolineTanker/Drawings/DrawingGasolineTanker.cs b/ProjectGasolineTanker/ProjectGasolineTanker/Drawings/DrawingGasolineTanker.cs new file mode 100644 index 0000000..5210b0f --- /dev/null +++ b/ProjectGasolineTanker/ProjectGasolineTanker/Drawings/DrawingGasolineTanker.cs @@ -0,0 +1,73 @@ +using ProjectGasolineTanker.Entities; + +namespace ProjectGasolineTanker.Drawings; + +/// +/// Класс, отвечающий за прорисовку и перемещение объекта-сущности +/// +public class DrawingGasolineTanker : DrawingTanker +{ + /// + /// Конструктор + /// + /// Скорость + /// Вес + /// Основной цвет + /// Дополнительный цвет + /// Признак наличия обвеса + /// Признак наличия украшения на колесах + public DrawingGasolineTanker(int speed, double weight, Color bodyColor, Color additionalColor, bool tank, bool ornamentWheels) : base(160,55) + { + EntityTanker = new EntityGasolineTanker(speed, weight, bodyColor, additionalColor, tank, ornamentWheels); + } + + public override void DrawTransport(Graphics g) + { + if (EntityTanker == null || EntityTanker is not EntityGasolineTanker tanker || !_startPosX.HasValue || !_startPosY.HasValue) + { + return; + } + + Pen pen = new Pen(Color.Black); + Brush dopBrush = new SolidBrush(tanker.AdditionalColor); + + //колеса + Brush brBlack = new SolidBrush(Color.Black); + g.FillEllipse(brBlack, _startPosX.Value + 130, _startPosY.Value + 35, 20, 20); + g.FillEllipse(brBlack, _startPosX.Value + 10, _startPosY.Value + 35, 20, 20); + g.FillEllipse(brBlack, _startPosX.Value + 30, _startPosY.Value + 35, 20, 20); + //корпус + Brush br = new SolidBrush(tanker?.BodyColor ?? Color.Black); + g.FillRectangle(br, _startPosX.Value + 115, _startPosY.Value + 5, 40, 40); + g.FillRectangle(br, _startPosX.Value + 10, _startPosY.Value + 35, 140, 10); + //окно + Brush brBlue = new SolidBrush(Color.LightBlue); + g.FillRectangle(brBlue, _startPosX.Value + 120, _startPosY.Value + 10, 25, 25); + //окантовка + g.DrawRectangle(pen, _startPosX.Value + 120, _startPosY.Value + 10, 25, 25); + g.DrawRectangle(pen, _startPosX.Value + 115, _startPosY.Value + 5, 40, 40); + g.DrawRectangle(pen, _startPosX.Value + 10, _startPosY.Value + 35, 105, 10); + + _startPosX += 10; + _startPosY += 10; + base.DrawTransport(g); + _startPosX -= 10; + _startPosY -= 10; + + //бак бензовоза + if (tanker != null && tanker.Tank) + { + g.FillRectangle(dopBrush, _startPosX.Value + 25, _startPosY.Value + 5, 100, 35); + g.FillRectangle(dopBrush, _startPosX.Value + 80, _startPosY.Value, 10, 5); + } + + //крыло колеса + if (tanker != null && tanker.OrnamentWheels) + { + Pen penGray = new Pen(Color.Gray); + g.DrawEllipse(penGray, _startPosX.Value + 130, _startPosY.Value + 35, 20, 20); + g.DrawEllipse(penGray, _startPosX.Value + 10, _startPosY.Value + 35, 20, 20); + g.DrawEllipse(penGray, _startPosX.Value + 30, _startPosY.Value + 35, 20, 20); + } + } +} \ No newline at end of file diff --git a/ProjectGasolineTanker/ProjectGasolineTanker/Drawings/DrawingTanker.cs b/ProjectGasolineTanker/ProjectGasolineTanker/Drawings/DrawingTanker.cs new file mode 100644 index 0000000..8aa437f --- /dev/null +++ b/ProjectGasolineTanker/ProjectGasolineTanker/Drawings/DrawingTanker.cs @@ -0,0 +1,205 @@ +using ProjectGasolineTanker.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectGasolineTanker.Drawings; +public class DrawingTanker +{ + /// + /// Класс-сущность + /// + public EntityTanker? EntityTanker { get; protected set; } + + /// + /// Ширина окна + /// + private int? _pictureWidth; + + /// + /// Высота окна + /// + private int? _pictureHeight; + + /// + /// Левая координата прорисовки газовоза + /// + protected int? _startPosX; + + /// + /// Верхняя кооридната прорисовки газовоза + /// + protected int? _startPosY; + + /// + /// Ширина прорисовки газовоза + /// + private readonly int _drawingTankerWidth = 130; + + /// + /// Высота прорисовки газовоза + /// + private readonly int _drawingTankerHeight = 50; + + /// + /// Пустой конструктор + /// + private DrawingTanker() + { + _pictureWidth = null; + _pictureHeight = null; + _startPosX = null; + _startPosY = null; + } + + /// + /// Конструктор + /// + /// Скорость + /// Вес + /// Основной цвет + public DrawingTanker(int speed, double weight, Color bodyColor) : this() + { + EntityTanker = new EntityTanker(speed, weight, bodyColor); + } + + /// + /// Конструктор для наследников + /// + /// Ширина прорисовки газовоза + /// Высота прорисовки газовоза + protected DrawingTanker(int _drawingTankerWidth, int _drawingTankerHeight) : this() + { + _drawingTankerWidth = _drawingTankerWidth; + _drawingTankerHeight = _drawingTankerHeight; + } + + /// + /// Установка границ поля + /// + /// Ширина поля + /// Высота поля + /// true - границы заданы, false - проверка не пройдена, нельзя разместить объект в этих размерах + public Boolean SetPictureSize(int width, int height) + { + if (width <= _drawingTankerWidth || height <= _drawingTankerHeight) return false; + _pictureWidth = width; + _pictureHeight = height; + if (_startPosX.HasValue && _startPosY.HasValue) + { + if (_startPosX + _drawingTankerWidth > _pictureWidth) + { + _startPosX = _pictureWidth.Value - _drawingTankerWidth; + } + if (_startPosY + _drawingTankerHeight > _pictureHeight) + { + _startPosY = _pictureHeight.Value - _drawingTankerHeight; + } + } + + return true; + } + /// + /// Установка позиции + /// + /// Координата X + /// Координата Y + public void SetPosition(int x, int y) + { + if (!_pictureHeight.HasValue || !_pictureWidth.HasValue) + { + return; + } + + _startPosX = x; + _startPosY = y; + + if (_drawingTankerHeight + y > _pictureHeight || y < 0) + { + _startPosY = 0; + } + if (_drawingTankerWidth + x > _pictureWidth || x < 0) + { + _startPosX = 0; + } + } + + /// + /// Изменение направления перемещения + /// + /// Направление + /// true - перемещение выполнено, false - перемещение невозможно + public bool MoveTransport(DirectionType direction) + { + if (EntityTanker == null || !_startPosX.HasValue || !_startPosY.HasValue) + { + return false; + } + + switch (direction) + { + //влево + case DirectionType.Left: + if (_startPosX.Value - (int)EntityTanker.Step > 0) + { + _startPosX -= (int)EntityTanker.Step; + } + return true; + //вверх + case DirectionType.Up: + if (_startPosY.Value - (int)EntityTanker.Step > 0) + { + _startPosY -= (int)EntityTanker.Step; + } + return true; + //вправо + case DirectionType.Right: + if (_startPosX.Value + _drawingTankerWidth + (int)EntityTanker.Step < _pictureWidth) + { + _startPosX += (int)EntityTanker.Step; + } + return true; + //вниз + case DirectionType.Down: + if (_startPosY.Value + _drawingTankerHeight + (int)EntityTanker.Step < _pictureHeight) + { + _startPosY += (int)EntityTanker.Step; + } + return true; + default: + return false; + } + } + + /// + /// Прорисовка объекта + /// + /// + public virtual void DrawTransport(Graphics g) + { + if (EntityTanker == null || !_startPosX.HasValue || !_startPosY.HasValue) + { + return; + } + Pen pen = new Pen(Color.Black); + + //колеса + Brush brBlack = new SolidBrush(Color.Black); + g.FillEllipse(brBlack, _startPosX.Value + 120, _startPosY.Value + 25, 20, 20); + g.FillEllipse(brBlack, _startPosX.Value, _startPosY.Value + 25, 20, 20); + g.FillEllipse(brBlack, _startPosX.Value + 20, _startPosY.Value + 25, 20, 20); + //корпус + Brush br = new SolidBrush(EntityTanker?.BodyColor ?? Color.Black); + g.FillRectangle(br, _startPosX.Value + 105, _startPosY.Value, 40, 40); + g.FillRectangle(br, _startPosX.Value, _startPosY.Value + 25, 140, 10); + //окно + Brush brBlue = new SolidBrush(Color.LightBlue); + g.FillRectangle(brBlue, _startPosX.Value + 110, _startPosY.Value, 25, 25); + //окантовка + g.DrawRectangle(pen, _startPosX.Value + 110, _startPosY.Value, 25, 25); + g.DrawRectangle(pen, _startPosX.Value + 105, _startPosY.Value, 40, 40); + g.DrawRectangle(pen, _startPosX.Value, _startPosY.Value + 25, 105, 10); + } +} diff --git a/ProjectGasolineTanker/ProjectGasolineTanker/Entities/EntityGasolineTanker.cs b/ProjectGasolineTanker/ProjectGasolineTanker/Entities/EntityGasolineTanker.cs new file mode 100644 index 0000000..62b4b51 --- /dev/null +++ b/ProjectGasolineTanker/ProjectGasolineTanker/Entities/EntityGasolineTanker.cs @@ -0,0 +1,45 @@ +using System.Drawing; + +namespace ProjectGasolineTanker.Entities +{ + /// + /// Класс-сущность "Газовоз" + /// + public class EntityGasolineTanker : EntityTanker + { + public EntityGasolineTanker(int speed, double weight, Color bodyColor, Color additionalColor, bool tank, bool ornamentWheels) : base(speed, weight, bodyColor) + { + AdditionalColor = additionalColor; + Tank = tank; + OrnamentWheels = ornamentWheels; + } + + public Color AdditionalColor { get; private set; } + + /// + /// Признак наличия цистерны + /// + public bool Tank { get; private set; } + + /// + /// Признак наличия украшенных колес + /// + public bool OrnamentWheels { get; private set; } + + /// + /// Инициализация полей объекта-класса газовоза + /// + /// Скорость + /// Вес газовоза + /// Основной цвет + /// Дополнительный цвет + /// Признак наличия цистерны + /// Признак наличия украшенных колес + public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool tank, bool ornamentWheels) + { + AdditionalColor = additionalColor; + Tank = tank; + OrnamentWheels = ornamentWheels; + } + } +} diff --git a/ProjectGasolineTanker/ProjectGasolineTanker/Entities/EntityTanker.cs b/ProjectGasolineTanker/ProjectGasolineTanker/Entities/EntityTanker.cs new file mode 100644 index 0000000..ffe5f13 --- /dev/null +++ b/ProjectGasolineTanker/ProjectGasolineTanker/Entities/EntityTanker.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectGasolineTanker.Entities; + +/// +/// Класс-сущность "Танкер" +/// +public class EntityTanker +{ + /// + /// Скорость + /// + public int Speed { get; private set; } + + /// + /// Вес + /// + public double Weight { get; private set; } + + /// + /// Основной цвет + /// + public Color BodyColor { get; private set; } + + /// + /// Шаг перемещения газовоза + /// + public double Step => Speed * 100 / Weight; + + /// + /// Конструктор сущности + /// + /// Скорость + /// Вес газовоза + /// Основной цвет + + public EntityTanker(int speed, double weight, Color bodyColor) + { + Speed = speed; + Weight = weight; + BodyColor = bodyColor; + } +} + diff --git a/ProjectGasolineTanker/ProjectGasolineTanker/EntityGasolineTanker.cs b/ProjectGasolineTanker/ProjectGasolineTanker/EntityGasolineTanker.cs deleted file mode 100644 index 5a2882b..0000000 --- a/ProjectGasolineTanker/ProjectGasolineTanker/EntityGasolineTanker.cs +++ /dev/null @@ -1,61 +0,0 @@ -namespace ProjectGasolineTanker; - -/// -/// Класс-сущность "Газовоз" -/// -public class EntityGasolineTanker -{ - /// - /// Скорость - /// - public int Speed { get; private set; } - - /// - /// Вес - /// - public double Weight { get; private set; } - - /// - /// Основной цвет - /// - public Color BodyColor { get; private set; } - - /// - /// Дополнительный цвет - /// - public Color AdditionalColor { get; private set; } - - /// - /// Признак наличия обвеса - /// - public bool BodyKit { get; private set; } - - /// - /// Признак наличия украшенных колес - /// - public bool OrnamentWheels { get; private set; } - - /// - /// Шаг перемещения газовоза - /// - public double Step => Speed * 100 / Weight; - - /// - /// Инициализация полей объекта-класса газовоза - /// - /// Скорость - /// Вес газовоза - /// Основной цвет - /// Дополнительный цвет - /// Признак наличия обвеса - /// Признак наличия украшенных колес - public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool bodyKit, bool ornamentWheels) - { - Speed = speed; - Weight = weight; - BodyColor = bodyColor; - AdditionalColor = additionalColor; - BodyKit = bodyKit; - OrnamentWheels = ornamentWheels; - } -} \ No newline at end of file diff --git a/ProjectGasolineTanker/ProjectGasolineTanker/FormGasolineTanker.Designer.cs b/ProjectGasolineTanker/ProjectGasolineTanker/FormGasolineTanker.Designer.cs index d925acf..fcc0ec1 100644 --- a/ProjectGasolineTanker/ProjectGasolineTanker/FormGasolineTanker.Designer.cs +++ b/ProjectGasolineTanker/ProjectGasolineTanker/FormGasolineTanker.Designer.cs @@ -34,6 +34,7 @@ buttonDown = new Button(); buttonRight = new Button(); buttonUp = new Button(); + buttonCreateTanker = new Button(); ((System.ComponentModel.ISupportInitialize)pictureBoxGasolineTanker).BeginInit(); SuspendLayout(); // @@ -51,9 +52,9 @@ buttonCreateGasolineTanker.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; buttonCreateGasolineTanker.Location = new Point(12, 682); buttonCreateGasolineTanker.Name = "buttonCreateGasolineTanker"; - buttonCreateGasolineTanker.Size = new Size(112, 34); + buttonCreateGasolineTanker.Size = new Size(230, 34); buttonCreateGasolineTanker.TabIndex = 1; - buttonCreateGasolineTanker.Text = "Создать"; + buttonCreateGasolineTanker.Text = "Создать Бензовоз"; buttonCreateGasolineTanker.UseVisualStyleBackColor = true; buttonCreateGasolineTanker.Click += buttonCreateGasolineTanker_Click; // @@ -105,11 +106,23 @@ buttonUp.UseVisualStyleBackColor = true; buttonUp.Click += ButtonMove_Click; // + // buttonCreateTanker + // + buttonCreateTanker.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + buttonCreateTanker.Location = new Point(248, 682); + buttonCreateTanker.Name = "buttonCreateTanker"; + buttonCreateTanker.Size = new Size(230, 34); + buttonCreateTanker.TabIndex = 6; + buttonCreateTanker.Text = "Создать Грузовик"; + buttonCreateTanker.UseVisualStyleBackColor = true; + buttonCreateTanker.Click += buttonCreateTanker_Click; + // // FormGasolineTanker // AutoScaleDimensions = new SizeF(10F, 25F); AutoScaleMode = AutoScaleMode.Font; ClientSize = new Size(1312, 749); + Controls.Add(buttonCreateTanker); Controls.Add(buttonUp); Controls.Add(buttonRight); Controls.Add(buttonDown); @@ -130,5 +143,6 @@ private Button buttonDown; private Button buttonRight; private Button buttonUp; + private Button buttonCreateTanker; } } \ No newline at end of file diff --git a/ProjectGasolineTanker/ProjectGasolineTanker/FormGasolineTanker.cs b/ProjectGasolineTanker/ProjectGasolineTanker/FormGasolineTanker.cs index cacf984..bf37407 100644 --- a/ProjectGasolineTanker/ProjectGasolineTanker/FormGasolineTanker.cs +++ b/ProjectGasolineTanker/ProjectGasolineTanker/FormGasolineTanker.cs @@ -1,4 +1,5 @@ -using System; +using ProjectGasolineTanker.Drawings; +using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; @@ -15,7 +16,7 @@ namespace ProjectGasolineTanker /// /// Поле-объект для прорисовки объекта /// - private DrawingGasolineTanker? _drawingGasolineTanker; + private DrawingTanker? _drawingTanker; /// /// Инициализация формы /// @@ -28,16 +29,43 @@ namespace ProjectGasolineTanker /// private void Draw() { - if (_drawingGasolineTanker == null) + if (_drawingTanker == null) { return; } Bitmap bmp = new(pictureBoxGasolineTanker.Width, pictureBoxGasolineTanker.Height); Graphics gr = Graphics.FromImage(bmp); - _drawingGasolineTanker.DrawTransport(gr); + _drawingTanker.DrawTransport(gr); pictureBoxGasolineTanker.Image = bmp; } + + private void CreateObject(string type) + { + Random random = new(); + switch (type) + { + case nameof(DrawingTanker): + _drawingTanker = new DrawingTanker(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(DrawingGasolineTanker): + _drawingTanker = new DrawingGasolineTanker(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)), + Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2))); + break; + default: + return; + } + _drawingTanker.SetPictureSize(pictureBoxGasolineTanker.Width, pictureBoxGasolineTanker.Height); + _drawingTanker.SetPosition(random.Next(10, 100), random.Next(10, 100)); + Draw(); + } + + + + /// /// Обработка нажатия кнопки создать /// @@ -45,16 +73,14 @@ namespace ProjectGasolineTanker /// private void buttonCreateGasolineTanker_Click(object sender, EventArgs e) { - Random random = new(); - _drawingGasolineTanker = new DrawingGasolineTanker(); - _drawingGasolineTanker.Init(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)), - Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2))); - _drawingGasolineTanker.SetPictureSize(pictureBoxGasolineTanker.Width, pictureBoxGasolineTanker.Height); - _drawingGasolineTanker.SetPosition(random.Next(10, 100), random.Next(10, 100)); - Draw(); + CreateObject(nameof(DrawingGasolineTanker)); } + + private void buttonCreateTanker_Click(object sender, EventArgs e) + { + CreateObject(nameof(DrawingTanker)); + } + /// /// Перемещение объекта по форме (нажатие кнопок навигации) /// @@ -62,7 +88,7 @@ namespace ProjectGasolineTanker /// private void ButtonMove_Click(object sender, EventArgs e) { - if (_drawingGasolineTanker == null) + if (_drawingTanker == null) { return; } @@ -72,16 +98,16 @@ namespace ProjectGasolineTanker switch (name) { case "buttonUp": - result = _drawingGasolineTanker.MoveTransport(DirectionType.Up); + result = _drawingTanker.MoveTransport(DirectionType.Up); break; case "buttonDown": - result = _drawingGasolineTanker.MoveTransport(DirectionType.Down); + result = _drawingTanker.MoveTransport(DirectionType.Down); break; case "buttonLeft": - result = _drawingGasolineTanker.MoveTransport(DirectionType.Left); + result = _drawingTanker.MoveTransport(DirectionType.Left); break; case "buttonRight": - result = _drawingGasolineTanker.MoveTransport(DirectionType.Right); + result = _drawingTanker.MoveTransport(DirectionType.Right); break; }