From 7136fc7793fb631cf186d2af4ff03f1373fdae19 Mon Sep 17 00:00:00 2001 From: xom9kxom9k Date: Mon, 4 Mar 2024 16:16:41 +0400 Subject: [PATCH] =?UTF-8?q?=D0=B3=D0=BE=D1=82=D0=BE=D0=B2=D0=B0=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FormAntiAircraftGun.Designer.cs | 26 ++++++++++ AntiAircraftGun/FormAntiAircraftGun.cs | 48 ++++++++++++++++++- 2 files changed, 72 insertions(+), 2 deletions(-) diff --git a/AntiAircraftGun/FormAntiAircraftGun.Designer.cs b/AntiAircraftGun/FormAntiAircraftGun.Designer.cs index 362de52..3fcd3a8 100644 --- a/AntiAircraftGun/FormAntiAircraftGun.Designer.cs +++ b/AntiAircraftGun/FormAntiAircraftGun.Designer.cs @@ -35,6 +35,8 @@ buttonUp = new Button(); buttonCreate = new Button(); buttonCreatAircraftGun = new Button(); + comboBoxStrategy = new ComboBox(); + buttonStrategyStep = new Button(); ((System.ComponentModel.ISupportInitialize)pictureBoxAntiAircraftGun).BeginInit(); SuspendLayout(); // @@ -117,11 +119,33 @@ buttonCreatAircraftGun.UseVisualStyleBackColor = true; buttonCreatAircraftGun.Click += buttonCreatAircraftGun_Click; // + // comboBoxStrategy + // + comboBoxStrategy.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxStrategy.FormattingEnabled = true; + comboBoxStrategy.Items.AddRange(new object[] { "К центру", "К краю" }); + comboBoxStrategy.Location = new Point(667, 12); + comboBoxStrategy.Name = "comboBoxStrategy"; + comboBoxStrategy.Size = new Size(121, 23); + comboBoxStrategy.TabIndex = 7; + // + // buttonStrategyStep + // + buttonStrategyStep.Location = new Point(713, 41); + buttonStrategyStep.Name = "buttonStrategyStep"; + buttonStrategyStep.Size = new Size(75, 23); + buttonStrategyStep.TabIndex = 8; + buttonStrategyStep.Text = "Шаг"; + buttonStrategyStep.UseVisualStyleBackColor = true; + buttonStrategyStep.Click += buttonStrategyStep_Click; + // // FormAntiAircraftGun // AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleMode = AutoScaleMode.Font; ClientSize = new Size(800, 450); + Controls.Add(buttonStrategyStep); + Controls.Add(comboBoxStrategy); Controls.Add(buttonCreatAircraftGun); Controls.Add(buttonUp); Controls.Add(buttonRight); @@ -144,5 +168,7 @@ private Button buttonUp; private Button buttonCreate; private Button buttonCreatAircraftGun; + private ComboBox comboBoxStrategy; + private Button buttonStrategyStep; } } \ No newline at end of file diff --git a/AntiAircraftGun/FormAntiAircraftGun.cs b/AntiAircraftGun/FormAntiAircraftGun.cs index 098651d..a7814e0 100644 --- a/AntiAircraftGun/FormAntiAircraftGun.cs +++ b/AntiAircraftGun/FormAntiAircraftGun.cs @@ -1,4 +1,5 @@ using AntiAircraftGun.Drawnings; +using AntiAircraftGun.MovementStrategy; namespace AntiAircraftGun { @@ -9,11 +10,16 @@ namespace AntiAircraftGun /// private DrawningAircraftGun? _drawningAircraftGun; /// + /// Стратегия перемещения + /// + private AbstractStrategy? _strategy; + /// /// конструктор формы /// public FormAntiAircraftGun() { InitializeComponent(); + _strategy = null; } /// /// Метод прорисовки транспорта @@ -50,6 +56,8 @@ namespace AntiAircraftGun _drawningAircraftGun.SetPictureSize(pictureBoxAntiAircraftGun.Width, pictureBoxAntiAircraftGun.Height); _drawningAircraftGun.SetPosition(random.Next(10, 100), random.Next(10, 100)); + _strategy = null; + comboBoxStrategy.Enabled = true; Draw(); } /// @@ -64,7 +72,7 @@ namespace AntiAircraftGun /// /// private void buttonCreatAircraftGun_Click(object sender, EventArgs e) => CreateObject(nameof(DrawningAircraftGun)); - + /// /// Перемещение объекта по форме /// @@ -99,6 +107,42 @@ namespace AntiAircraftGun } } - + private void buttonStrategyStep_Click(object sender, EventArgs e) + { + if (_drawningAircraftGun == null) + { + return; + } + + if (comboBoxStrategy.Enabled) + { + _strategy = comboBoxStrategy.SelectedIndex switch + { + 0 => new MoveToCenter(), + 1 => new MoveToBorder(), + _ => null, + }; + if (_strategy == null) + { + return; + } + _strategy.SetData(new MoveableAircraftGun(_drawningAircraftGun), pictureBoxAntiAircraftGun.Width, pictureBoxAntiAircraftGun.Height); + } + + if (_strategy == null) + { + return; + } + + comboBoxStrategy.Enabled = false; + _strategy.MakeStep(); + Draw(); + + if (_strategy.GetStatus() == StrategyStatus.Finish) + { + comboBoxStrategy.Enabled = true; + _strategy = null; + } + } } } \ No newline at end of file