From 65004508a9d90fd6305ef74167b12eec897f6863 Mon Sep 17 00:00:00 2001 From: tyxzo Date: Mon, 5 Feb 2024 14:53:27 +0400 Subject: [PATCH 1/5] =?UTF-8?q?=D0=BD=D0=B5=D0=B4=D0=BE=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D0=B0=D0=BD=D0=BD=D0=B0=D1=8F=20=D0=BF=D0=B5=D1=80=D0=B2=D0=B0?= =?UTF-8?q?=D1=8F=20=D0=BB=D0=B0=D0=B1=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DoubleDeckerBus/DirectionType.cs | 24 +++++ .../DoubleDeckerBus/DrawingDoubleDeckerBus.cs | 102 ++++++++++++++++++ .../DoubleDeckerBus/EntityDoubleDeckerBus.cs | 53 +++++++++ DoubleDeckerBus/DoubleDeckerBus/Form1.cs | 10 -- ...ner.cs => FormDoubleDeckerBus.Designer.cs} | 12 +-- .../DoubleDeckerBus/FormDoubleDeckerBus.cs | 20 ++++ .../{Form1.resx => FormDoubleDeckerBus.resx} | 0 DoubleDeckerBus/DoubleDeckerBus/Program.cs | 2 +- 8 files changed, 206 insertions(+), 17 deletions(-) create mode 100644 DoubleDeckerBus/DoubleDeckerBus/DirectionType.cs create mode 100644 DoubleDeckerBus/DoubleDeckerBus/DrawingDoubleDeckerBus.cs create mode 100644 DoubleDeckerBus/DoubleDeckerBus/EntityDoubleDeckerBus.cs delete mode 100644 DoubleDeckerBus/DoubleDeckerBus/Form1.cs rename DoubleDeckerBus/DoubleDeckerBus/{Form1.Designer.cs => FormDoubleDeckerBus.Designer.cs} (75%) create mode 100644 DoubleDeckerBus/DoubleDeckerBus/FormDoubleDeckerBus.cs rename DoubleDeckerBus/DoubleDeckerBus/{Form1.resx => FormDoubleDeckerBus.resx} (100%) diff --git a/DoubleDeckerBus/DoubleDeckerBus/DirectionType.cs b/DoubleDeckerBus/DoubleDeckerBus/DirectionType.cs new file mode 100644 index 0000000..a05d391 --- /dev/null +++ b/DoubleDeckerBus/DoubleDeckerBus/DirectionType.cs @@ -0,0 +1,24 @@ + +namespace DoubleDeckerBus; + +public enum DirectionType +{ /// + /// вверх + /// + Up = 1, + + /// + /// вниз + /// + Down = 2, + + /// + /// влево + /// + Left = 3, + + /// + /// вправо + /// + Right = 4 +} diff --git a/DoubleDeckerBus/DoubleDeckerBus/DrawingDoubleDeckerBus.cs b/DoubleDeckerBus/DoubleDeckerBus/DrawingDoubleDeckerBus.cs new file mode 100644 index 0000000..bac59df --- /dev/null +++ b/DoubleDeckerBus/DoubleDeckerBus/DrawingDoubleDeckerBus.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DoubleDeckerBus; +/// +/// +/// +public class DrawingDoubleDeckerBus +{ + public EntityDoubleDeckerBus? EntityDoubleDeckerBus { get; private set; } + + private int? _pictureWidth; + + private int? _pictureHeight; + + private int? _startPosX; + + private int? _startPosY; + + private readonly int _DrawingBusWidth; + + private readonly int _DrawingBusHight; + + public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool bodyKit, bool wing, bool sportLine) + { + EntityDoubleDeckerBus = new EntityDoubleDeckerBus(); + EntityDoubleDeckerBus.Init(speed, weight, bodyColor, additionalColor, bodyKit, wing, sportLine); + _pictureWidth = null; + _pictureHeight = null; + _startPosX = null; + _startPosY = null; + } + + public bool SetPictureSize(int width, int hight) + { + _pictureWidth = width; + _pictureHeight = hight; + return true; + } + + public void SetPosition(int x, int y) + { + if (!_pictureHeight.HasValue || !_pictureWidth.HasValue) + { + return; + } + + _startPosX = x; + _startPosY = y; + } + + public bool MoveTransport(DirectionType direction) + { + if (EntityDoubleDeckerBus == null || !_startPosX.HasValue || !_startPosY.HasValue) + { + return false; + } + + switch(direction) + { + case DirectionType.Left: + if (_startPosX.Value - EntityDoubleDeckerBus.Step > 0) + { + _startPosX -= (int)EntityDoubleDeckerBus.Step; + } + return true; + + case DirectionType.Up: + if (_startPosY.Value - EntityDoubleDeckerBus.Step > 0) + { + _startPosY -= (int)EntityDoubleDeckerBus.Step; + } + return true; + case DirectionType.Right: + if (_startPosX.Value + EntityDoubleDeckerBus.Step < _pictureWidth) + { + _startPosX += (int)EntityDoubleDeckerBus.Step; + } + return true; + case DirectionType.Down: + if (_startPosY.Value + EntityDoubleDeckerBus.Step < _pictureHeight) + { + _startPosX += (int)EntityDoubleDeckerBus.Step; + } + return true; + default: + return false; + + } + } + + public void DrawTrasnport(Graphics g) + { + if (EntityDoubleDeckerBus == null || !_startPosX.HasValue || !_startPosY.HasValue) + { + return; + } + } +} diff --git a/DoubleDeckerBus/DoubleDeckerBus/EntityDoubleDeckerBus.cs b/DoubleDeckerBus/DoubleDeckerBus/EntityDoubleDeckerBus.cs new file mode 100644 index 0000000..82a7bb4 --- /dev/null +++ b/DoubleDeckerBus/DoubleDeckerBus/EntityDoubleDeckerBus.cs @@ -0,0 +1,53 @@ + + +namespace DoubleDeckerBus; + public class EntityDoubleDeckerBus +{ + 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 Wing { get; private set; } + /// + /// Признак (опция) наличия гоночной полосы + /// + public bool SportLine { get; private set; } + /// + /// Шаг перемещения автомобиля + /// + public double Step => Speed * 100 / Weight; + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool bodyKit, bool wing, bool sportLine) + { + Speed = speed; + Weight = weight; + BodyColor = bodyColor; + AdditionalColor = additionalColor; + BodyKit = bodyKit; + Wing = wing; + SportLine = sportLine; + } +} \ No newline at end of file diff --git a/DoubleDeckerBus/DoubleDeckerBus/Form1.cs b/DoubleDeckerBus/DoubleDeckerBus/Form1.cs deleted file mode 100644 index fd2d1d7..0000000 --- a/DoubleDeckerBus/DoubleDeckerBus/Form1.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace DoubleDeckerBus -{ - public partial class Form1 : Form - { - public Form1() - { - InitializeComponent(); - } - } -} \ No newline at end of file diff --git a/DoubleDeckerBus/DoubleDeckerBus/Form1.Designer.cs b/DoubleDeckerBus/DoubleDeckerBus/FormDoubleDeckerBus.Designer.cs similarity index 75% rename from DoubleDeckerBus/DoubleDeckerBus/Form1.Designer.cs rename to DoubleDeckerBus/DoubleDeckerBus/FormDoubleDeckerBus.Designer.cs index 3ca1fa2..7e773ee 100644 --- a/DoubleDeckerBus/DoubleDeckerBus/Form1.Designer.cs +++ b/DoubleDeckerBus/DoubleDeckerBus/FormDoubleDeckerBus.Designer.cs @@ -1,14 +1,14 @@ namespace DoubleDeckerBus { - partial class Form1 + partial class FormDoubleDeckerBus { /// - /// Required designer variable. + /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// - /// Clean up any resources being used. + /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) @@ -23,15 +23,15 @@ #region Windows Form Designer generated code /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. /// private void InitializeComponent() { this.components = new System.ComponentModel.Container(); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(800, 450); - this.Text = "Form1"; + this.Text = "FormDoubleDeckerBus"; } #endregion diff --git a/DoubleDeckerBus/DoubleDeckerBus/FormDoubleDeckerBus.cs b/DoubleDeckerBus/DoubleDeckerBus/FormDoubleDeckerBus.cs new file mode 100644 index 0000000..cea7f31 --- /dev/null +++ b/DoubleDeckerBus/DoubleDeckerBus/FormDoubleDeckerBus.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace DoubleDeckerBus +{ + public partial class FormDoubleDeckerBus : Form + { + public FormDoubleDeckerBus() + { + InitializeComponent(); + } + } +} diff --git a/DoubleDeckerBus/DoubleDeckerBus/Form1.resx b/DoubleDeckerBus/DoubleDeckerBus/FormDoubleDeckerBus.resx similarity index 100% rename from DoubleDeckerBus/DoubleDeckerBus/Form1.resx rename to DoubleDeckerBus/DoubleDeckerBus/FormDoubleDeckerBus.resx diff --git a/DoubleDeckerBus/DoubleDeckerBus/Program.cs b/DoubleDeckerBus/DoubleDeckerBus/Program.cs index 1cce65b..913b697 100644 --- a/DoubleDeckerBus/DoubleDeckerBus/Program.cs +++ b/DoubleDeckerBus/DoubleDeckerBus/Program.cs @@ -11,7 +11,7 @@ namespace DoubleDeckerBus // To customize application configuration such as set high DPI settings or default font, // see https://aka.ms/applicationconfiguration. ApplicationConfiguration.Initialize(); - Application.Run(new Form1()); + Application.Run(new FormDoubleDeckerBus()); } } } \ No newline at end of file -- 2.25.1 From 9d348c5879aba0c59d6a068e502064ad8a319c0f Mon Sep 17 00:00:00 2001 From: tyxz0 Date: Mon, 19 Feb 2024 02:20:17 +0400 Subject: [PATCH 2/5] =?UTF-8?q?=D0=BB=D0=B0=D0=B1=D0=B0=201?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DoubleDeckerBus/DoubleDeckerBus.csproj | 15 ++ .../DoubleDeckerBus/DrawingDoubleDeckerBus.cs | 179 ++++++++++++++++-- .../DoubleDeckerBus/EntityDoubleDeckerBus.cs | 29 +-- .../FormDoubleDeckerBus.Designer.cs | 103 +++++++++- .../DoubleDeckerBus/FormDoubleDeckerBus.cs | 67 +++++++ .../DoubleDeckerBus/FormDoubleDeckerBus.resx | 50 ++--- .../Properties/Resources.Designer.cs | 103 ++++++++++ .../DoubleDeckerBus/Properties/Resources.resx | 133 +++++++++++++ .../DoubleDeckerBus/Resources/arrowdown.png | Bin 0 -> 24260 bytes .../DoubleDeckerBus/Resources/arrowleft.png | Bin 0 -> 22298 bytes .../DoubleDeckerBus/Resources/arrowright.png | Bin 0 -> 21998 bytes .../DoubleDeckerBus/Resources/arrowup.png | Bin 0 -> 24100 bytes 12 files changed, 617 insertions(+), 62 deletions(-) create mode 100644 DoubleDeckerBus/DoubleDeckerBus/Properties/Resources.Designer.cs create mode 100644 DoubleDeckerBus/DoubleDeckerBus/Properties/Resources.resx create mode 100644 DoubleDeckerBus/DoubleDeckerBus/Resources/arrowdown.png create mode 100644 DoubleDeckerBus/DoubleDeckerBus/Resources/arrowleft.png create mode 100644 DoubleDeckerBus/DoubleDeckerBus/Resources/arrowright.png create mode 100644 DoubleDeckerBus/DoubleDeckerBus/Resources/arrowup.png diff --git a/DoubleDeckerBus/DoubleDeckerBus/DoubleDeckerBus.csproj b/DoubleDeckerBus/DoubleDeckerBus/DoubleDeckerBus.csproj index e1a0735..244387d 100644 --- a/DoubleDeckerBus/DoubleDeckerBus/DoubleDeckerBus.csproj +++ b/DoubleDeckerBus/DoubleDeckerBus/DoubleDeckerBus.csproj @@ -8,4 +8,19 @@ enable + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + \ No newline at end of file diff --git a/DoubleDeckerBus/DoubleDeckerBus/DrawingDoubleDeckerBus.cs b/DoubleDeckerBus/DoubleDeckerBus/DrawingDoubleDeckerBus.cs index bac59df..2897999 100644 --- a/DoubleDeckerBus/DoubleDeckerBus/DrawingDoubleDeckerBus.cs +++ b/DoubleDeckerBus/DoubleDeckerBus/DrawingDoubleDeckerBus.cs @@ -1,10 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace DoubleDeckerBus; +namespace DoubleDeckerBus; /// /// /// @@ -20,25 +14,48 @@ public class DrawingDoubleDeckerBus private int? _startPosY; - private readonly int _DrawingBusWidth; + private readonly int _DrawingBusWidth = 120; - private readonly int _DrawingBusHight; + private readonly int _DrawingBusHight = 60; - public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool bodyKit, bool wing, bool sportLine) + public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool sideMirrors, bool topSection, bool stripes, bool stairs) { EntityDoubleDeckerBus = new EntityDoubleDeckerBus(); - EntityDoubleDeckerBus.Init(speed, weight, bodyColor, additionalColor, bodyKit, wing, sportLine); + EntityDoubleDeckerBus.Init(speed, weight, bodyColor, additionalColor, sideMirrors, topSection, stripes, stairs); _pictureWidth = null; _pictureHeight = null; _startPosX = null; _startPosY = null; } - + /// + /// размер окна + /// + /// + /// + /// public bool SetPictureSize(int width, int hight) { - _pictureWidth = width; - _pictureHeight = hight; - return true; + if (_DrawingBusWidth > width || _DrawingBusHight > hight) + { + return false; + } + else + { + _pictureWidth = width; + _pictureHeight = hight; + + if (_startPosX.HasValue && (_startPosX.Value + _DrawingBusWidth > _pictureWidth)) + { + _startPosX = _pictureWidth - _DrawingBusWidth; + } + + if (_startPosY.HasValue && (_startPosY + _DrawingBusHight > _pictureHeight)) + { + _startPosY = _pictureHeight - _DrawingBusHight; + } + + return true; + } } public void SetPosition(int x, int y) @@ -48,8 +65,29 @@ public class DrawingDoubleDeckerBus return; } - _startPosX = x; - _startPosY = y; + if (x < 0 || y < 0) + { + x = -x; + y = -y; + } + + if (x + _DrawingBusWidth > _pictureWidth) + { + _startPosX = _pictureWidth - _DrawingBusWidth; + } + else + { + _startPosX = x; + } + + if (y + _DrawingBusHight > _pictureHeight) + { + _startPosY = _pictureHeight - _DrawingBusHight; + } + else + { + _startPosY = y; + } } public bool MoveTransport(DirectionType direction) @@ -75,15 +113,15 @@ public class DrawingDoubleDeckerBus } return true; case DirectionType.Right: - if (_startPosX.Value + EntityDoubleDeckerBus.Step < _pictureWidth) + if (_startPosX.Value + _DrawingBusWidth + EntityDoubleDeckerBus.Step < _pictureWidth) { _startPosX += (int)EntityDoubleDeckerBus.Step; } return true; case DirectionType.Down: - if (_startPosY.Value + EntityDoubleDeckerBus.Step < _pictureHeight) + if (_startPosY.Value + _DrawingBusHight + EntityDoubleDeckerBus.Step < _pictureHeight) { - _startPosX += (int)EntityDoubleDeckerBus.Step; + _startPosY += (int)EntityDoubleDeckerBus.Step; } return true; default: @@ -98,5 +136,106 @@ public class DrawingDoubleDeckerBus { return; } + + Pen pen = new(Color.Black, 2); + Brush additionalBrush = new SolidBrush(EntityDoubleDeckerBus.AdditionalColor); + Brush mainBrush = new SolidBrush(EntityDoubleDeckerBus.BodyColor); + + //зеркала + if (EntityDoubleDeckerBus.SideMirrors) + { + g.DrawRectangle(pen, _startPosX.Value + 95, _startPosY.Value + 5, 20, 5); + g.DrawRectangle(pen, _startPosX.Value + 110, _startPosY.Value + 10, 5, 5); + g.FillRectangle(mainBrush, _startPosX.Value + 95, _startPosY.Value + 5, 20, 5); + g.FillRectangle(additionalBrush, _startPosX.Value + 110, _startPosY.Value + 10, 5, 5); + + } + + //кузов + PointF[] bus = {new PointF((float)_startPosX + 5, (float)_startPosY + 5), new PointF((float)_startPosX + 5, (float)_startPosY + 45), new PointF((float)_startPosX+ 105, (float)_startPosY + 45), new PointF((float)_startPosX + 105, (float)_startPosY + 25), new PointF((float)_startPosX + 95, (float)_startPosY + 5)}; + g.DrawPolygon(pen, bus); + g.FillPolygon(mainBrush, bus); + + //вехний отсек + if (EntityDoubleDeckerBus.TopSection) + { + PointF[] section = { new PointF((float)_startPosX + 27, (float)_startPosY + 5), new PointF((float)_startPosX + 37, (float)_startPosY + 1), new PointF((float)_startPosX + 65, (float)_startPosY + 1), new PointF((float)_startPosX + 75, (float)_startPosY + 5)}; + g.DrawPolygon(pen, section); + g.FillPolygon(additionalBrush, section); + } + + //полоски + if (EntityDoubleDeckerBus.Stripes) + { + g.FillRectangle(additionalBrush, _startPosX.Value + 5, _startPosY.Value + 39, 100, 3); + PointF[] stripe = { new PointF((float)_startPosX + 5, (float)_startPosY + 22), new PointF((float)_startPosX + 5, (float)_startPosY + 25), new PointF((float)_startPosX + 104, (float)_startPosY + 25), new PointF((float)_startPosX + 103, (float)_startPosY + 22) }; + g.FillPolygon(additionalBrush, stripe); + + } + //окна 2ой этаж + Brush blueBr = new SolidBrush(Color.LightBlue); + g.DrawRectangle(pen, _startPosX.Value + 7, _startPosY.Value + 10, 12, 10); + g.DrawRectangle(pen, _startPosX.Value + 21, _startPosY.Value + 10, 12, 10); + g.DrawRectangle(pen, _startPosX.Value + 35, _startPosY.Value + 10, 10, 10); + g.DrawRectangle(pen, _startPosX.Value + 47, _startPosY.Value + 10, 6, 10); + g.DrawRectangle(pen, _startPosX.Value + 55, _startPosY.Value + 10, 13, 10); + g.DrawRectangle(pen, _startPosX.Value + 71, _startPosY.Value + 10, 14, 10); + + g.FillRectangle(blueBr, _startPosX.Value + 7, _startPosY.Value + 10, 12, 10); + g.FillRectangle(blueBr, _startPosX.Value + 21, _startPosY.Value + 10, 12, 10); + g.FillRectangle(blueBr, _startPosX.Value + 35, _startPosY.Value + 10, 10, 10); + g.FillRectangle(blueBr, _startPosX.Value + 47, _startPosY.Value + 10, 6, 10); + g.FillRectangle(blueBr, _startPosX.Value + 55, _startPosY.Value + 10, 13, 10); + g.FillRectangle(blueBr, _startPosX.Value + 71, _startPosY.Value + 10, 14, 10); + + //окна 1ый этаж + g.DrawRectangle(pen, _startPosX.Value + 7, _startPosY.Value + 25, 12, 10); + g.DrawRectangle(pen, _startPosX.Value + 21, _startPosY.Value + 25, 12, 10); + g.DrawRectangle(pen, _startPosX.Value + 47, _startPosY.Value + 25, 6, 10); + g.DrawRectangle(pen, _startPosX.Value + 55, _startPosY.Value + 25, 13, 10); + g.DrawRectangle(pen, _startPosX.Value + 71, _startPosY.Value + 25, 14, 10); + + g.FillRectangle(blueBr, _startPosX.Value + 7, _startPosY.Value + 25, 12, 10); + g.FillRectangle(blueBr, _startPosX.Value + 21, _startPosY.Value + 25, 12, 10); + g.FillRectangle(blueBr, _startPosX.Value + 47, _startPosY.Value + 25, 6, 10); + g.FillRectangle(blueBr, _startPosX.Value + 55, _startPosY.Value + 25, 13, 10); + g.FillRectangle(blueBr, _startPosX.Value + 71, _startPosY.Value + 25, 14, 10); + + //два передних окна + PointF[] window1 = { new PointF((float)_startPosX + 90, (float)_startPosY + 10), new PointF((float)_startPosX + 97, (float)_startPosY + 10), new PointF((float)_startPosX + 102, (float)_startPosY + 20), new PointF((float)_startPosX + 90, (float)_startPosY + 20) }; + PointF[] window2 = { new PointF((float)_startPosX + 90, (float)_startPosY + 25), new PointF((float)_startPosX + 105, (float)_startPosY + 25), new PointF((float)_startPosX + 105, (float)_startPosY + 40), new PointF((float)_startPosX + 90, (float)_startPosY + 35) }; + g.DrawPolygon(pen, window1); + g.DrawPolygon(pen, window2); + g.FillPolygon(blueBr, window1); + g.FillPolygon(blueBr, window2); + + //дверь + Brush brownBr = new SolidBrush(Color.Brown); + g.DrawRectangle(pen, _startPosX.Value + 35, _startPosY.Value + 25, 10, 15); + g.DrawRectangle(pen, _startPosX.Value + 35, _startPosY.Value + 40, 10, 5); + + g.FillRectangle(blueBr, _startPosX.Value + 35, _startPosY.Value + 25, 10, 15); + g.FillRectangle(brownBr, _startPosX.Value + 35, _startPosY.Value + 40, 10, 5); + + + //колёса + g.DrawEllipse(pen, _startPosX.Value + 11, _startPosY.Value + 37, 16, 16); + g.DrawEllipse(pen, _startPosX.Value + 83, _startPosY.Value + 37, 16, 16); + g.FillEllipse(brownBr, _startPosX.Value + 11, _startPosY.Value + 37, 16, 16); + g.FillEllipse(brownBr, _startPosX.Value + 83, _startPosY.Value + 37, 16, 16); + + //лестница + if (EntityDoubleDeckerBus.Stairs) + { + g.DrawLine(pen, new Point(_startPosX.Value + 1, _startPosY.Value + 45), new Point(_startPosX.Value + 1, _startPosY.Value + 3)); + + g.DrawLine(pen, new Point(_startPosX.Value + 1, _startPosY.Value + 45), new Point(_startPosX.Value + 5, _startPosY.Value + 43)); + g.DrawLine(pen, new Point(_startPosX.Value + 1, _startPosY.Value + 39), new Point(_startPosX.Value + 5, _startPosY.Value + 37)); + g.DrawLine(pen, new Point(_startPosX.Value + 1, _startPosY.Value + 31), new Point(_startPosX.Value + 5, _startPosY.Value + 29)); + g.DrawLine(pen, new Point(_startPosX.Value + 1, _startPosY.Value + 23), new Point(_startPosX.Value + 5, _startPosY.Value + 21)); + g.DrawLine(pen, new Point(_startPosX.Value + 1, _startPosY.Value + 15), new Point(_startPosX.Value + 5, _startPosY.Value + 13)); + g.DrawLine(pen, new Point(_startPosX.Value + 1, _startPosY.Value + 7), new Point(_startPosX.Value + 5, _startPosY.Value + 5)); + } + } } diff --git a/DoubleDeckerBus/DoubleDeckerBus/EntityDoubleDeckerBus.cs b/DoubleDeckerBus/DoubleDeckerBus/EntityDoubleDeckerBus.cs index 82a7bb4..6bab740 100644 --- a/DoubleDeckerBus/DoubleDeckerBus/EntityDoubleDeckerBus.cs +++ b/DoubleDeckerBus/DoubleDeckerBus/EntityDoubleDeckerBus.cs @@ -1,6 +1,4 @@ - - -namespace DoubleDeckerBus; +namespace DoubleDeckerBus; public class EntityDoubleDeckerBus { public int Speed { get; private set; } @@ -17,15 +15,19 @@ namespace DoubleDeckerBus; /// /// Признак (опция) наличия обвеса /// - public bool BodyKit { get; private set; } + public bool SideMirrors { get; private set; } /// /// Признак (опция) наличия антикрыла /// - public bool Wing { get; private set; } + public bool TopSection { get; private set; } /// /// Признак (опция) наличия гоночной полосы /// - public bool SportLine { get; private set; } + public bool Stripes { get; private set; } + /// + /// + /// + public bool Stairs { get; private set; } /// /// Шаг перемещения автомобиля /// @@ -37,17 +39,18 @@ namespace DoubleDeckerBus; /// /// /// - /// - /// - /// - public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool bodyKit, bool wing, bool sportLine) + /// + /// + /// + public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool sideMirrors, bool topSection, bool stripes, bool stairs) { Speed = speed; Weight = weight; BodyColor = bodyColor; AdditionalColor = additionalColor; - BodyKit = bodyKit; - Wing = wing; - SportLine = sportLine; + SideMirrors = sideMirrors; + TopSection = topSection; + Stripes = stripes; + Stairs = stairs; } } \ No newline at end of file diff --git a/DoubleDeckerBus/DoubleDeckerBus/FormDoubleDeckerBus.Designer.cs b/DoubleDeckerBus/DoubleDeckerBus/FormDoubleDeckerBus.Designer.cs index 7e773ee..752b2d6 100644 --- a/DoubleDeckerBus/DoubleDeckerBus/FormDoubleDeckerBus.Designer.cs +++ b/DoubleDeckerBus/DoubleDeckerBus/FormDoubleDeckerBus.Designer.cs @@ -28,12 +28,107 @@ /// private void InitializeComponent() { - this.components = new System.ComponentModel.Container(); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(800, 450); - this.Text = "FormDoubleDeckerBus"; + buttonCreateDoubleDeckerBus = new Button(); + pictureBoxDoubleDeckerBus = new PictureBox(); + buttonLeft = new Button(); + buttonUp = new Button(); + buttonDown = new Button(); + buttonRight = new Button(); + ((System.ComponentModel.ISupportInitialize)pictureBoxDoubleDeckerBus).BeginInit(); + SuspendLayout(); + // + // buttonCreateDoubleDeckerBus + // + buttonCreateDoubleDeckerBus.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + buttonCreateDoubleDeckerBus.Location = new Point(12, 415); + buttonCreateDoubleDeckerBus.Name = "buttonCreateDoubleDeckerBus"; + buttonCreateDoubleDeckerBus.Size = new Size(75, 23); + buttonCreateDoubleDeckerBus.TabIndex = 1; + buttonCreateDoubleDeckerBus.Text = "Create"; + buttonCreateDoubleDeckerBus.UseVisualStyleBackColor = true; + buttonCreateDoubleDeckerBus.Click += buttonCreateDoubleDeckerBus_Click; + // + // pictureBoxDoubleDeckerBus + // + pictureBoxDoubleDeckerBus.Dock = DockStyle.Fill; + pictureBoxDoubleDeckerBus.Location = new Point(0, 0); + pictureBoxDoubleDeckerBus.Name = "pictureBoxDoubleDeckerBus"; + pictureBoxDoubleDeckerBus.Size = new Size(800, 450); + pictureBoxDoubleDeckerBus.TabIndex = 2; + pictureBoxDoubleDeckerBus.TabStop = false; + // + // buttonLeft + // + buttonLeft.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonLeft.BackgroundImage = Properties.Resources.arrowleft; + buttonLeft.BackgroundImageLayout = ImageLayout.Stretch; + buttonLeft.Location = new Point(674, 403); + buttonLeft.Name = "buttonLeft"; + buttonLeft.Size = new Size(35, 35); + buttonLeft.TabIndex = 3; + buttonLeft.UseVisualStyleBackColor = true; + buttonLeft.Click += buttonMove_Click; + // + // buttonUp + // + buttonUp.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonUp.BackgroundImage = Properties.Resources.arrowup; + buttonUp.BackgroundImageLayout = ImageLayout.Stretch; + buttonUp.Location = new Point(715, 362); + buttonUp.Name = "buttonUp"; + buttonUp.Size = new Size(35, 35); + buttonUp.TabIndex = 4; + buttonUp.UseVisualStyleBackColor = true; + buttonUp.Click += buttonMove_Click; + // + // buttonDown + // + buttonDown.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonDown.BackgroundImage = Properties.Resources.arrowdown; + buttonDown.BackgroundImageLayout = ImageLayout.Stretch; + buttonDown.Location = new Point(715, 403); + buttonDown.Name = "buttonDown"; + buttonDown.Size = new Size(35, 35); + buttonDown.TabIndex = 5; + buttonDown.UseVisualStyleBackColor = true; + buttonDown.Click += buttonMove_Click; + // + // buttonRight + // + buttonRight.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonRight.BackgroundImage = Properties.Resources.arrowright; + buttonRight.BackgroundImageLayout = ImageLayout.Stretch; + buttonRight.Location = new Point(756, 403); + buttonRight.Name = "buttonRight"; + buttonRight.Size = new Size(35, 35); + buttonRight.TabIndex = 6; + buttonRight.UseVisualStyleBackColor = true; + buttonRight.Click += buttonMove_Click; + // + // FormDoubleDeckerBus + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(800, 450); + Controls.Add(buttonRight); + Controls.Add(buttonDown); + Controls.Add(buttonUp); + Controls.Add(buttonLeft); + Controls.Add(buttonCreateDoubleDeckerBus); + Controls.Add(pictureBoxDoubleDeckerBus); + Name = "FormDoubleDeckerBus"; + StartPosition = FormStartPosition.CenterScreen; + Text = "FormDoubleDeckerBus"; + ((System.ComponentModel.ISupportInitialize)pictureBoxDoubleDeckerBus).EndInit(); + ResumeLayout(false); } #endregion + private Button buttonCreateDoubleDeckerBus; + private PictureBox pictureBoxDoubleDeckerBus; + private Button buttonLeft; + private Button buttonUp; + private Button buttonDown; + private Button buttonRight; } } \ No newline at end of file diff --git a/DoubleDeckerBus/DoubleDeckerBus/FormDoubleDeckerBus.cs b/DoubleDeckerBus/DoubleDeckerBus/FormDoubleDeckerBus.cs index cea7f31..ef6511a 100644 --- a/DoubleDeckerBus/DoubleDeckerBus/FormDoubleDeckerBus.cs +++ b/DoubleDeckerBus/DoubleDeckerBus/FormDoubleDeckerBus.cs @@ -12,9 +12,76 @@ namespace DoubleDeckerBus { public partial class FormDoubleDeckerBus : Form { + private DrawingDoubleDeckerBus? _drawingDoubleDeckerBus; public FormDoubleDeckerBus() { InitializeComponent(); } + + private void Draw() + { + if (_drawingDoubleDeckerBus == null) + { + return; + } + + Bitmap bmp = new(pictureBoxDoubleDeckerBus.Width, pictureBoxDoubleDeckerBus.Height); + Graphics gr = Graphics.FromImage(bmp); + _drawingDoubleDeckerBus.DrawTrasnport(gr); + pictureBoxDoubleDeckerBus.Image = bmp; + } + + private void buttonCreateDoubleDeckerBus_Click(object sender, EventArgs e) + { + Random random = new(); + _drawingDoubleDeckerBus = new DrawingDoubleDeckerBus(); + _drawingDoubleDeckerBus.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)), Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2))); + _drawingDoubleDeckerBus.SetPictureSize(pictureBoxDoubleDeckerBus.Width, pictureBoxDoubleDeckerBus.Height); + _drawingDoubleDeckerBus.SetPosition(random.Next(10, 100), random.Next(10, 100)); + + Draw(); + + + + } + + private void buttonMove_Click(object sender, EventArgs e) + { + if (_drawingDoubleDeckerBus == null) + { + return; + } + + string name = ((Button)sender)?.Name ?? string.Empty; + bool result = false; + switch (name) + { + case "buttonLeft": + result = _drawingDoubleDeckerBus.MoveTransport(DirectionType.Left); + break; + + case "buttonRight": + result = _drawingDoubleDeckerBus.MoveTransport(DirectionType.Right); + break; + + case "buttonUp": + result = _drawingDoubleDeckerBus.MoveTransport(DirectionType.Up); + break; + + case "buttonDown": + result = _drawingDoubleDeckerBus.MoveTransport(DirectionType.Down); + break; + } + + if (result) + { + Draw(); + } + } + + } } diff --git a/DoubleDeckerBus/DoubleDeckerBus/FormDoubleDeckerBus.resx b/DoubleDeckerBus/DoubleDeckerBus/FormDoubleDeckerBus.resx index 1af7de1..af32865 100644 --- a/DoubleDeckerBus/DoubleDeckerBus/FormDoubleDeckerBus.resx +++ b/DoubleDeckerBus/DoubleDeckerBus/FormDoubleDeckerBus.resx @@ -1,17 +1,17 @@  - diff --git a/DoubleDeckerBus/DoubleDeckerBus/Properties/Resources.Designer.cs b/DoubleDeckerBus/DoubleDeckerBus/Properties/Resources.Designer.cs new file mode 100644 index 0000000..7d54747 --- /dev/null +++ b/DoubleDeckerBus/DoubleDeckerBus/Properties/Resources.Designer.cs @@ -0,0 +1,103 @@ +//------------------------------------------------------------------------------ +// +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 +// +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. +// +//------------------------------------------------------------------------------ + +namespace DoubleDeckerBus.Properties { + using System; + + + /// + /// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д. + /// + // Этот класс создан автоматически классом StronglyTypedResourceBuilder + // с помощью такого средства, как ResGen или Visual Studio. + // Чтобы добавить или удалить член, измените файл .ResX и снова запустите ResGen + // с параметром /str или перестройте свой проект VS. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("DoubleDeckerBus.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Перезаписывает свойство CurrentUICulture текущего потока для всех + /// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap arrowdown { + get { + object obj = ResourceManager.GetObject("arrowdown", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap arrowleft { + get { + object obj = ResourceManager.GetObject("arrowleft", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap arrowright { + get { + object obj = ResourceManager.GetObject("arrowright", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap arrowup { + get { + object obj = ResourceManager.GetObject("arrowup", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/DoubleDeckerBus/DoubleDeckerBus/Properties/Resources.resx b/DoubleDeckerBus/DoubleDeckerBus/Properties/Resources.resx new file mode 100644 index 0000000..7415012 --- /dev/null +++ b/DoubleDeckerBus/DoubleDeckerBus/Properties/Resources.resx @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\arrowdown.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\arrowleft.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\arrowright.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\arrowup.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/DoubleDeckerBus/DoubleDeckerBus/Resources/arrowdown.png b/DoubleDeckerBus/DoubleDeckerBus/Resources/arrowdown.png new file mode 100644 index 0000000000000000000000000000000000000000..53b123f759b9e29a384b9796e5eace41a6ea54af GIT binary patch literal 24260 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 C(8~M( literal 0 HcmV?d00001 diff --git a/DoubleDeckerBus/DoubleDeckerBus/Resources/arrowleft.png b/DoubleDeckerBus/DoubleDeckerBus/Resources/arrowleft.png new file mode 100644 index 0000000000000000000000000000000000000000..e0c5f06cc1fe996e70d55553c5b54c959e39ee2e GIT binary patch literal 22298 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 literal 0 HcmV?d00001 diff --git a/DoubleDeckerBus/DoubleDeckerBus/Resources/arrowright.png b/DoubleDeckerBus/DoubleDeckerBus/Resources/arrowright.png new file mode 100644 index 0000000000000000000000000000000000000000..bf5eaec2e4edcc4b3d9ac811ce8e5684c4e713c5 GIT binary patch literal 21998 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 QNgxB3vX@kR&HeuW0lmnwrvLx| literal 0 HcmV?d00001 diff --git a/DoubleDeckerBus/DoubleDeckerBus/Resources/arrowup.png b/DoubleDeckerBus/DoubleDeckerBus/Resources/arrowup.png new file mode 100644 index 0000000000000000000000000000000000000000..ae99fbe2c7c9601d05ad1947cca0909dce38c22e GIT binary patch literal 24100 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�-rr*}USQ$~wI;#e{1nvklkQA>4+qiV$p3j| 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 b#D||9ue{;1>b$4&%Z__ocVGXB^2`4N0WVo< literal 0 HcmV?d00001 -- 2.25.1 From 8d4d56e69293c075df84ddd09b081ac93b76e390 Mon Sep 17 00:00:00 2001 From: tyxz0 Date: Mon, 19 Feb 2024 09:23:43 +0400 Subject: [PATCH 3/5] =?UTF-8?q?=D0=BF=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=B2=20SetPosition?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DoubleDeckerBus/DoubleDeckerBus/DrawingDoubleDeckerBus.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/DoubleDeckerBus/DoubleDeckerBus/DrawingDoubleDeckerBus.cs b/DoubleDeckerBus/DoubleDeckerBus/DrawingDoubleDeckerBus.cs index 2897999..194b447 100644 --- a/DoubleDeckerBus/DoubleDeckerBus/DrawingDoubleDeckerBus.cs +++ b/DoubleDeckerBus/DoubleDeckerBus/DrawingDoubleDeckerBus.cs @@ -65,9 +65,12 @@ public class DrawingDoubleDeckerBus return; } - if (x < 0 || y < 0) + if (x < 0) { x = -x; + } + if (y < 0) + { y = -y; } -- 2.25.1 From 005c3818e20f2dcd98ef826628b0cd5a8cb4adc9 Mon Sep 17 00:00:00 2001 From: tyxz0 Date: Tue, 20 Feb 2024 08:10:37 +0400 Subject: [PATCH 4/5] =?UTF-8?q?-=D0=BB=D0=B8=D1=88=D0=BD=D0=B8=D0=B9=20els?= =?UTF-8?q?e=20+=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D1=8F=20=D1=81?= =?UTF-8?q?=D0=B2=D0=BE=D0=B9=D1=81=D1=82=D0=B2=20=D1=81=D1=83=D1=89=D0=BD?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DoubleDeckerBus/DrawingDoubleDeckerBus.cs | 44 ++++++++++--------- .../DoubleDeckerBus/EntityDoubleDeckerBus.cs | 10 ++--- .../DoubleDeckerBus/FormDoubleDeckerBus.cs | 2 - 3 files changed, 29 insertions(+), 27 deletions(-) diff --git a/DoubleDeckerBus/DoubleDeckerBus/DrawingDoubleDeckerBus.cs b/DoubleDeckerBus/DoubleDeckerBus/DrawingDoubleDeckerBus.cs index 194b447..960fe8b 100644 --- a/DoubleDeckerBus/DoubleDeckerBus/DrawingDoubleDeckerBus.cs +++ b/DoubleDeckerBus/DoubleDeckerBus/DrawingDoubleDeckerBus.cs @@ -39,25 +39,29 @@ public class DrawingDoubleDeckerBus { return false; } - else + + + _pictureWidth = width; + _pictureHeight = hight; + + if (_startPosX.HasValue && (_startPosX.Value + _DrawingBusWidth > _pictureWidth)) { - _pictureWidth = width; - _pictureHeight = hight; - - if (_startPosX.HasValue && (_startPosX.Value + _DrawingBusWidth > _pictureWidth)) - { - _startPosX = _pictureWidth - _DrawingBusWidth; - } - - if (_startPosY.HasValue && (_startPosY + _DrawingBusHight > _pictureHeight)) - { - _startPosY = _pictureHeight - _DrawingBusHight; - } - - return true; + _startPosX = _pictureWidth - _DrawingBusWidth; } - } + if (_startPosY.HasValue && (_startPosY + _DrawingBusHight > _pictureHeight)) + { + _startPosY = _pictureHeight - _DrawingBusHight; + } + + return true; + + } + /// + /// установить начальную позицию + /// + /// + /// public void SetPosition(int x, int y) { if (!_pictureHeight.HasValue || !_pictureWidth.HasValue) @@ -100,7 +104,7 @@ public class DrawingDoubleDeckerBus return false; } - switch(direction) + switch (direction) { case DirectionType.Left: if (_startPosX.Value - EntityDoubleDeckerBus.Step > 0) @@ -155,14 +159,14 @@ public class DrawingDoubleDeckerBus } //кузов - PointF[] bus = {new PointF((float)_startPosX + 5, (float)_startPosY + 5), new PointF((float)_startPosX + 5, (float)_startPosY + 45), new PointF((float)_startPosX+ 105, (float)_startPosY + 45), new PointF((float)_startPosX + 105, (float)_startPosY + 25), new PointF((float)_startPosX + 95, (float)_startPosY + 5)}; + PointF[] bus = { new PointF((float)_startPosX + 5, (float)_startPosY + 5), new PointF((float)_startPosX + 5, (float)_startPosY + 45), new PointF((float)_startPosX + 105, (float)_startPosY + 45), new PointF((float)_startPosX + 105, (float)_startPosY + 25), new PointF((float)_startPosX + 95, (float)_startPosY + 5) }; g.DrawPolygon(pen, bus); g.FillPolygon(mainBrush, bus); - + //вехний отсек if (EntityDoubleDeckerBus.TopSection) { - PointF[] section = { new PointF((float)_startPosX + 27, (float)_startPosY + 5), new PointF((float)_startPosX + 37, (float)_startPosY + 1), new PointF((float)_startPosX + 65, (float)_startPosY + 1), new PointF((float)_startPosX + 75, (float)_startPosY + 5)}; + PointF[] section = { new PointF((float)_startPosX + 27, (float)_startPosY + 5), new PointF((float)_startPosX + 37, (float)_startPosY + 1), new PointF((float)_startPosX + 65, (float)_startPosY + 1), new PointF((float)_startPosX + 75, (float)_startPosY + 5) }; g.DrawPolygon(pen, section); g.FillPolygon(additionalBrush, section); } diff --git a/DoubleDeckerBus/DoubleDeckerBus/EntityDoubleDeckerBus.cs b/DoubleDeckerBus/DoubleDeckerBus/EntityDoubleDeckerBus.cs index 6bab740..16150eb 100644 --- a/DoubleDeckerBus/DoubleDeckerBus/EntityDoubleDeckerBus.cs +++ b/DoubleDeckerBus/DoubleDeckerBus/EntityDoubleDeckerBus.cs @@ -13,23 +13,23 @@ /// public Color AdditionalColor { get; private set; } /// - /// Признак (опция) наличия обвеса + /// Признак (опция) наличия боковых зеркал /// public bool SideMirrors { get; private set; } /// - /// Признак (опция) наличия антикрыла + /// Признак (опция) наличия верхней панели /// public bool TopSection { get; private set; } /// - /// Признак (опция) наличия гоночной полосы + /// Признак (опция) наличия полосок на автобусе /// public bool Stripes { get; private set; } /// - /// + /// Признак (опция) наличия лестницы /// public bool Stairs { get; private set; } /// - /// Шаг перемещения автомобиля + /// Шаг перемещения автобуса /// public double Step => Speed * 100 / Weight; /// diff --git a/DoubleDeckerBus/DoubleDeckerBus/FormDoubleDeckerBus.cs b/DoubleDeckerBus/DoubleDeckerBus/FormDoubleDeckerBus.cs index ef6511a..49c6356 100644 --- a/DoubleDeckerBus/DoubleDeckerBus/FormDoubleDeckerBus.cs +++ b/DoubleDeckerBus/DoubleDeckerBus/FormDoubleDeckerBus.cs @@ -81,7 +81,5 @@ namespace DoubleDeckerBus Draw(); } } - - } } -- 2.25.1 From 21a467a473f91c975c7848830cf5ceabd5b48e2a Mon Sep 17 00:00:00 2001 From: tyxz0 Date: Thu, 29 Feb 2024 23:33:09 +0400 Subject: [PATCH 5/5] =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D0=B0=D0=BB=20=D0=BF=D0=BE=D0=BB=D1=8F-=D0=BE=D0=BF=D1=86?= =?UTF-8?q?=D0=B8=D0=B8=20=D1=81=D1=83=D1=89=D0=BD=D0=BE=D1=81=D1=82=D0=B8?= =?UTF-8?q?=20=D0=B8=20=D0=BF=D0=BE=D0=B4=D0=BE=D0=B3=D0=BD=D0=B0=D0=BB=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=B4=20=D1=8D=D1=82=D0=BE=20=D1=80=D0=B8=D1=81?= =?UTF-8?q?=D1=83=D0=BD=D0=BE=D0=BA=20=D0=B4=D0=BB=D1=8F=20=D1=83=D0=B4?= =?UTF-8?q?=D0=BE=D0=B1=D1=81=D1=82=D0=B2=D0=B0=20=D0=B2=20=D0=BB=D0=B0?= =?UTF-8?q?=D0=B1=D0=B5=202?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DoubleDeckerBus/DrawingDoubleDeckerBus.cs | 142 ++++++++++-------- .../DoubleDeckerBus/EntityDoubleDeckerBus.cs | 18 +-- .../DoubleDeckerBus/FormDoubleDeckerBus.cs | 2 +- 3 files changed, 86 insertions(+), 76 deletions(-) diff --git a/DoubleDeckerBus/DoubleDeckerBus/DrawingDoubleDeckerBus.cs b/DoubleDeckerBus/DoubleDeckerBus/DrawingDoubleDeckerBus.cs index 960fe8b..6d8f6ae 100644 --- a/DoubleDeckerBus/DoubleDeckerBus/DrawingDoubleDeckerBus.cs +++ b/DoubleDeckerBus/DoubleDeckerBus/DrawingDoubleDeckerBus.cs @@ -18,10 +18,10 @@ public class DrawingDoubleDeckerBus private readonly int _DrawingBusHight = 60; - public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool sideMirrors, bool topSection, bool stripes, bool stairs) + public void Init(int speed, double weight, Color bodyColor, Color additionalColor,bool secondFloor, bool stripes) { EntityDoubleDeckerBus = new EntityDoubleDeckerBus(); - EntityDoubleDeckerBus.Init(speed, weight, bodyColor, additionalColor, sideMirrors, topSection, stripes, stairs); + EntityDoubleDeckerBus.Init(speed, weight, bodyColor, additionalColor, secondFloor, stripes); _pictureWidth = null; _pictureHeight = null; _startPosX = null; @@ -144,32 +144,20 @@ public class DrawingDoubleDeckerBus return; } - Pen pen = new(Color.Black, 2); + Pen pen = new(Color.Black); Brush additionalBrush = new SolidBrush(EntityDoubleDeckerBus.AdditionalColor); Brush mainBrush = new SolidBrush(EntityDoubleDeckerBus.BodyColor); + Brush blueBr = new SolidBrush(Color.LightBlue); - //зеркала - if (EntityDoubleDeckerBus.SideMirrors) - { - g.DrawRectangle(pen, _startPosX.Value + 95, _startPosY.Value + 5, 20, 5); - g.DrawRectangle(pen, _startPosX.Value + 110, _startPosY.Value + 10, 5, 5); - g.FillRectangle(mainBrush, _startPosX.Value + 95, _startPosY.Value + 5, 20, 5); - g.FillRectangle(additionalBrush, _startPosX.Value + 110, _startPosY.Value + 10, 5, 5); - - } - - //кузов - PointF[] bus = { new PointF((float)_startPosX + 5, (float)_startPosY + 5), new PointF((float)_startPosX + 5, (float)_startPosY + 45), new PointF((float)_startPosX + 105, (float)_startPosY + 45), new PointF((float)_startPosX + 105, (float)_startPosY + 25), new PointF((float)_startPosX + 95, (float)_startPosY + 5) }; - g.DrawPolygon(pen, bus); + + //кузов 1го этажа + PointF[] bus = { new PointF((float)_startPosX + 5, (float)_startPosY + 20), + new PointF((float)_startPosX + 5, (float)_startPosY + 45), + new PointF((float)_startPosX + 105, (float)_startPosY + 45), + new PointF((float)_startPosX + 105, (float)_startPosY + 25), + new PointF((float)_startPosX + 102, (float)_startPosY + 20) }; g.FillPolygon(mainBrush, bus); - - //вехний отсек - if (EntityDoubleDeckerBus.TopSection) - { - PointF[] section = { new PointF((float)_startPosX + 27, (float)_startPosY + 5), new PointF((float)_startPosX + 37, (float)_startPosY + 1), new PointF((float)_startPosX + 65, (float)_startPosY + 1), new PointF((float)_startPosX + 75, (float)_startPosY + 5) }; - g.DrawPolygon(pen, section); - g.FillPolygon(additionalBrush, section); - } + g.DrawPolygon(pen, bus); //полоски if (EntityDoubleDeckerBus.Stripes) @@ -179,63 +167,95 @@ public class DrawingDoubleDeckerBus g.FillPolygon(additionalBrush, stripe); } - //окна 2ой этаж - Brush blueBr = new SolidBrush(Color.LightBlue); - g.DrawRectangle(pen, _startPosX.Value + 7, _startPosY.Value + 10, 12, 10); - g.DrawRectangle(pen, _startPosX.Value + 21, _startPosY.Value + 10, 12, 10); - g.DrawRectangle(pen, _startPosX.Value + 35, _startPosY.Value + 10, 10, 10); - g.DrawRectangle(pen, _startPosX.Value + 47, _startPosY.Value + 10, 6, 10); - g.DrawRectangle(pen, _startPosX.Value + 55, _startPosY.Value + 10, 13, 10); - g.DrawRectangle(pen, _startPosX.Value + 71, _startPosY.Value + 10, 14, 10); - - g.FillRectangle(blueBr, _startPosX.Value + 7, _startPosY.Value + 10, 12, 10); - g.FillRectangle(blueBr, _startPosX.Value + 21, _startPosY.Value + 10, 12, 10); - g.FillRectangle(blueBr, _startPosX.Value + 35, _startPosY.Value + 10, 10, 10); - g.FillRectangle(blueBr, _startPosX.Value + 47, _startPosY.Value + 10, 6, 10); - g.FillRectangle(blueBr, _startPosX.Value + 55, _startPosY.Value + 10, 13, 10); - g.FillRectangle(blueBr, _startPosX.Value + 71, _startPosY.Value + 10, 14, 10); - + //окна 1ый этаж - g.DrawRectangle(pen, _startPosX.Value + 7, _startPosY.Value + 25, 12, 10); - g.DrawRectangle(pen, _startPosX.Value + 21, _startPosY.Value + 25, 12, 10); - g.DrawRectangle(pen, _startPosX.Value + 47, _startPosY.Value + 25, 6, 10); - g.DrawRectangle(pen, _startPosX.Value + 55, _startPosY.Value + 25, 13, 10); - g.DrawRectangle(pen, _startPosX.Value + 71, _startPosY.Value + 25, 14, 10); - g.FillRectangle(blueBr, _startPosX.Value + 7, _startPosY.Value + 25, 12, 10); g.FillRectangle(blueBr, _startPosX.Value + 21, _startPosY.Value + 25, 12, 10); g.FillRectangle(blueBr, _startPosX.Value + 47, _startPosY.Value + 25, 6, 10); g.FillRectangle(blueBr, _startPosX.Value + 55, _startPosY.Value + 25, 13, 10); g.FillRectangle(blueBr, _startPosX.Value + 71, _startPosY.Value + 25, 14, 10); - //два передних окна - PointF[] window1 = { new PointF((float)_startPosX + 90, (float)_startPosY + 10), new PointF((float)_startPosX + 97, (float)_startPosY + 10), new PointF((float)_startPosX + 102, (float)_startPosY + 20), new PointF((float)_startPosX + 90, (float)_startPosY + 20) }; - PointF[] window2 = { new PointF((float)_startPosX + 90, (float)_startPosY + 25), new PointF((float)_startPosX + 105, (float)_startPosY + 25), new PointF((float)_startPosX + 105, (float)_startPosY + 40), new PointF((float)_startPosX + 90, (float)_startPosY + 35) }; - g.DrawPolygon(pen, window1); - g.DrawPolygon(pen, window2); - g.FillPolygon(blueBr, window1); + g.DrawRectangle(pen, _startPosX.Value + 7, _startPosY.Value + 25, 12, 10); + g.DrawRectangle(pen, _startPosX.Value + 21, _startPosY.Value + 25, 12, 10); + g.DrawRectangle(pen, _startPosX.Value + 47, _startPosY.Value + 25, 6, 10); + g.DrawRectangle(pen, _startPosX.Value + 55, _startPosY.Value + 25, 13, 10); + g.DrawRectangle(pen, _startPosX.Value + 71, _startPosY.Value + 25, 14, 10); + + //переднее окно первый этаж + PointF[] window2 = { new PointF((float)_startPosX + 90, (float)_startPosY + 25), + new PointF((float)_startPosX + 105, (float)_startPosY + 25), + new PointF((float)_startPosX + 105, (float)_startPosY + 40), + new PointF((float)_startPosX + 90, (float)_startPosY + 35) }; g.FillPolygon(blueBr, window2); + g.DrawPolygon(pen, window2); //дверь Brush brownBr = new SolidBrush(Color.Brown); - g.DrawRectangle(pen, _startPosX.Value + 35, _startPosY.Value + 25, 10, 15); - g.DrawRectangle(pen, _startPosX.Value + 35, _startPosY.Value + 40, 10, 5); - g.FillRectangle(blueBr, _startPosX.Value + 35, _startPosY.Value + 25, 10, 15); g.FillRectangle(brownBr, _startPosX.Value + 35, _startPosY.Value + 40, 10, 5); + g.DrawRectangle(pen, _startPosX.Value + 35, _startPosY.Value + 25, 10, 15); + g.DrawRectangle(pen, _startPosX.Value + 35, _startPosY.Value + 40, 10, 5); //колёса - g.DrawEllipse(pen, _startPosX.Value + 11, _startPosY.Value + 37, 16, 16); - g.DrawEllipse(pen, _startPosX.Value + 83, _startPosY.Value + 37, 16, 16); g.FillEllipse(brownBr, _startPosX.Value + 11, _startPosY.Value + 37, 16, 16); g.FillEllipse(brownBr, _startPosX.Value + 83, _startPosY.Value + 37, 16, 16); - //лестница - if (EntityDoubleDeckerBus.Stairs) - { - g.DrawLine(pen, new Point(_startPosX.Value + 1, _startPosY.Value + 45), new Point(_startPosX.Value + 1, _startPosY.Value + 3)); + g.DrawEllipse(pen, _startPosX.Value + 11, _startPosY.Value + 37, 16, 16); + g.DrawEllipse(pen, _startPosX.Value + 83, _startPosY.Value + 37, 16, 16); + //второй этаж с всякими зафуфрючками + if (EntityDoubleDeckerBus.SecondFloor) + { + //верх кузова + PointF[] bus_second_floor = { new PointF((float)_startPosX + 5, (float)_startPosY + 5), + new PointF((float)_startPosX + 5, (float)_startPosY + 20), + new PointF((float)_startPosX + 102, (float)_startPosY + 20), + new PointF((float)_startPosX + 95, (float)_startPosY + 5)}; + g.FillPolygon(mainBrush, bus_second_floor); + g.DrawPolygon(pen, bus_second_floor); + + //окна 2ой этаж + + g.FillRectangle(blueBr, _startPosX.Value + 7, _startPosY.Value + 10, 12, 10); + g.FillRectangle(blueBr, _startPosX.Value + 21, _startPosY.Value + 10, 12, 10); + g.FillRectangle(blueBr, _startPosX.Value + 35, _startPosY.Value + 10, 10, 10); + g.FillRectangle(blueBr, _startPosX.Value + 47, _startPosY.Value + 10, 6, 10); + g.FillRectangle(blueBr, _startPosX.Value + 55, _startPosY.Value + 10, 13, 10); + g.FillRectangle(blueBr, _startPosX.Value + 71, _startPosY.Value + 10, 14, 10); + + g.DrawRectangle(pen, _startPosX.Value + 7, _startPosY.Value + 10, 12, 10); + g.DrawRectangle(pen, _startPosX.Value + 21, _startPosY.Value + 10, 12, 10); + g.DrawRectangle(pen, _startPosX.Value + 35, _startPosY.Value + 10, 10, 10); + g.DrawRectangle(pen, _startPosX.Value + 47, _startPosY.Value + 10, 6, 10); + g.DrawRectangle(pen, _startPosX.Value + 55, _startPosY.Value + 10, 13, 10); + g.DrawRectangle(pen, _startPosX.Value + 71, _startPosY.Value + 10, 14, 10); + + //верхний отсек + PointF[] section = { new PointF((float)_startPosX + 27, (float)_startPosY + 5), + new PointF((float)_startPosX + 37, (float)_startPosY + 1), + new PointF((float)_startPosX + 65, (float)_startPosY + 1), + new PointF((float)_startPosX + 75, (float)_startPosY + 5) }; + g.FillPolygon(additionalBrush, section); + g.DrawPolygon(pen, section); + + //переднее окно 2ой этаж + PointF[] window1 = { new PointF((float)_startPosX + 90, (float)_startPosY + 10), + new PointF((float)_startPosX + 97, (float)_startPosY + 10), + new PointF((float)_startPosX + 102, (float)_startPosY + 20), + new PointF((float)_startPosX + 90, (float)_startPosY + 20) }; + g.FillPolygon(blueBr, window1); + g.DrawPolygon(pen, window1); + + //зеркала + g.FillRectangle(mainBrush, _startPosX.Value + 95, _startPosY.Value + 5, 20, 5); + g.FillRectangle(additionalBrush, _startPosX.Value + 110, _startPosY.Value + 10, 5, 5); + + g.DrawRectangle(pen, _startPosX.Value + 95, _startPosY.Value + 5, 20, 5); + g.DrawRectangle(pen, _startPosX.Value + 110, _startPosY.Value + 10, 5, 5); + + //лестница + g.DrawLine(pen, new Point(_startPosX.Value + 1, _startPosY.Value + 45), new Point(_startPosX.Value + 1, _startPosY.Value + 3)); g.DrawLine(pen, new Point(_startPosX.Value + 1, _startPosY.Value + 45), new Point(_startPosX.Value + 5, _startPosY.Value + 43)); g.DrawLine(pen, new Point(_startPosX.Value + 1, _startPosY.Value + 39), new Point(_startPosX.Value + 5, _startPosY.Value + 37)); g.DrawLine(pen, new Point(_startPosX.Value + 1, _startPosY.Value + 31), new Point(_startPosX.Value + 5, _startPosY.Value + 29)); diff --git a/DoubleDeckerBus/DoubleDeckerBus/EntityDoubleDeckerBus.cs b/DoubleDeckerBus/DoubleDeckerBus/EntityDoubleDeckerBus.cs index 16150eb..bdfa702 100644 --- a/DoubleDeckerBus/DoubleDeckerBus/EntityDoubleDeckerBus.cs +++ b/DoubleDeckerBus/DoubleDeckerBus/EntityDoubleDeckerBus.cs @@ -13,22 +13,14 @@ /// public Color AdditionalColor { get; private set; } /// - /// Признак (опция) наличия боковых зеркал + /// Признак (опция) наличия второго этажа /// - public bool SideMirrors { get; private set; } - /// - /// Признак (опция) наличия верхней панели - /// - public bool TopSection { get; private set; } + public bool SecondFloor { get; private set; } /// /// Признак (опция) наличия полосок на автобусе /// public bool Stripes { get; private set; } /// - /// Признак (опция) наличия лестницы - /// - public bool Stairs { get; private set; } - /// /// Шаг перемещения автобуса /// public double Step => Speed * 100 / Weight; @@ -42,15 +34,13 @@ /// /// /// - public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool sideMirrors, bool topSection, bool stripes, bool stairs) + public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool secondFloor, bool stripes) { Speed = speed; Weight = weight; BodyColor = bodyColor; AdditionalColor = additionalColor; - SideMirrors = sideMirrors; - TopSection = topSection; + SecondFloor = secondFloor; Stripes = stripes; - Stairs = stairs; } } \ No newline at end of file diff --git a/DoubleDeckerBus/DoubleDeckerBus/FormDoubleDeckerBus.cs b/DoubleDeckerBus/DoubleDeckerBus/FormDoubleDeckerBus.cs index 49c6356..e44a6c5 100644 --- a/DoubleDeckerBus/DoubleDeckerBus/FormDoubleDeckerBus.cs +++ b/DoubleDeckerBus/DoubleDeckerBus/FormDoubleDeckerBus.cs @@ -38,7 +38,7 @@ namespace DoubleDeckerBus _drawingDoubleDeckerBus.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)), Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2))); + Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2))); _drawingDoubleDeckerBus.SetPictureSize(pictureBoxDoubleDeckerBus.Width, pictureBoxDoubleDeckerBus.Height); _drawingDoubleDeckerBus.SetPosition(random.Next(10, 100), random.Next(10, 100)); -- 2.25.1