This commit is contained in:
Алексей Тихоненков 2023-10-15 20:34:13 +04:00
parent 821102b9ed
commit d5b447bf0f
6 changed files with 45 additions and 68 deletions

View File

@ -9,26 +9,26 @@ using static System.Windows.Forms.AxHost;
namespace AntiAircraftGun.DrawingObjects namespace AntiAircraftGun.DrawingObjects
{ {
public class AdvancedDrawingAntAirCraftGun : BaseDrawingAntiAirCraftGun public class AdvancedDrawingAntiAirCraftGun : BaseDrawingAntiAirCraftGun
{ {
private Point[] points = new Point[4]; private Point[] points = new Point[4];
public AdvancedDrawingAntAirCraftGun(int speed, double weight, Color bodyColor, Color additionalColor, Color dopColor, bool rocket,bool radar, int width, int height) : public AdvancedDrawingAntiAirCraftGun(int speed, double weight, Color bodyColor, Color additionalColor, Color dopColor, bool rocket,bool radar, int width, int height) :
base(speed, weight, bodyColor, additionalColor, width, height) base(speed, weight, bodyColor, additionalColor, width, height)
{ {
EntityAntiAirСraftGun = new EntityAdvancedAntiAircraftGun(speed, weight, bodyColor, additionalColor, dopColor, rocket,radar); AntiAirСraftGun = new EntityAdvancedAntiAircraftGun(speed, weight, bodyColor, additionalColor, dopColor, rocket,radar);
} }
public override void DrawTransport(Graphics g) public override void DrawTransport(Graphics g)
{ {
if (EntityAntiAirСraftGun is not EntityAdvancedAntiAircraftGun advancedGun) if (AntiAirСraftGun is not EntityAdvancedAntiAircraftGun advancedGun)
{ {
return; return;
} }
Pen pen = new Pen(Color.Black); Pen pen = new Pen(Color.Black);
Brush bodyBrush = new SolidBrush(EntityAntiAirСraftGun.BodyColor); Brush bodyBrush = new SolidBrush(AntiAirСraftGun.BodyColor);
Brush additionalBrush = new SolidBrush(EntityAntiAirСraftGun.AdditionalColor); Brush additionalBrush = new SolidBrush(AntiAirСraftGun.AdditionalColor);
base.DrawTransport(g); base.DrawTransport(g);
Brush dopBrush = new SolidBrush(advancedGun.DopColor); Brush dopBrush = new SolidBrush(advancedGun.DopColor);
Pen dopPen = new Pen(advancedGun.DopColor); Pen dopPen = new Pen(advancedGun.DopColor);

View File

@ -9,7 +9,7 @@ namespace AntiAircraftGun.DrawingObjects
{ {
public class BaseDrawingAntiAirCraftGun public class BaseDrawingAntiAirCraftGun
{ {
public EntityAntiAirCraftGun? EntityAntiAirСraftGun { get; protected set; } public EntityAntiAirCraftGun? AntiAirСraftGun { get; protected set; }
private readonly int _pictureWidth; private readonly int _pictureWidth;
private readonly int _pictureHeight; private readonly int _pictureHeight;
protected int _startPosX; protected int _startPosX;
@ -21,7 +21,7 @@ namespace AntiAircraftGun.DrawingObjects
{ {
_pictureWidth = width; _pictureWidth = width;
_pictureHeight = height; _pictureHeight = height;
EntityAntiAirСraftGun = new EntityAntiAirCraftGun(speed, weight, bodyColor, additionalColor); AntiAirСraftGun = new EntityAntiAirCraftGun(speed, weight, bodyColor, additionalColor);
} }
protected BaseDrawingAntiAirCraftGun(int speed, double weight, Color bodyColor, Color additionalColor, int width, int height, int carWidth, int carHeight) protected BaseDrawingAntiAirCraftGun(int speed, double weight, Color bodyColor, Color additionalColor, int width, int height, int carWidth, int carHeight)
@ -30,20 +30,18 @@ namespace AntiAircraftGun.DrawingObjects
_pictureHeight = height; _pictureHeight = height;
_zenitWidth = carWidth; _zenitWidth = carWidth;
_zenitHeight = carHeight; _zenitHeight = carHeight;
EntityAntiAirСraftGun = new EntityAntiAirCraftGun(speed, weight, bodyColor, additionalColor); AntiAirСraftGun = new EntityAntiAirCraftGun(speed, weight, bodyColor, additionalColor);
} }
public void SetPosition(int x, int y) public void SetPosition(int x, int y)
{ {
if (x < 0 || y < 0) if (AntiAirСraftGun == null) return;
{
_startPosX = 10;
_startPosY = 10;
}
else
{
_startPosX = x; _startPosX = x;
_startPosY = y; _startPosY = y;
if (x < 0 || y < 0 || x + _zenitWidth >= _pictureWidth || y + _zenitHeight >= _pictureHeight)
{
_startPosX = 1;
_startPosY = 1;
} }
} }
/// <summary> /// <summary>
@ -70,20 +68,20 @@ namespace AntiAircraftGun.DrawingObjects
/// <returns>true - можно переместится по указанному направлению</returns> /// <returns>true - можно переместится по указанному направлению</returns>
public bool CanMove(DirectionType direction) public bool CanMove(DirectionType direction)
{ {
if (EntityAntiAirСraftGun == null) if (AntiAirСraftGun == null)
{ {
return false; return false;
} }
return direction switch return direction switch
{ {
//влево //влево
DirectionType.Left => _startPosX - EntityAntiAirСraftGun.Step > 0, DirectionType.Left => _startPosX - AntiAirСraftGun.Step > 0,
//вверх //вверх
DirectionType.Up => _startPosY - EntityAntiAirСraftGun.Step > 0, DirectionType.Up => _startPosY - AntiAirСraftGun.Step > 0,
// вправо // вправо
DirectionType.Right =>_startPosX + EntityAntiAirСraftGun.Step < _pictureWidth - 110, DirectionType.Right =>_startPosX + AntiAirСraftGun.Step + _zenitWidth < _pictureWidth,
//вниз //вниз
DirectionType.Down => _startPosY + EntityAntiAirСraftGun.Step < _pictureHeight - 60, DirectionType.Down => _startPosY + AntiAirСraftGun.Step + _zenitHeight < _pictureHeight,
_ => false, _ => false,
}; };
} }
@ -93,7 +91,7 @@ namespace AntiAircraftGun.DrawingObjects
/// <param name="direction">Направление</param> /// <param name="direction">Направление</param>
public void MoveTransport(DirectionType direction) public void MoveTransport(DirectionType direction)
{ {
if (!CanMove(direction) || EntityAntiAirСraftGun == null) if (!CanMove(direction) || AntiAirСraftGun == null)
{ {
return; return;
} }
@ -101,19 +99,19 @@ namespace AntiAircraftGun.DrawingObjects
{ {
//влево //влево
case DirectionType.Left: case DirectionType.Left:
_startPosX -= (int)EntityAntiAirСraftGun.Step; _startPosX -= (int)AntiAirСraftGun.Step;
break; break;
//вверх //вверх
case DirectionType.Up: case DirectionType.Up:
_startPosY -= (int)EntityAntiAirСraftGun.Step; _startPosY -= (int)AntiAirСraftGun.Step;
break; break;
// вправо // вправо
case DirectionType.Right: case DirectionType.Right:
_startPosX += (int)EntityAntiAirСraftGun.Step; _startPosX += (int)AntiAirСraftGun.Step;
break; break;
//вниз //вниз
case DirectionType.Down: case DirectionType.Down:
_startPosY += (int)EntityAntiAirСraftGun.Step; _startPosY += (int)AntiAirСraftGun.Step;
break; break;
} }
} }
@ -123,8 +121,8 @@ namespace AntiAircraftGun.DrawingObjects
Pen pen = Pens.Black; Pen pen = Pens.Black;
Brush bodyBrush = new SolidBrush(EntityAntiAirСraftGun.BodyColor); Brush bodyBrush = new SolidBrush(AntiAirСraftGun.BodyColor);
Brush additionalBrush = new SolidBrush(EntityAntiAirСraftGun.AdditionalColor); Brush additionalBrush = new SolidBrush(AntiAirСraftGun.AdditionalColor);
g.FillEllipse(additionalBrush, _startPosX, _startPosY + 40, 110, 10); g.FillEllipse(additionalBrush, _startPosX, _startPosY + 40, 110, 10);
g.DrawEllipse(pen, _startPosX, _startPosY + 40, 110, 10); g.DrawEllipse(pen, _startPosX, _startPosY + 40, 110, 10);

View File

@ -120,7 +120,7 @@
this.comboBoxStrategy.Name = "comboBoxStrategy"; this.comboBoxStrategy.Name = "comboBoxStrategy";
this.comboBoxStrategy.Size = new System.Drawing.Size(170, 23); this.comboBoxStrategy.Size = new System.Drawing.Size(170, 23);
this.comboBoxStrategy.TabIndex = 6; this.comboBoxStrategy.TabIndex = 6;
this.comboBoxStrategy.SelectedIndexChanged += new System.EventHandler(this.comboBoxStrategy_SelectedIndexChanged);
// //
// CreateAntiAirCraftGun // CreateAntiAirCraftGun
// //

View File

@ -5,7 +5,7 @@ namespace AntiAircraftGun
{ {
public partial class FormAntiAirCraftGun : Form public partial class FormAntiAirCraftGun : Form
{ {
private BaseDrawingAntiAirCraftGun _drawing; private BaseDrawingAntiAirCraftGun _drawingAntiAirCraftGun;
private AbstractStrategy? _abstractStrategy; private AbstractStrategy? _abstractStrategy;
public FormAntiAirCraftGun() public FormAntiAirCraftGun()
@ -15,7 +15,7 @@ namespace AntiAircraftGun
private void ButtonMove_Click(object sender, EventArgs e) private void ButtonMove_Click(object sender, EventArgs e)
{ {
if (_drawing == null) if (_drawingAntiAirCraftGun == null)
{ {
return; return;
} }
@ -23,36 +23,36 @@ namespace AntiAircraftGun
switch (name) switch (name)
{ {
case "buttonUp": case "buttonUp":
_drawing.MoveTransport(DirectionType.Up); _drawingAntiAirCraftGun.MoveTransport(DirectionType.Up);
break; break;
case "buttonDown": case "buttonDown":
_drawing.MoveTransport(DirectionType.Down); _drawingAntiAirCraftGun.MoveTransport(DirectionType.Down);
break; break;
case "buttonLeft": case "buttonLeft":
_drawing.MoveTransport(DirectionType.Left); _drawingAntiAirCraftGun.MoveTransport(DirectionType.Left);
break; break;
case "buttonRight": case "buttonRight":
_drawing.MoveTransport(DirectionType.Right); _drawingAntiAirCraftGun.MoveTransport(DirectionType.Right);
break; break;
} }
Draw(); Draw();
} }
private void Draw() private void Draw()
{ {
if (_drawing == null) if (_drawingAntiAirCraftGun == null)
{ {
return; return;
} }
Bitmap bmp = new Bitmap(pictureBoxAntiAircraftGun.Width, pictureBoxAntiAircraftGun.Height); Bitmap bmp = new Bitmap(pictureBoxAntiAircraftGun.Width, pictureBoxAntiAircraftGun.Height);
Graphics gr = Graphics.FromImage(bmp); Graphics gr = Graphics.FromImage(bmp);
_drawing.DrawTransport(gr); _drawingAntiAirCraftGun.DrawTransport(gr);
pictureBoxAntiAircraftGun.Image = bmp; pictureBoxAntiAircraftGun.Image = bmp;
} }
private void CreateAdvancedAintiAirCraftGun_Click(object sender, EventArgs e) private void CreateAdvancedAintiAirCraftGun_Click(object sender, EventArgs e)
{ {
Random random = new Random(); Random random = new Random();
_drawing = new AdvancedDrawingAntAirCraftGun( _drawingAntiAirCraftGun = new AdvancedDrawingAntiAirCraftGun(
random.Next(100, 300), // Ñêîðîñòü random.Next(100, 300), // Ñêîðîñòü
random.Next(1000, 3000), // Âåñ 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)), // Îñíîâíîé öâåò
@ -64,14 +64,14 @@ namespace AntiAircraftGun
pictureBoxAntiAircraftGun.Height pictureBoxAntiAircraftGun.Height
); );
_drawing.SetPosition(random.Next(10, 100), random.Next(10, 100)); _drawingAntiAirCraftGun.SetPosition(random.Next(10, 100), random.Next(10, 100));
Draw(); Draw();
} }
private void CreateAntiAirCraftGun_Click(object sender, EventArgs e) private void CreateAntiAirCraftGun_Click(object sender, EventArgs e)
{ {
Random random = new Random(); Random random = new Random();
_drawing = new BaseDrawingAntiAirCraftGun( _drawingAntiAirCraftGun = new BaseDrawingAntiAirCraftGun(
random.Next(100, 300), // Ñêîðîñòü random.Next(100, 300), // Ñêîðîñòü
random.Next(1000, 3000), // Âåñ 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)), // Îñíîâíîé öâåò
@ -80,13 +80,13 @@ namespace AntiAircraftGun
pictureBoxAntiAircraftGun.Height pictureBoxAntiAircraftGun.Height
); );
_drawing.SetPosition(random.Next(10, 100), random.Next(10, 100)); _drawingAntiAirCraftGun.SetPosition(random.Next(10, 100), random.Next(10, 100));
Draw(); Draw();
} }
private void ButtonStep_Click(object sender, EventArgs e) private void ButtonStep_Click(object sender, EventArgs e)
{ {
if (_drawing == null) if (_drawingAntiAirCraftGun == null)
{ {
return; return;
} }
@ -104,7 +104,7 @@ namespace AntiAircraftGun
return; return;
} }
_abstractStrategy.SetData(new _abstractStrategy.SetData(new
DrawingObjectAntiAirCraftGun(_drawing), pictureBoxAntiAircraftGun.Width, DrawingObjectAntiAirCraftGun(_drawingAntiAirCraftGun), pictureBoxAntiAircraftGun.Width,
pictureBoxAntiAircraftGun.Height); pictureBoxAntiAircraftGun.Height);
comboBoxStrategy.Enabled = false; comboBoxStrategy.Enabled = false;
} }
@ -121,10 +121,5 @@ namespace AntiAircraftGun
} }
} }
private void comboBoxStrategy_SelectedIndexChanged(object sender, EventArgs e)
{
}
} }
} }

View File

@ -1,16 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace AntiAircraftGun.MovementStrategy
{
public enum BorderDirection
{
Left,
Right,
Top,
Bottom
}
}

View File

@ -18,7 +18,7 @@ namespace AntiAircraftGun.MovementStrategy
{ {
get get
{ {
if (_drawningCar == null || _drawningCar.EntityAntiAirСraftGun == if (_drawningCar == null || _drawningCar.AntiAirСraftGun ==
null) null)
{ {
return null; return null;
@ -27,7 +27,7 @@ namespace AntiAircraftGun.MovementStrategy
_drawningCar.GetPosY, _drawningCar.GetWidth, _drawningCar.GetHeight); _drawningCar.GetPosY, _drawningCar.GetWidth, _drawningCar.GetHeight);
} }
} }
public int GetStep => (int)(_drawningCar?.EntityAntiAirСraftGun?.Step ?? 0); public int GetStep => (int)(_drawningCar?.AntiAirСraftGun?.Step ?? 0);
public bool CheckCanMove(DirectionType direction) => public bool CheckCanMove(DirectionType direction) =>
_drawningCar?.CanMove(direction) ?? false; _drawningCar?.CanMove(direction) ?? false;
public void MoveObject(DirectionType direction) => public void MoveObject(DirectionType direction) =>