From b039442feae9eb2808340c867d7b32973839b6da Mon Sep 17 00:00:00 2001 From: F1rsTTeaM Date: Sat, 23 Mar 2024 15:58:03 +0400 Subject: [PATCH] =?UTF-8?q?=D0=93=D0=BE=D1=82=D0=BE=D0=B2=D0=B0=D1=8F=20?= =?UTF-8?q?=D0=BB=D0=B0=D0=B1=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Drawnings/DirectionType.cs | 5 + .../FormAirplaneWithRadar.Designer.cs | 75 +++++++---- .../FormAirplaneWithRadar.cs | 118 ++++++++++++++---- .../MovementStrategy/MoveablePlane.cs | 2 +- 4 files changed, 157 insertions(+), 43 deletions(-) diff --git a/AirplaneWithRadar/ProjectAirplaneWithRadar/Drawnings/DirectionType.cs b/AirplaneWithRadar/ProjectAirplaneWithRadar/Drawnings/DirectionType.cs index 65cc84f..668795f 100644 --- a/AirplaneWithRadar/ProjectAirplaneWithRadar/Drawnings/DirectionType.cs +++ b/AirplaneWithRadar/ProjectAirplaneWithRadar/Drawnings/DirectionType.cs @@ -5,6 +5,11 @@ /// public enum DirectionType { + /// + /// Неизвестное направление + /// + Unknow = -1, + /// /// Вверх /// diff --git a/AirplaneWithRadar/ProjectAirplaneWithRadar/FormAirplaneWithRadar.Designer.cs b/AirplaneWithRadar/ProjectAirplaneWithRadar/FormAirplaneWithRadar.Designer.cs index 2ed78dd..b3c9650 100644 --- a/AirplaneWithRadar/ProjectAirplaneWithRadar/FormAirplaneWithRadar.Designer.cs +++ b/AirplaneWithRadar/ProjectAirplaneWithRadar/FormAirplaneWithRadar.Designer.cs @@ -34,6 +34,9 @@ buttonRight = new Button(); buttonDown = new Button(); buttonUp = new Button(); + ButtonCreateAirplane = new Button(); + comboBoxStrategy = new ComboBox(); + buttonStrategyStep = new Button(); ((System.ComponentModel.ISupportInitialize)pictureBoxAirplaneWithRadar).BeginInit(); SuspendLayout(); // @@ -41,21 +44,19 @@ // pictureBoxAirplaneWithRadar.Dock = DockStyle.Fill; pictureBoxAirplaneWithRadar.Location = new Point(0, 0); - pictureBoxAirplaneWithRadar.Margin = new Padding(3, 4, 3, 4); pictureBoxAirplaneWithRadar.Name = "pictureBoxAirplaneWithRadar"; - pictureBoxAirplaneWithRadar.Size = new Size(1128, 636); + pictureBoxAirplaneWithRadar.Size = new Size(987, 477); pictureBoxAirplaneWithRadar.TabIndex = 0; pictureBoxAirplaneWithRadar.TabStop = false; // // buttonCreate // buttonCreate.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; - buttonCreate.Location = new Point(14, 589); - buttonCreate.Margin = new Padding(3, 4, 3, 4); + buttonCreate.Location = new Point(12, 442); buttonCreate.Name = "buttonCreate"; - buttonCreate.Size = new Size(86, 31); + buttonCreate.Size = new Size(199, 23); buttonCreate.TabIndex = 1; - buttonCreate.Text = "Создать"; + buttonCreate.Text = "Создать Самолет с радаром"; buttonCreate.UseVisualStyleBackColor = true; buttonCreate.Click += ButtonCreate_Click; // @@ -64,10 +65,9 @@ buttonLeft.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; buttonLeft.BackgroundImage = Properties.Resources.Стрелка_влево; buttonLeft.BackgroundImageLayout = ImageLayout.Stretch; - buttonLeft.Location = new Point(981, 573); - buttonLeft.Margin = new Padding(3, 4, 3, 4); + buttonLeft.Location = new Point(858, 430); buttonLeft.Name = "buttonLeft"; - buttonLeft.Size = new Size(40, 47); + buttonLeft.Size = new Size(35, 35); buttonLeft.TabIndex = 2; buttonLeft.UseVisualStyleBackColor = true; buttonLeft.Click += ButtonMove_Click; @@ -77,10 +77,9 @@ buttonRight.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; buttonRight.BackgroundImage = Properties.Resources.Стрелка_вправо; buttonRight.BackgroundImageLayout = ImageLayout.Stretch; - buttonRight.Location = new Point(1074, 573); - buttonRight.Margin = new Padding(3, 4, 3, 4); + buttonRight.Location = new Point(940, 430); buttonRight.Name = "buttonRight"; - buttonRight.Size = new Size(40, 47); + buttonRight.Size = new Size(35, 35); buttonRight.TabIndex = 3; buttonRight.UseVisualStyleBackColor = true; buttonRight.Click += ButtonMove_Click; @@ -90,10 +89,9 @@ buttonDown.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; buttonDown.BackgroundImage = Properties.Resources.Стрелка_вниз; buttonDown.BackgroundImageLayout = ImageLayout.Stretch; - buttonDown.Location = new Point(1027, 573); - buttonDown.Margin = new Padding(3, 4, 3, 4); + buttonDown.Location = new Point(899, 430); buttonDown.Name = "buttonDown"; - buttonDown.Size = new Size(40, 47); + buttonDown.Size = new Size(35, 35); buttonDown.TabIndex = 4; buttonDown.UseVisualStyleBackColor = true; buttonDown.Click += ButtonMove_Click; @@ -103,26 +101,58 @@ buttonUp.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; buttonUp.BackgroundImage = Properties.Resources.Стрелка_вверх; buttonUp.BackgroundImageLayout = ImageLayout.Stretch; - buttonUp.Location = new Point(1027, 519); - buttonUp.Margin = new Padding(3, 4, 3, 4); + buttonUp.Location = new Point(899, 389); buttonUp.Name = "buttonUp"; - buttonUp.Size = new Size(40, 47); + buttonUp.Size = new Size(35, 35); buttonUp.TabIndex = 5; buttonUp.UseVisualStyleBackColor = true; buttonUp.Click += ButtonMove_Click; // + // ButtonCreateAirplane + // + ButtonCreateAirplane.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + ButtonCreateAirplane.Location = new Point(230, 442); + ButtonCreateAirplane.Name = "ButtonCreateAirplane"; + ButtonCreateAirplane.Size = new Size(199, 23); + ButtonCreateAirplane.TabIndex = 6; + ButtonCreateAirplane.Text = "Создать Самолет"; + ButtonCreateAirplane.UseVisualStyleBackColor = true; + ButtonCreateAirplane.Click += ButtonCreateAirplane_Click; + // + // comboBoxStrategy + // + comboBoxStrategy.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxStrategy.FormattingEnabled = true; + comboBoxStrategy.Items.AddRange(new object[] { "К центру", "К краю" }); + comboBoxStrategy.Location = new Point(854, 12); + comboBoxStrategy.Name = "comboBoxStrategy"; + comboBoxStrategy.Size = new Size(121, 23); + comboBoxStrategy.TabIndex = 7; + // + // buttonStrategyStep + // + buttonStrategyStep.Location = new Point(900, 41); + buttonStrategyStep.Name = "buttonStrategyStep"; + buttonStrategyStep.Size = new Size(75, 23); + buttonStrategyStep.TabIndex = 8; + buttonStrategyStep.Text = "Шаг"; + buttonStrategyStep.UseVisualStyleBackColor = true; + buttonStrategyStep.Click += buttonStrategyStep_Click; + // // FormAirplaneWithRadar // - AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleMode = AutoScaleMode.Font; - ClientSize = new Size(1128, 636); + ClientSize = new Size(987, 477); + Controls.Add(buttonStrategyStep); + Controls.Add(comboBoxStrategy); + Controls.Add(ButtonCreateAirplane); Controls.Add(buttonUp); Controls.Add(buttonDown); Controls.Add(buttonRight); Controls.Add(buttonLeft); Controls.Add(buttonCreate); Controls.Add(pictureBoxAirplaneWithRadar); - Margin = new Padding(3, 4, 3, 4); Name = "FormAirplaneWithRadar"; Text = "Самолет с радаром"; ((System.ComponentModel.ISupportInitialize)pictureBoxAirplaneWithRadar).EndInit(); @@ -137,5 +167,8 @@ private Button buttonRight; private Button buttonDown; private Button buttonUp; + private Button ButtonCreateAirplane; + private ComboBox comboBoxStrategy; + private Button buttonStrategyStep; } } \ No newline at end of file diff --git a/AirplaneWithRadar/ProjectAirplaneWithRadar/FormAirplaneWithRadar.cs b/AirplaneWithRadar/ProjectAirplaneWithRadar/FormAirplaneWithRadar.cs index c399391..8fb250b 100644 --- a/AirplaneWithRadar/ProjectAirplaneWithRadar/FormAirplaneWithRadar.cs +++ b/AirplaneWithRadar/ProjectAirplaneWithRadar/FormAirplaneWithRadar.cs @@ -1,5 +1,5 @@ using ProjectAirplaneWithRadar.Drawnings; -using ProjectAirplaneWithRadar.Entities; +using ProjectAirplaneWithRadar.MovementStrategy; namespace ProjectAirplaneWithRadar { @@ -11,7 +11,12 @@ namespace ProjectAirplaneWithRadar /// /// Поле-объект для происовки объект /// - private DrawingAirplaneWithRadar? _drawingAirplaneWithRadar; + private DrawningAirplane? _drawingAirplane; + + /// + /// Стратегия перемещения + /// + private AbstractStrategy? _strategy; /// /// Конструктор формы @@ -19,39 +24,67 @@ namespace ProjectAirplaneWithRadar public FormAirplaneWithRadar() { InitializeComponent(); + _strategy = null; } /// - /// Обработка нажатия кнопки "Создать" + /// Создание объекта класса-перемещения + /// + /// Тип создаваемого объекта + private void CreateObject(string type) + { + Random random = new(); + switch (type) + { + case nameof(DrawningAirplane): + _drawingAirplane = new DrawningAirplane(random.Next(100, 300), random.Next(1000, 3000), + Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256))); + break; + case nameof(DrawingAirplaneWithRadar): + _drawingAirplane = new DrawingAirplaneWithRadar(random.Next(100, 300), random.Next(1000, 3000), + Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)), + Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)), + Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2))); + break; + default: + return; + + } + + _drawingAirplane.SetPictureSize(pictureBoxAirplaneWithRadar.Width, pictureBoxAirplaneWithRadar.Height); + _drawingAirplane.SetPosition(random.Next(10, 100), random.Next(10, 100)); + + _strategy = null; + comboBoxStrategy.Enabled = true; + UpdatePlane(); + } + + /// + /// Обработка нажатия кнопки "Создать Самолет с радаром" /// /// /// - private void ButtonCreate_Click(object sender, EventArgs e) - { - Random random = new(); - _drawingAirplaneWithRadar = new DrawingAirplaneWithRadar(); - _drawingAirplaneWithRadar.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))); - _drawingAirplaneWithRadar.SetPictureSize(pictureBoxAirplaneWithRadar.Width, pictureBoxAirplaneWithRadar.Height); - _drawingAirplaneWithRadar.SetPosition(random.Next(10, 100), random.Next(10, 100)); + private void ButtonCreate_Click(object sender, EventArgs e) => CreateObject(nameof(DrawingAirplaneWithRadar)); - UpdatePlane(); - } + /// + /// Обработка нажатия кнопки "Создать Самолет" + /// + /// + /// + private void ButtonCreateAirplane_Click(object sender, EventArgs e) => CreateObject(nameof(DrawningAirplane)); /// /// Метод прорисовки самолета /// private void UpdatePlane() { - if (_drawingAirplaneWithRadar == null) + if (_drawingAirplane == null) { return; } Bitmap bmp = new(pictureBoxAirplaneWithRadar.Width, pictureBoxAirplaneWithRadar.Height); Graphics gr = Graphics.FromImage(bmp); - _drawingAirplaneWithRadar?.DrawTransport(gr); + _drawingAirplane?.DrawTransport(gr); pictureBoxAirplaneWithRadar.Image = bmp; } @@ -62,7 +95,7 @@ namespace ProjectAirplaneWithRadar /// private void ButtonMove_Click(object sender, EventArgs e) { - if (_drawingAirplaneWithRadar == null) + if (_drawingAirplane == null) { return; } @@ -90,10 +123,53 @@ namespace ProjectAirplaneWithRadar return; } - _drawingAirplaneWithRadar.MoveTransport(result); + _drawingAirplane.MoveTransport(result); UpdatePlane(); } - } + } + + /// + /// Обработка нажатия кнопки "Шаг" + /// + /// + /// + private void buttonStrategyStep_Click(object sender, EventArgs e) + { + if (_drawingAirplane == null) + { + return; + } + + if (comboBoxStrategy.Enabled) + { + _strategy = comboBoxStrategy.SelectedIndex switch + { + 0 => new MoveToCenter(), + 1 => new MoveToBorder(), + _ => null, + }; + if (_strategy == null) + { + return; + } + _strategy.SetData(new MoveablePlane(_drawingAirplane), pictureBoxAirplaneWithRadar.Width, pictureBoxAirplaneWithRadar.Height); + } + + if (_strategy == null) + { + return; + } + + comboBoxStrategy.Enabled = false; + _strategy.MakeStep(); + UpdatePlane(); + + if (_strategy.GetStatus() == StrategyStatus.Finish) + { + comboBoxStrategy.Enabled = true; + _strategy = null; + } + } } -} +} \ No newline at end of file diff --git a/AirplaneWithRadar/ProjectAirplaneWithRadar/MovementStrategy/MoveablePlane.cs b/AirplaneWithRadar/ProjectAirplaneWithRadar/MovementStrategy/MoveablePlane.cs index 049275d..ce39e8c 100644 --- a/AirplaneWithRadar/ProjectAirplaneWithRadar/MovementStrategy/MoveablePlane.cs +++ b/AirplaneWithRadar/ProjectAirplaneWithRadar/MovementStrategy/MoveablePlane.cs @@ -58,7 +58,7 @@ namespace ProjectAirplaneWithRadar.MovementStrategy MovementDirection.Right => DirectionType.Right, MovementDirection.Up => DirectionType.Up, MovementDirection.Down => DirectionType.Down, - _ => DirectionType.Unknow, + _ => DirectionType.Unknow }; } }