diff --git a/PIbd-22_Kalyshev_Y_V_MotorBoat_Base.git/DrawningBoat.cs b/PIbd-22_Kalyshev_Y_V_MotorBoat_Base.git/DrawningBoat.cs index dbaba21..331603a 100644 --- a/PIbd-22_Kalyshev_Y_V_MotorBoat_Base.git/DrawningBoat.cs +++ b/PIbd-22_Kalyshev_Y_V_MotorBoat_Base.git/DrawningBoat.cs @@ -11,15 +11,15 @@ namespace PIbd_22_Kalyshev_Y_V_MotorBoat_Base /// /// Класс-сущность /// - public EntityBoat Boat { private set; get; } + public EntityBoat Boat { protected set; get; } /// /// Левая координата отрисовки автомобиля /// - private float _startPosX; + protected float _startPosX; /// /// Верхняя кооридната отрисовки автомобиля /// - private float _startPosY; + protected float _startPosY; /// /// Ширина окна отрисовки /// @@ -47,6 +47,21 @@ namespace PIbd_22_Kalyshev_Y_V_MotorBoat_Base Boat = new EntityBoat(speed, weight, bodyColor); } /// + /// Инициализация свойств + /// + /// Скорость + /// Вес автомобиля + /// Цвет кузова + /// Ширина отрисовки автомобиля + /// Высота отрисовки автомобиля + protected DrawningBoat(int speed, float weight, Color bodyColor, int boatWidth, int boatHeight) : + this(speed, weight, bodyColor) + { + _boatWidth = boatWidth; + _boatHeight = boatHeight; + } + /// + /// /// Установка позиции автомобиля /// /// Координата X @@ -109,7 +124,7 @@ namespace PIbd_22_Kalyshev_Y_V_MotorBoat_Base /// Отрисовка лодки /// /// - public void DrawTransport(Graphics g) + public virtual void DrawTransport(Graphics g) { if (_startPosX < 0 || _startPosY < 0 || !_pictureHeight.HasValue || !_pictureWidth.HasValue) @@ -118,7 +133,6 @@ namespace PIbd_22_Kalyshev_Y_V_MotorBoat_Base } Pen pen = new(Color.Black, 3); Brush br = new SolidBrush(Boat?.BodyColor ?? Color.Black); - Brush brBrown = new SolidBrush(Color.Brown); // Внешняя часть лодки g.DrawLine(pen, _startPosX, _startPosY, _startPosX + 120, _startPosY + 0); g.DrawLine(pen, _startPosX + 120, _startPosY, _startPosX + 170, _startPosY + 30); @@ -132,7 +146,7 @@ namespace PIbd_22_Kalyshev_Y_V_MotorBoat_Base PointF pt5 = new PointF(_startPosX, _startPosY + 60); g.FillPolygon(br, new PointF[] { pt1, pt2, pt3, pt4, pt5}); // Внутренняя часть лодки - g.FillEllipse(brBrown, _startPosX + 10, _startPosY + 10, 110, 40); + g.FillEllipse(new SolidBrush(Color.Brown), _startPosX + 10, _startPosY + 10, 110, 40); } /// /// Смена границ формы отрисовки @@ -158,5 +172,9 @@ namespace PIbd_22_Kalyshev_Y_V_MotorBoat_Base _startPosY = _pictureHeight.Value - _boatHeight; } } + public (float Left, float Right, float Top, float Bottom) GetCurrentPosition() + { + return (_startPosX, _startPosY, _startPosX + _boatWidth, _startPosY + _boatHeight); + } } } diff --git a/PIbd-22_Kalyshev_Y_V_MotorBoat_Base.git/DrawningObjectBoat.cs b/PIbd-22_Kalyshev_Y_V_MotorBoat_Base.git/DrawningObjectBoat.cs new file mode 100644 index 0000000..54f6375 --- /dev/null +++ b/PIbd-22_Kalyshev_Y_V_MotorBoat_Base.git/DrawningObjectBoat.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace PIbd_22_Kalyshev_Y_V_MotorBoat_Base +{ + internal class DrawningObjectBoat : IDrawningObject + { + private DrawningBoat _boat = null; + public DrawningObjectBoat(DrawningBoat boat) + { + _boat = boat; + } + public float Step => _boat?.Boat?.Step ?? 0; + + public void DrawningObject(Graphics g) + { + // TODO + } + + public (float Left, float Right, float Top, float Bottom) GetCurrentPosition() + { + return _boat?.GetCurrentPosition() ?? default; + } + + public void MoveObject(Direction direction) + { + _boat.MoveTransport(direction); + } + + public void SetObject(int x, int y, int width, int height) + { + _boat.SetPosition(x, y, width, height); + } + } +} diff --git a/PIbd-22_Kalyshev_Y_V_MotorBoat_Base.git/DrawningSportBoat.cs b/PIbd-22_Kalyshev_Y_V_MotorBoat_Base.git/DrawningSportBoat.cs new file mode 100644 index 0000000..b610506 --- /dev/null +++ b/PIbd-22_Kalyshev_Y_V_MotorBoat_Base.git/DrawningSportBoat.cs @@ -0,0 +1,72 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace PIbd_22_Kalyshev_Y_V_MotorBoat_Base +{ + internal class DrawningSportBoat : DrawningBoat + { + /// + /// Инициализация свойств + /// + /// Скорость + /// Вес автомобиля + /// Цвет кузова + /// Дополнительный цвет + /// Признак наличия обвеса + /// Признак наличия антикрыла + /// Признак наличия гоночной полосы + public DrawningSportBoat(int speed, float weight, Color bodyColor, Color dopColor, bool bodyKit, bool wing, bool sportLine) : + base(speed, weight, bodyColor, 195, 60) + { + Boat = new EntitySportBoat(speed, weight, bodyColor, dopColor, bodyKit, wing, sportLine); + } + public override void DrawTransport(Graphics g) + { + if (Boat is not EntitySportBoat sportBoat) + { + return; + } + Pen pen = new(Color.Black); + Brush baseBrush = new SolidBrush(sportBoat?.BodyColor ?? Color.Black); + Brush dopBrush = new SolidBrush(sportBoat?.DopColor ?? Color.Black); + _startPosX += 25; + _startPosY += 10; + base.DrawTransport(g); + _startPosX -= 25; + _startPosY -= 10; + if (sportBoat.Wing) + { + g.FillRectangle(dopBrush, _startPosX, _startPosY, 20, 80); + g.DrawRectangle(pen, _startPosX, _startPosY, 20, 80); + g.FillRectangle(baseBrush, _startPosX + 20, _startPosY + 20, 10, 40); + g.DrawRectangle(pen, _startPosX + 20, _startPosY + 20, 10, 40); + } + _startPosX += 25; + _startPosY += 10; + if (sportBoat.BodyKit) + { + PointF pt1 = new PointF(_startPosX + 120, _startPosY + 10); + PointF pt2 = new PointF(_startPosX + 155, _startPosY + 30); + PointF pt3 = new PointF(_startPosX + 120, _startPosY + 50); + PointF pt4 = new PointF(_startPosX + 120, _startPosY + 45); + PointF pt5 = new PointF(_startPosX + 145, _startPosY + 30); + PointF pt6 = new PointF(_startPosX + 120, _startPosY + 15); + g.FillPolygon(dopBrush, new PointF[] { pt1, pt2, pt3, pt4, pt5, pt6 }); + } + if (sportBoat.SportLine) + { + PointF pt1 = new PointF(_startPosX + 70, _startPosY); + PointF pt2 = new PointF(_startPosX + 80, _startPosY); + PointF pt3 = new PointF(_startPosX + 120, _startPosY + 60); + PointF pt4 = new PointF(_startPosX + 110, _startPosY + 60); + g.FillPolygon(dopBrush, new PointF[] { pt1, pt2, pt3, pt4 }); + g.FillEllipse(new SolidBrush(Color.Brown), _startPosX + 10, _startPosY + 10, 110, 40); + } + _startPosX -= 25; + _startPosY -= 10; + } + } +} diff --git a/PIbd-22_Kalyshev_Y_V_MotorBoat_Base.git/EntitySportBoat.cs b/PIbd-22_Kalyshev_Y_V_MotorBoat_Base.git/EntitySportBoat.cs new file mode 100644 index 0000000..3d48c1c --- /dev/null +++ b/PIbd-22_Kalyshev_Y_V_MotorBoat_Base.git/EntitySportBoat.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace PIbd_22_Kalyshev_Y_V_MotorBoat_Base +{ + internal class EntitySportBoat : EntityBoat + { + /// + /// Дополнительный цвет + /// + public Color DopColor { get; private set; } + /// + /// Признак наличия обвеса + /// + public bool BodyKit { get; private set; } + /// + /// Признак наличия антикрыла + /// + public bool Wing { get; private set; } + /// + /// Признак наличия гоночной полосы + /// + public bool SportLine { get; private set; } + /// + /// Инициализация свойств + /// + /// Скорость + /// Вес автомобиля + /// Цвет кузова + /// Дополнительный цвет + /// Признак наличия обвеса + /// Признак наличия антикрыла + /// Признак наличия гоночной полосы + public EntitySportBoat(int speed, float weight, Color bodyColor, Color dopColor, bool bodyKit, bool wing, bool sportLine) : + base(speed, weight, bodyColor) + { + DopColor = dopColor; + BodyKit = bodyKit; + Wing = wing; + SportLine = sportLine; + } + } +} diff --git a/PIbd-22_Kalyshev_Y_V_MotorBoat_Base.git/FormBoat.Designer.cs b/PIbd-22_Kalyshev_Y_V_MotorBoat_Base.git/FormBoat.Designer.cs index 39b526d..3b3e808 100644 --- a/PIbd-22_Kalyshev_Y_V_MotorBoat_Base.git/FormBoat.Designer.cs +++ b/PIbd-22_Kalyshev_Y_V_MotorBoat_Base.git/FormBoat.Designer.cs @@ -38,6 +38,7 @@ this.buttonLeft = new System.Windows.Forms.Button(); this.buttonUp = new System.Windows.Forms.Button(); this.buttonDown = new System.Windows.Forms.Button(); + this.buttonCreateModif = new System.Windows.Forms.Button(); this.statusStrip1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.pictureBoxBoat)).BeginInit(); this.SuspendLayout(); @@ -49,28 +50,29 @@ this.toolStripStatusLabelSpeed, this.toolStripStatusLabelWeight, this.toolStripStatusLabelBodyColor}); - this.statusStrip1.Location = new System.Drawing.Point(0, 427); + this.statusStrip1.Location = new System.Drawing.Point(0, 318); this.statusStrip1.Name = "statusStrip1"; - this.statusStrip1.Size = new System.Drawing.Size(882, 26); + this.statusStrip1.Padding = new System.Windows.Forms.Padding(1, 0, 12, 0); + this.statusStrip1.Size = new System.Drawing.Size(772, 22); this.statusStrip1.TabIndex = 0; this.statusStrip1.Text = "statusStrip1"; // // toolStripStatusLabelSpeed // this.toolStripStatusLabelSpeed.Name = "toolStripStatusLabelSpeed"; - this.toolStripStatusLabelSpeed.Size = new System.Drawing.Size(76, 20); + this.toolStripStatusLabelSpeed.Size = new System.Drawing.Size(62, 17); this.toolStripStatusLabelSpeed.Text = "Скорость:"; // // toolStripStatusLabelWeight // this.toolStripStatusLabelWeight.Name = "toolStripStatusLabelWeight"; - this.toolStripStatusLabelWeight.Size = new System.Drawing.Size(36, 20); + this.toolStripStatusLabelWeight.Size = new System.Drawing.Size(29, 17); this.toolStripStatusLabelWeight.Text = "Вес:"; // // toolStripStatusLabelBodyColor // this.toolStripStatusLabelBodyColor.Name = "toolStripStatusLabelBodyColor"; - this.toolStripStatusLabelBodyColor.Size = new System.Drawing.Size(45, 20); + this.toolStripStatusLabelBodyColor.Size = new System.Drawing.Size(36, 17); this.toolStripStatusLabelBodyColor.Text = "Цвет:"; // // pictureBoxBoat @@ -78,8 +80,9 @@ this.pictureBoxBoat.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None; this.pictureBoxBoat.Dock = System.Windows.Forms.DockStyle.Fill; this.pictureBoxBoat.Location = new System.Drawing.Point(0, 0); + this.pictureBoxBoat.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.pictureBoxBoat.Name = "pictureBoxBoat"; - this.pictureBoxBoat.Size = new System.Drawing.Size(882, 427); + this.pictureBoxBoat.Size = new System.Drawing.Size(772, 318); this.pictureBoxBoat.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; this.pictureBoxBoat.TabIndex = 1; this.pictureBoxBoat.TabStop = false; @@ -89,9 +92,10 @@ // buttonCreate // this.buttonCreate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.buttonCreate.Location = new System.Drawing.Point(12, 385); + this.buttonCreate.Location = new System.Drawing.Point(10, 289); + this.buttonCreate.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.buttonCreate.Name = "buttonCreate"; - this.buttonCreate.Size = new System.Drawing.Size(94, 29); + this.buttonCreate.Size = new System.Drawing.Size(82, 22); this.buttonCreate.TabIndex = 2; this.buttonCreate.Text = "Создать"; this.buttonCreate.UseVisualStyleBackColor = true; @@ -102,9 +106,10 @@ this.buttonRight.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.buttonRight.BackgroundImage = global::PIbd_22_Kalyshev_Y_V_MotorBoat_Base.Properties.Resources.right; this.buttonRight.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; - this.buttonRight.Location = new System.Drawing.Point(820, 374); + this.buttonRight.Location = new System.Drawing.Point(718, 280); + this.buttonRight.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.buttonRight.Name = "buttonRight"; - this.buttonRight.Size = new System.Drawing.Size(40, 40); + this.buttonRight.Size = new System.Drawing.Size(35, 30); this.buttonRight.TabIndex = 3; this.buttonRight.UseVisualStyleBackColor = true; this.buttonRight.Click += new System.EventHandler(this.ButtonMove_Click); @@ -114,9 +119,10 @@ this.buttonLeft.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.buttonLeft.BackgroundImage = global::PIbd_22_Kalyshev_Y_V_MotorBoat_Base.Properties.Resources.left; this.buttonLeft.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; - this.buttonLeft.Location = new System.Drawing.Point(728, 374); + this.buttonLeft.Location = new System.Drawing.Point(637, 280); + this.buttonLeft.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.buttonLeft.Name = "buttonLeft"; - this.buttonLeft.Size = new System.Drawing.Size(40, 40); + this.buttonLeft.Size = new System.Drawing.Size(35, 30); this.buttonLeft.TabIndex = 4; this.buttonLeft.UseVisualStyleBackColor = true; this.buttonLeft.Click += new System.EventHandler(this.ButtonMove_Click); @@ -126,9 +132,10 @@ this.buttonUp.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.buttonUp.BackgroundImage = global::PIbd_22_Kalyshev_Y_V_MotorBoat_Base.Properties.Resources.up; this.buttonUp.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; - this.buttonUp.Location = new System.Drawing.Point(774, 328); + this.buttonUp.Location = new System.Drawing.Point(677, 246); + this.buttonUp.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.buttonUp.Name = "buttonUp"; - this.buttonUp.Size = new System.Drawing.Size(40, 40); + this.buttonUp.Size = new System.Drawing.Size(35, 30); this.buttonUp.TabIndex = 5; this.buttonUp.UseVisualStyleBackColor = true; this.buttonUp.Click += new System.EventHandler(this.ButtonMove_Click); @@ -138,18 +145,31 @@ this.buttonDown.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.buttonDown.BackgroundImage = global::PIbd_22_Kalyshev_Y_V_MotorBoat_Base.Properties.Resources.down; this.buttonDown.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; - this.buttonDown.Location = new System.Drawing.Point(774, 374); + this.buttonDown.Location = new System.Drawing.Point(677, 280); + this.buttonDown.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.buttonDown.Name = "buttonDown"; - this.buttonDown.Size = new System.Drawing.Size(40, 40); + this.buttonDown.Size = new System.Drawing.Size(35, 30); this.buttonDown.TabIndex = 6; this.buttonDown.UseVisualStyleBackColor = true; this.buttonDown.Click += new System.EventHandler(this.ButtonMove_Click); // + // buttonCreateModif + // + this.buttonCreateModif.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.buttonCreateModif.Location = new System.Drawing.Point(98, 289); + this.buttonCreateModif.Name = "buttonCreateModif"; + this.buttonCreateModif.Size = new System.Drawing.Size(99, 22); + this.buttonCreateModif.TabIndex = 7; + this.buttonCreateModif.Text = "Модификация"; + this.buttonCreateModif.UseVisualStyleBackColor = true; + this.buttonCreateModif.Click += new System.EventHandler(this.buttonCreateModif_Click); + // // FormBoat // - this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F); + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(882, 453); + this.ClientSize = new System.Drawing.Size(772, 340); + this.Controls.Add(this.buttonCreateModif); this.Controls.Add(this.buttonDown); this.Controls.Add(this.buttonUp); this.Controls.Add(this.buttonLeft); @@ -157,6 +177,7 @@ this.Controls.Add(this.buttonCreate); this.Controls.Add(this.pictureBoxBoat); this.Controls.Add(this.statusStrip1); + this.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.Name = "FormBoat"; this.Text = "Лодка"; this.statusStrip1.ResumeLayout(false); @@ -179,5 +200,6 @@ private Button buttonLeft; private Button buttonUp; private Button buttonDown; + private Button buttonCreateModif; } } \ No newline at end of file diff --git a/PIbd-22_Kalyshev_Y_V_MotorBoat_Base.git/FormBoat.cs b/PIbd-22_Kalyshev_Y_V_MotorBoat_Base.git/FormBoat.cs index 12c9297..ef721fe 100644 --- a/PIbd-22_Kalyshev_Y_V_MotorBoat_Base.git/FormBoat.cs +++ b/PIbd-22_Kalyshev_Y_V_MotorBoat_Base.git/FormBoat.cs @@ -18,6 +18,17 @@ namespace PIbd_22_Kalyshev_Y_V_MotorBoat_Base.git _boat?.DrawTransport(gr); pictureBoxBoat.Image = bmp; } + /// + /// + /// + private void SetData() + { + Random rnd = new Random(); + _boat.SetPosition(rnd.Next(10, 100), rnd.Next(10, 100), pictureBoxBoat.Width, pictureBoxBoat.Height); + toolStripStatusLabelSpeed.Text = $": {_boat.Boat.Speed}"; + toolStripStatusLabelWeight.Text = $": {_boat.Boat.Weight}"; + toolStripStatusLabelBodyColor.Text = $": {_boat.Boat.BodyColor.Name}"; + } /// /// "" /// @@ -27,10 +38,7 @@ namespace PIbd_22_Kalyshev_Y_V_MotorBoat_Base.git { Random rnd = new(); _boat = new DrawningBoat(rnd.Next(5, 30), rnd.Next(30, 100), Color.FromArgb(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256))); - _boat.SetPosition(rnd.Next(10, 100), rnd.Next(10, 100), pictureBoxBoat.Width, pictureBoxBoat.Height); - toolStripStatusLabelSpeed.Text = $": {_boat.Boat.Speed}"; - toolStripStatusLabelWeight.Text = $": {_boat.Boat.Weight}"; - toolStripStatusLabelBodyColor.Text = $": {_boat.Boat.BodyColor.Name}"; + SetData(); Draw(); } /// @@ -69,5 +77,18 @@ namespace PIbd_22_Kalyshev_Y_V_MotorBoat_Base.git _boat?.ChangeBorders(pictureBoxBoat.Width, pictureBoxBoat.Height); Draw(); } + /// + /// "" + /// + /// + /// + private void buttonCreateModif_Click(object sender, EventArgs e) + { + Random rnd = new(); + _boat = new DrawningSportBoat(rnd.Next(5, 30), rnd.Next(30, 100), Color.FromArgb(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256)), Color.FromArgb(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256)), Convert.ToBoolean(rnd.Next(0, 2)), Convert.ToBoolean(rnd.Next(0, 2)), Convert.ToBoolean(rnd.Next(0, 2))); + + SetData(); + Draw(); + } } } \ No newline at end of file diff --git a/PIbd-22_Kalyshev_Y_V_MotorBoat_Base.git/IDrawningObject.cs b/PIbd-22_Kalyshev_Y_V_MotorBoat_Base.git/IDrawningObject.cs new file mode 100644 index 0000000..282547e --- /dev/null +++ b/PIbd-22_Kalyshev_Y_V_MotorBoat_Base.git/IDrawningObject.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace PIbd_22_Kalyshev_Y_V_MotorBoat_Base +{ + internal interface IDrawningObject + { + /// + /// Шаг перемещения объекта + /// + public float Step { get; } + /// + /// Установка позиции объекта + /// + /// Координата X + /// Координата Y + /// Ширина полотна + /// Высота полотна + void SetObject(int x, int y, int width, int height); + /// + /// Изменение направления пермещения объекта + /// + /// Направление + void MoveObject(Direction direction); + /// + /// Отрисовка объекта + /// + /// + void DrawningObject(Graphics g); + /// + /// Получение текущей позиции объекта + /// + /// + (float Left, float Right, float Top, float Bottom) + GetCurrentPosition(); + } + +} \ No newline at end of file