diff --git a/AirplaneWithRadar/AirplaneWithRadar/DrawingAirplane.cs b/AirplaneWithRadar/AirplaneWithRadar/DrawingAirplane.cs index ebfa28c..595109c 100644 --- a/AirplaneWithRadar/AirplaneWithRadar/DrawingAirplane.cs +++ b/AirplaneWithRadar/AirplaneWithRadar/DrawingAirplane.cs @@ -10,7 +10,7 @@ namespace AirplaneWithRadar /// Класс-сущность /// public EntityAirplane Airplane { private set; get; } - public DrawningAirplanePortholes DrawningPortholes { get; private set; } + public IAirplanePortholes DrawningPortholes { get; private set; } /// /// Левая координата отрисовки самолёта /// @@ -41,12 +41,10 @@ namespace AirplaneWithRadar /// Скорость /// Вес /// Цвет - public void Init(int speed, float weight, Color bodyColor) + public DrawningAirplane(int speed, float weight, Color bodyColor, IAirplanePortholes typeAirplanePortholes) { - Airplane = new EntityAirplane(); - Airplane.Init(speed, weight, bodyColor); - DrawningPortholes = new(); - DrawningPortholes.CountPortholes = 10; + Airplane = new EntityAirplane(speed, weight, bodyColor); + DrawningPortholes = typeAirplanePortholes; } /// /// Установка позиции diff --git a/AirplaneWithRadar/AirplaneWithRadar/DrawningAirplanePortholes.cs b/AirplaneWithRadar/AirplaneWithRadar/DrawningAirplanePortholes.cs index 2c94173..dab8f7f 100644 --- a/AirplaneWithRadar/AirplaneWithRadar/DrawningAirplanePortholes.cs +++ b/AirplaneWithRadar/AirplaneWithRadar/DrawningAirplanePortholes.cs @@ -6,7 +6,7 @@ using System.Threading.Tasks; namespace AirplaneWithRadar { - internal class DrawningAirplanePortholes + internal class DrawningAirplanePortholes : IAirplanePortholes { private CountPortholes _countPortholes; @@ -33,7 +33,7 @@ namespace AirplaneWithRadar } } - private void DrawPorthole(Graphics g, int _startPosX, int _startPosY) + protected virtual void DrawPorthole(Graphics g, int _startPosX, int _startPosY) { Pen pen = new(Color.Black); g.DrawRectangle(pen, _startPosX, _startPosY, 2, 2); diff --git a/AirplaneWithRadar/AirplaneWithRadar/DrawningDeltaPortholes.cs b/AirplaneWithRadar/AirplaneWithRadar/DrawningDeltaPortholes.cs new file mode 100644 index 0000000..08f62aa --- /dev/null +++ b/AirplaneWithRadar/AirplaneWithRadar/DrawningDeltaPortholes.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AirplaneWithRadar +{ + internal class DrawningDeltaPortholes : DrawningAirplanePortholes + { + protected override void DrawPorthole(Graphics g, int _startPosX, int _startPosY) + { + Pen pen = new (Color.Black); + PointF[] point = new PointF[3]; + point[0] = new PointF(_startPosX, _startPosY); + point[1] = new PointF(_startPosX-2, _startPosY+2); + point[2] = new PointF(_startPosX + 2, _startPosY + 2); + g.DrawPolygon(pen, point); + } + } +} diff --git a/AirplaneWithRadar/AirplaneWithRadar/DrawningRhombusPortholes.cs b/AirplaneWithRadar/AirplaneWithRadar/DrawningRhombusPortholes.cs new file mode 100644 index 0000000..0ba844c --- /dev/null +++ b/AirplaneWithRadar/AirplaneWithRadar/DrawningRhombusPortholes.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AirplaneWithRadar +{ + internal class DrawningRhombusPortholes : DrawningAirplanePortholes + { + protected override void DrawPorthole(Graphics g, int _startPosX, int _startPosY) + { + Pen pen = new(Color.Black); + PointF[] point = new PointF[4]; + point[0] = new PointF(_startPosX, _startPosY); + point[1] = new PointF(_startPosX - 2, _startPosY + 2); + point[2] = new PointF(_startPosX, _startPosY + 4); + point[3] = new PointF(_startPosX + 2, _startPosY + 2); + g.DrawPolygon(pen, point); + } + } +} \ No newline at end of file diff --git a/AirplaneWithRadar/AirplaneWithRadar/EntityAirplane.cs b/AirplaneWithRadar/AirplaneWithRadar/EntityAirplane.cs index ef80d96..4682efc 100644 --- a/AirplaneWithRadar/AirplaneWithRadar/EntityAirplane.cs +++ b/AirplaneWithRadar/AirplaneWithRadar/EntityAirplane.cs @@ -29,7 +29,7 @@ namespace AirplaneWithRadar /// /// /// - public void Init(int speed, float weight, Color bodyColor) + public EntityAirplane(int speed, float weight, Color bodyColor) { Random rnd = new(); Speed = speed <= 0 ? rnd.Next(50, 150) : speed; diff --git a/AirplaneWithRadar/AirplaneWithRadar/FormAirplane.Designer.cs b/AirplaneWithRadar/AirplaneWithRadar/FormAirplane.Designer.cs index d8cf5c7..18ba5a1 100644 --- a/AirplaneWithRadar/AirplaneWithRadar/FormAirplane.Designer.cs +++ b/AirplaneWithRadar/AirplaneWithRadar/FormAirplane.Designer.cs @@ -40,6 +40,7 @@ this.buttonRight = new System.Windows.Forms.Button(); this.labelPortholes = new System.Windows.Forms.Label(); this.comboBoxPortholes = new System.Windows.Forms.ComboBox(); + this.comboBoxTypePortholes = new System.Windows.Forms.ComboBox(); this.statusStrip1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.pictureBoxAirplane)).BeginInit(); this.SuspendLayout(); @@ -94,7 +95,7 @@ this.buttonCreate.TabIndex = 2; this.buttonCreate.Text = "Создать"; this.buttonCreate.UseVisualStyleBackColor = true; - this.buttonCreate.Click += new System.EventHandler(this.buttonCreate_Click); + this.buttonCreate.Click += new System.EventHandler(this.ButtonCreate_Click); // // buttonUp // @@ -166,11 +167,25 @@ this.comboBoxPortholes.TabIndex = 8; this.comboBoxPortholes.Text = "10"; // + // comboBoxTypePortholes + // + this.comboBoxTypePortholes.FormattingEnabled = true; + this.comboBoxTypePortholes.Items.AddRange(new object[] { + "Квадратные", + "Треугольные", + "Ромбовидные"}); + this.comboBoxTypePortholes.Location = new System.Drawing.Point(12, 338); + this.comboBoxTypePortholes.Name = "comboBoxTypePortholes"; + this.comboBoxTypePortholes.Size = new System.Drawing.Size(121, 23); + this.comboBoxTypePortholes.TabIndex = 9; + this.comboBoxTypePortholes.Text = "Квадратные"; + // // FormAirplane // this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.comboBoxTypePortholes); this.Controls.Add(this.comboBoxPortholes); this.Controls.Add(this.labelPortholes); this.Controls.Add(this.buttonRight); @@ -204,5 +219,6 @@ private Button buttonRight; private Label labelPortholes; private ComboBox comboBoxPortholes; + private ComboBox comboBoxTypePortholes; } } \ No newline at end of file diff --git a/AirplaneWithRadar/AirplaneWithRadar/FormAirplane.cs b/AirplaneWithRadar/AirplaneWithRadar/FormAirplane.cs index f980d42..f505933 100644 --- a/AirplaneWithRadar/AirplaneWithRadar/FormAirplane.cs +++ b/AirplaneWithRadar/AirplaneWithRadar/FormAirplane.cs @@ -27,11 +27,20 @@ namespace AirplaneWithRadar /// /// - private void buttonCreate_Click(object sender, EventArgs e) + private void ButtonCreate_Click(object sender, EventArgs e) { + IAirplanePortholes typeAirplanePortholes = new DrawningAirplanePortholes(); + switch (comboBoxTypePortholes.Text) + { + case "": + typeAirplanePortholes = new DrawningDeltaPortholes(); + break; + case "": + typeAirplanePortholes = new DrawningRhombusPortholes(); + break; + } Random rnd = new(); - _airplane = new DrawningAirplane(); - _airplane.Init(rnd.Next(100, 300), rnd.Next(1000, 2000), Color.FromArgb(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256))); + _airplane = new DrawningAirplane(rnd.Next(100, 300), rnd.Next(1000, 2000), Color.FromArgb(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256)), typeAirplanePortholes); _airplane.DrawningPortholes.CountPortholes = Convert.ToInt32(comboBoxPortholes.Text); _airplane.SetPosition(rnd.Next(20, 100), rnd.Next(20, 100), pictureBoxAirplane.Width, pictureBoxAirplane.Height); toolStripStatusLabelSpeed.Text = $": {_airplane.Airplane.Speed}"; @@ -76,5 +85,6 @@ namespace AirplaneWithRadar _airplane?.ChangeBorders(pictureBoxAirplane.Width, pictureBoxAirplane.Height); Draw(); } + } } \ No newline at end of file diff --git a/AirplaneWithRadar/AirplaneWithRadar/IAirplanePortholes.cs b/AirplaneWithRadar/AirplaneWithRadar/IAirplanePortholes.cs new file mode 100644 index 0000000..d41a5d3 --- /dev/null +++ b/AirplaneWithRadar/AirplaneWithRadar/IAirplanePortholes.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AirplaneWithRadar +{ + internal interface IAirplanePortholes + { + int CountPortholes { set; } + public void DrawPortholes(Graphics g, int _startPosX, int _startPosY, int _airplaneWidth); + } +}