PIbd-22_Shabunov_O.A._AirBo.../AirBomber/BomberForm.cs

135 lines
3.9 KiB
C#

using AirBomber.MovementStrategy;
using AirBomber.Rendering;
namespace AirBomber
{
public partial class BomberForm : Form
{
private BomberRendererBase? _bomberRenderer;
private AbstractStrategy? _strategy;
public BomberForm()
{
InitializeComponent();
}
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();
_bomberRenderer = new BomberRenderer(
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)),
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();
_bomberRenderer = new BomberRendererBase(
random.Next(100, 200),
random.Next(1000, 1800),
Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)),
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(
new ObjectEntityRenderer(_bomberRenderer),
BomberPictureBox.Width,
BomberPictureBox.Height
);
MovementStrategyComboBox.Enabled = false;
}
if (_strategy is null)
return;
_strategy.MakeStep();
Draw();
if (_strategy.GetStatus() == Status.Finish)
{
MovementStrategyComboBox.Enabled = true;
_strategy = null;
}
}
}
}