From 29b463dd8b789e9ed68ca1112590e77a5ba3a77b Mon Sep 17 00:00:00 2001 From: crum61kg <clop61kg@gmail.com> Date: Mon, 3 Oct 2022 00:50:47 +0400 Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=80=D0=BE=D0=B4=D0=B2=D0=B8=D0=BD?= =?UTF-8?q?=D1=83=D1=82=D1=8B=D0=B9=20=D0=BE=D0=B1=D1=8A=D0=B5=D0=BA=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WarmlyShip/WarmlyShip/DrawningLiner.cs | 56 ++++++++++++++++++++++ WarmlyShip/WarmlyShip/DrawningShip.cs | 23 +++++++-- WarmlyShip/WarmlyShip/EntityLiner.cs | 45 +++++++++++++++++ WarmlyShip/WarmlyShip/FormShip.Designer.cs | 14 +++++- WarmlyShip/WarmlyShip/FormShip.cs | 31 ++++++++++-- WarmlyShip/WarmlyShip/FormShip.resx | 3 ++ 6 files changed, 162 insertions(+), 10 deletions(-) create mode 100644 WarmlyShip/WarmlyShip/DrawningLiner.cs create mode 100644 WarmlyShip/WarmlyShip/EntityLiner.cs diff --git a/WarmlyShip/WarmlyShip/DrawningLiner.cs b/WarmlyShip/WarmlyShip/DrawningLiner.cs new file mode 100644 index 0000000..77bb230 --- /dev/null +++ b/WarmlyShip/WarmlyShip/DrawningLiner.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WarmlyShip +{ + /// <summary> + /// Класс, отвечающий за прорисовку и перемещение объекта-сущности + /// </summary> + internal class DrawningLiner : DrawningShip + { + /// <summary> + /// Инициализация свойств + /// </summary> + /// <param name="speed">Скорость</param> + /// <param name="weight">Вес корабля</param> + /// <param name="bodyColor">Цвет палубы</param> + /// <param name="dopColor">Дополнительный цвет</param> + /// <param name="swimmingPool">Признак наличия бассейна</param> + /// <param name="dopDeck">Признак наличия дополнительной палубы</param> + public DrawningLiner(int speed, float weight, Color bodyColor, Color dopColor, bool swimmingPool, bool dopDeck) : + base(speed, weight, bodyColor, 110, 60) + { + Ship = new EntityLiner(speed, weight, bodyColor, dopColor, swimmingPool, dopDeck); + } + public override void DrawTransport(Graphics g) + { + if (Ship is not EntityLiner liner) + { + return; + } + + Pen pen = new(Color.Black); + Brush dopBrush = new SolidBrush(liner.DopColor); + + if (liner.DopDeck) + { + g.FillRectangle(dopBrush, _startPosX + 45, _startPosY, 35, 15); + g.DrawRectangle(pen, _startPosX + 45, _startPosY, 35, 15); + } + + _startPosY += 10; + base.DrawTransport(g); + _startPosY -= 10; + + if (liner.SwimmingPool) + { + g.FillRectangle(dopBrush, _startPosX + 25, _startPosY + 15, 15, 7); + g.DrawRectangle(pen, _startPosX + 25, _startPosY + 15, 15, 7); + } + + } + } +} diff --git a/WarmlyShip/WarmlyShip/DrawningShip.cs b/WarmlyShip/WarmlyShip/DrawningShip.cs index 910fb29..99b4e42 100644 --- a/WarmlyShip/WarmlyShip/DrawningShip.cs +++ b/WarmlyShip/WarmlyShip/DrawningShip.cs @@ -14,15 +14,15 @@ namespace WarmlyShip /// <summary>> /// Класс-сущность /// </summary> - public EntityShip Ship { get; private set; } + public EntityShip Ship { get; protected set; } /// <summary> /// Левая координата отрисовки корабля /// </summary> - private float _startPosX; + protected float _startPosX; /// <summary> /// Верхняя кооридната отрисовки корабля /// </summary> - private float _startPosY; + protected float _startPosY; /// <summary> /// Ширина окна отрисовки /// </summary> @@ -49,7 +49,20 @@ namespace WarmlyShip { Ship = new EntityShip(speed, weight, bodyColor); } - + /// <summary> + /// Инициализация свойств + /// </summary> + /// <param name="speed">Скорость</param> + /// <param name="weight">Вес корабля</param> + /// <param name="bodyColor">Цвет палубы</param> + /// <param name="shipWidth">Ширина отрисовки корабля</param> + /// <param name="shipHeight">Высота отрисовки корабля</param> + protected DrawningShip(int speed, float weight, Color bodyColor, int shipWidth, int shipHeight) : + this(speed, weight, bodyColor) + { + _shipWidth = shipWidth; + _shipHeight = shipHeight; + } /// <summary> /// Установка позиции корабля /// </summary> @@ -116,7 +129,7 @@ namespace WarmlyShip /// Отрисовка корабля /// </summary> /// <param name="g"></param> - public void DrawTransport(Graphics g) + public virtual void DrawTransport(Graphics g) { if (_startPosX < 0 || _startPosY < 0 || !_pictureHeight.HasValue || !_pictureWidth.HasValue) diff --git a/WarmlyShip/WarmlyShip/EntityLiner.cs b/WarmlyShip/WarmlyShip/EntityLiner.cs new file mode 100644 index 0000000..7c2cc14 --- /dev/null +++ b/WarmlyShip/WarmlyShip/EntityLiner.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WarmlyShip +{ + /// <summary> + /// Класс-сущность "Лайнер" + /// </summary> + internal class EntityLiner : EntityShip + { + /// <summary> + /// Дополнительный цвет + /// </summary> + public Color DopColor { get; private set; } + /// <summary> + /// Признак наличия бассейна + /// </summary> + public bool SwimmingPool { get; private set; } + /// <summary> + /// Признак наличия дополнительной палубы + /// </summary> + public bool DopDeck { get; private set; } + + /// <summary> + /// Инициализация свойств + /// </summary> + /// <param name="speed">Скорость</param> + /// <param name="weight">Вес корабля</param> + /// <param name="bodyColor">Цвет палубы</param> + /// <param name="dopColor">Дополнительный цвет</param> + /// <param name="swimmingPool">Признак наличия бассейна</param> + /// <param name="dopDeck">Признак наличия дополнительной палубы</param> + public EntityLiner(int speed, float weight, Color bodyColor, Color dopColor, bool swimmingPool, bool dopDeck) : + base(speed, weight, bodyColor) + { + DopColor = dopColor; + SwimmingPool = swimmingPool; + DopDeck = dopDeck; + } + + } +} diff --git a/WarmlyShip/WarmlyShip/FormShip.Designer.cs b/WarmlyShip/WarmlyShip/FormShip.Designer.cs index 8f471d2..a7d1bc9 100644 --- a/WarmlyShip/WarmlyShip/FormShip.Designer.cs +++ b/WarmlyShip/WarmlyShip/FormShip.Designer.cs @@ -38,6 +38,7 @@ this.buttonUp = new System.Windows.Forms.Button(); this.buttonRight = new System.Windows.Forms.Button(); this.buttonLeft = new System.Windows.Forms.Button(); + this.buttonCreateModif = new System.Windows.Forms.Button(); ((System.ComponentModel.ISupportInitialize)(this.pictureBoxShip)).BeginInit(); this.statusStrip1.SuspendLayout(); this.SuspendLayout(); @@ -51,7 +52,6 @@ this.pictureBoxShip.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; this.pictureBoxShip.TabIndex = 0; this.pictureBoxShip.TabStop = false; - this.pictureBoxShip.Click += new System.EventHandler(this.ButtonMove_Click); // // statusStrip1 // @@ -143,11 +143,22 @@ this.buttonLeft.UseVisualStyleBackColor = true; this.buttonLeft.Click += new System.EventHandler(this.ButtonMove_Click); // + // buttonCreateModif + // + this.buttonCreateModif.Location = new System.Drawing.Point(93, 403); + this.buttonCreateModif.Name = "buttonCreateModif"; + this.buttonCreateModif.Size = new System.Drawing.Size(110, 23); + this.buttonCreateModif.TabIndex = 7; + this.buttonCreateModif.Text = "Модификация"; + this.buttonCreateModif.UseVisualStyleBackColor = true; + this.buttonCreateModif.Click += new System.EventHandler(this.ButtonCreateModif_Click); + // // FormShip // this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(824, 462); + this.Controls.Add(this.buttonCreateModif); this.Controls.Add(this.buttonLeft); this.Controls.Add(this.buttonRight); this.Controls.Add(this.buttonUp); @@ -177,5 +188,6 @@ private Button buttonUp; private Button buttonRight; private Button buttonLeft; + private Button buttonCreateModif; } } \ No newline at end of file diff --git a/WarmlyShip/WarmlyShip/FormShip.cs b/WarmlyShip/WarmlyShip/FormShip.cs index 1ee0920..275a2eb 100644 --- a/WarmlyShip/WarmlyShip/FormShip.cs +++ b/WarmlyShip/WarmlyShip/FormShip.cs @@ -21,6 +21,17 @@ namespace WarmlyShip pictureBoxShip.Image = bmp; } /// <summary> + /// ����� ��������� ������ + /// </summary> + private void SetData() + { + Random rnd = new(); + _ship.SetPosition(rnd.Next(10, 100), rnd.Next(10, 100), pictureBoxShip.Width, pictureBoxShip.Height); + toolStripStatusLabelSpeed.Text = $"��������: {_ship.Ship.Speed}"; + toolStripStatusLabelWeight.Text = $"���: {_ship.Ship.Weight}"; + toolStripStatusLabelBodyColor.Text = $"����: {_ship.Ship.BodyColor.Name}"; + } + /// <summary> /// ��������� ������� ������ "�������" /// </summary> /// <param name="sender"></param> @@ -29,10 +40,7 @@ namespace WarmlyShip { Random rnd = new(); _ship = new DrawningShip(rnd.Next(100, 300), rnd.Next(1000, 2000), Color.FromArgb(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256))); - _ship.SetPosition(rnd.Next(10, 100), rnd.Next(10, 100), pictureBoxShip.Width, pictureBoxShip.Height); - toolStripStatusLabelSpeed.Text = $"��������: {_ship.Ship.Speed}"; - toolStripStatusLabelWeight.Text = $"���: {_ship.Ship.Weight}"; - toolStripStatusLabelBodyColor.Text = $"����: {_ship.Ship.BodyColor.Name}"; + SetData(); Draw(); } /// <summary> @@ -71,5 +79,20 @@ namespace WarmlyShip _ship?.ChangeBorders(pictureBoxShip.Width, pictureBoxShip.Height); Draw(); } + + /// <summary> + /// ��������� ������� ������ "�����������" + /// </summary> + /// <param name="sender"></param> + /// <param name="e"></param> + private void ButtonCreateModif_Click(object sender, EventArgs e) + { + Random rnd = new(); + _ship = new DrawningLiner(rnd.Next(100, 300), rnd.Next(1000, 2000), 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))); + SetData(); + Draw(); + } } } \ No newline at end of file diff --git a/WarmlyShip/WarmlyShip/FormShip.resx b/WarmlyShip/WarmlyShip/FormShip.resx index 5cb320f..54823c3 100644 --- a/WarmlyShip/WarmlyShip/FormShip.resx +++ b/WarmlyShip/WarmlyShip/FormShip.resx @@ -60,4 +60,7 @@ <metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <value>17, 17</value> </metadata> + <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> + <value>63</value> + </metadata> </root> \ No newline at end of file