PIbd-22_Shabunov_O.A._AirBo.../AirBomber/BomberForm.cs
2023-11-19 17:11:10 +04:00

164 lines
4.8 KiB
C#

using AirBomber.MovementStrategy;
using AirBomber.Rendering;
namespace AirBomber
{
public partial class BomberForm : Form
{
private BomberRendererBase? _bomberRenderer;
private AbstractStrategy? _strategy;
public BomberRendererBase? SelectedRenderer { get; private set; }
public BomberForm()
{
InitializeComponent();
_strategy = null;
SelectedRenderer = null;
}
private void Draw()
{
if (_bomberRenderer == null)
return;
Bitmap bmp = new Bitmap(BomberPictureBox.Width, BomberPictureBox.Height);
Graphics g = Graphics.FromImage(bmp);
_bomberRenderer.DrawEntity(g);
BomberPictureBox.Image = bmp;
}
private void ButtonCreateBomber_Click(object sender, EventArgs e)
{
Random random = new Random();
Color BodyColor = Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256));
Color AdditionalColor = Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256));
ColorDialog BodyColorPicker = new ColorDialog();
if (BodyColorPicker.ShowDialog() == DialogResult.OK)
BodyColor = BodyColorPicker.Color;
ColorDialog AdditionalColorPicker = new ColorDialog();
if (AdditionalColorPicker.ShowDialog() == DialogResult.OK)
AdditionalColor = AdditionalColorPicker.Color;
_bomberRenderer = new BomberRenderer(
random.Next(100, 300),
random.Next(1000, 3000),
BodyColor,
AdditionalColor,
true,
true,
BomberPictureBox.Width,
BomberPictureBox.Height
);
_bomberRenderer.SetPosition(random.Next(10, 60), random.Next(10, 60));
MovementStrategyComboBox.Enabled = true;
Draw();
}
private void ButtonCreateBomberBase_Click(object sender, EventArgs e)
{
Random random = new Random();
Color color = Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256));
ColorDialog dialog = new();
if (dialog.ShowDialog() == DialogResult.OK)
{
color = dialog.Color;
}
_bomberRenderer = new BomberRendererBase(
random.Next(100, 200),
random.Next(1000, 1800),
color,
BomberPictureBox.Width,
BomberPictureBox.Height
);
_bomberRenderer.SetPosition(random.Next(20, 100), random.Next(20, 100));
MovementStrategyComboBox.Enabled = true;
Draw();
}
private void ButtonMove_Click(object sender, EventArgs e)
{
if (_bomberRenderer == null)
return;
string ButtonName = ((Button)sender)?.Name ?? string.Empty;
switch (ButtonName)
{
case "ButtonUp":
_bomberRenderer.MoveEntity(DirectionType.Up);
break;
case "ButtonDown":
_bomberRenderer.MoveEntity(DirectionType.Down);
break;
case "ButtonLeft":
_bomberRenderer.MoveEntity(DirectionType.Left);
break;
case "ButtonRight":
_bomberRenderer.MoveEntity(DirectionType.Right);
break;
}
Draw();
}
private void ButtonPerformStep_Click(object sender, EventArgs e)
{
if (_bomberRenderer is null)
return;
if (MovementStrategyComboBox.Enabled)
{
_strategy = MovementStrategyComboBox.SelectedIndex switch
{
0 => new MoveToCenterStrategy(),
1 => new MoveToDownRightStrategy(),
_ => null,
};
if (_strategy is null)
return;
_strategy.SetData(
_bomberRenderer.MovableObject,
BomberPictureBox.Width,
BomberPictureBox.Height
);
}
if (_strategy is null)
return;
MovementStrategyComboBox.Enabled = false;
_strategy.MakeStep();
Draw();
if (_strategy.GetStatus() == Status.Finish)
{
MovementStrategyComboBox.Enabled = true;
_strategy = null;
}
}
private void ButtonSelectEntity_Click(object sender, EventArgs e)
{
SelectedRenderer = _bomberRenderer;
DialogResult = DialogResult.OK;
}
}
}