Добавление родителей и ввод конструкторов

This commit is contained in:
ikswi 2024-03-02 13:16:19 +04:00
parent 110730bc99
commit ee247c99b7
9 changed files with 291 additions and 139 deletions

View File

@ -1,12 +0,0 @@
namespace ProjectAirFighter;
public enum DirectionType
{
Up = 1,
Down = 2,
Left = 3,
Right = 4
}

View File

@ -0,0 +1,28 @@
namespace ProjectAirFighter.Drawnings;
/// <summary>
/// Направление перемещения
/// </summary>
public enum DirectionType
{
/// <summary>
/// Вверх
/// </summary>
Up = 1,
/// <summary>
/// Вниз
/// </summary>
Down = 2,
/// <summary>
/// Влево
/// </summary>
Left = 3,
/// <summary>
/// Вправо
/// </summary>
Right = 4
}

View File

@ -0,0 +1,77 @@
using ProjectAirFighter.Entities;
namespace ProjectAirFighter.Drawnings;
/// <summary>
/// Класс, отвечающий за прорисовку и перемещение объекта-сущности
/// </summary>
public class DrawningAirFighter : DrawningFighter
{
/// <summary>
/// Конструктор
/// </summary>
/// <param name="speed">Скорость</param>
/// <param name="weight">Вес</param>
/// <param name="bodyColor">Основной цвет</param>
/// <param name="additionalColor">Дополнительный цвет</param>
/// <param name="wings">Признак наличия доп крыльев</param>
/// <param name="rockets">Признак наличия ракет</param>
public DrawningAirFighter (int speed, double weight, Color bodyColor, Color additionalColor, bool wings, bool rockets) : base (70, 70)
{
EntityFighter = new EntityAirFighter(speed, weight, bodyColor, additionalColor, wings, rockets);
}
public override void DrawTransport(Graphics g)
{
if (EntityFighter == null || EntityFighter is not EntityAirFighter airFighter || !_startPosX.HasValue || !_startPosY.HasValue)
{
return;
}
Pen pen = new(Color.Black);
Brush additionalBrush = new SolidBrush(airFighter.AdditionalColor);
base.DrawTransport(g);
if (airFighter.Wings)
{
Point wings1 = new Point(_startPosX.Value + 45, _startPosY.Value + 30);
Point wings2 = new Point(_startPosX.Value + 45, _startPosY.Value + 15);
Point wings3 = new Point(_startPosX.Value + 50, _startPosY.Value + 15);
Point wings4 = new Point(_startPosX.Value + 55, _startPosY.Value + 30);
Point[] UpWing = { wings1, wings2, wings3, wings4 };
g.FillPolygon(additionalBrush, UpWing);
g.DrawPolygon(pen, UpWing);
Point wings5 = new Point(_startPosX.Value + 45, _startPosY.Value + 40);
Point wings6 = new Point(_startPosX.Value + 45, _startPosY.Value + 55);
Point wings7 = new Point(_startPosX.Value + 50, _startPosY.Value + 55);
Point wings8 = new Point(_startPosX.Value + 55, _startPosY.Value + 40);
Point[] DownWing = { wings5, wings6, wings7, wings8 };
g.FillPolygon(additionalBrush, DownWing);
g.DrawPolygon(pen, DownWing);
}
if (airFighter.Rockets)
{
Point rocket1 = new Point(_startPosX.Value + 40, _startPosY.Value + 5);
Point rocket2 = new Point(_startPosX.Value + 15, _startPosY.Value + 5);
Point rocket3 = new Point(_startPosX.Value + 10, _startPosY.Value + 10);
Point rocket4 = new Point(_startPosX.Value + 15, _startPosY.Value + 15);
Point rocket5 = new Point(_startPosX.Value + 40, _startPosY.Value + 15);
Point[] Rocket1 = { rocket1, rocket2, rocket3, rocket4, rocket5 };
g.FillPolygon(additionalBrush, Rocket1);
g.DrawPolygon(pen, Rocket1);
Point rocket6 = new Point(_startPosX.Value + 40, _startPosY.Value + 55);
Point rocket7 = new Point(_startPosX.Value + 15, _startPosY.Value + 55);
Point rocket8 = new Point(_startPosX.Value + 10, _startPosY.Value + 60);
Point rocket9 = new Point(_startPosX.Value + 15, _startPosY.Value + 65);
Point rocket10 = new Point(_startPosX.Value + 40, _startPosY.Value + 65);
Point[] Rocket2 = { rocket6, rocket7, rocket8, rocket9, rocket10 };
g.FillPolygon(additionalBrush, Rocket2);
g.DrawPolygon(pen, Rocket2);
}
}
}

View File

@ -1,31 +1,80 @@
namespace ProjectAirFighter; using ProjectAirFighter.Entities;
public class DrawningAirFighter namespace ProjectAirFighter.Drawnings;
/// <summary>
/// Класс, отвечающий за прорисовку и перемещение базового объекта-сущности
/// </summary>
public class DrawningFighter
{ {
public EntityAirFighter? EntityAirFighter { get; private set; } /// <summary>
/// Класс-сущность
/// </summary>
public EntityFighter? EntityFighter { get; protected set; }
/// <summary>
/// Ширина окна
/// </summary>
private int? _pictureWidth; private int? _pictureWidth;
/// <summary>
/// Высота окна
/// </summary>
private int? _pictureHeight; private int? _pictureHeight;
private int? _startPosX; /// <summary>
/// Левая координата прорисовки самолёта
/// </summary>
protected int? _startPosX;
private int? _startPosY; /// <summary>
/// Верхняя кооридната прорисовки самолёта
/// </summary>
protected int? _startPosY;
/// <summary>
/// Ширина прорисовки самолёта
/// </summary>
private readonly int _drawningFighterWidth = 70; private readonly int _drawningFighterWidth = 70;
/// <summary>
/// Высота прорисовки самолёта
/// </summary>
private readonly int _drawningFighterHeight = 70; private readonly int _drawningFighterHeight = 70;
public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool wings, bool rockets) /// <summary>
/// Пустой конструктор
/// </summary>
private DrawningFighter()
{ {
EntityAirFighter = new EntityAirFighter();
EntityAirFighter.Init(speed, weight, bodyColor, additionalColor, wings, rockets);
_pictureWidth = null; _pictureWidth = null;
_pictureHeight = null; _pictureHeight = null;
_startPosX = null; _startPosX = null;
_startPosY = null; _startPosY = null;
} }
/// <summary>
/// Конструктор
/// </summary>
/// <param name="speed">Скорость</param>
/// <param name="weight">Вес</param>
/// <param name="bodyColor">Основной цвет</param>
public DrawningFighter (int speed, double weight, Color bodyColor) : this()
{
EntityFighter = new EntityFighter(speed, weight, bodyColor);
}
/// <summary>
/// Конструктор для наследников
/// </summary>
/// <param name="drawningCarWidth">Ширина прорисовки самолёта</param>
/// <param name="drawningCarHeight">Высота прорисовки самолёта</param>
protected DrawningFighter(int drawningFighterWidth, int drawningFighterHeight) : this()
{
_drawningFighterWidth = drawningFighterWidth;
_drawningFighterHeight = drawningFighterHeight;
}
public bool SetPictureSize(int width, int height) public bool SetPictureSize(int width, int height)
{ {
if (_drawningFighterWidth < width && _drawningFighterHeight < height) if (_drawningFighterWidth < width && _drawningFighterHeight < height)
@ -77,7 +126,7 @@ public class DrawningAirFighter
public bool MoveTransport(DirectionType direction) public bool MoveTransport(DirectionType direction)
{ {
if (EntityAirFighter == null || !_startPosX.HasValue || !_startPosY.HasValue) if (EntityFighter == null || !_startPosX.HasValue || !_startPosY.HasValue)
{ {
return false; return false;
} }
@ -85,27 +134,27 @@ public class DrawningAirFighter
switch (direction) switch (direction)
{ {
case DirectionType.Left: case DirectionType.Left:
if (_startPosX.Value - EntityAirFighter.Step > 0) if (_startPosX.Value - EntityFighter.Step > 0)
{ {
_startPosX -= (int)EntityAirFighter.Step; _startPosX -= (int)EntityFighter.Step;
} }
return true; return true;
case DirectionType.Up: case DirectionType.Up:
if (_startPosY.Value - EntityAirFighter.Step > 0) if (_startPosY.Value - EntityFighter.Step > 0)
{ {
_startPosY -= (int)EntityAirFighter.Step; _startPosY -= (int)EntityFighter.Step;
} }
return true; return true;
case DirectionType.Right: case DirectionType.Right:
if (_startPosX.Value + _drawningFighterWidth + EntityAirFighter.Step < _pictureWidth) if (_startPosX.Value + _drawningFighterWidth + EntityFighter.Step < _pictureWidth)
{ {
_startPosX += (int)EntityAirFighter.Step; _startPosX += (int)EntityFighter.Step;
} }
return true; return true;
case DirectionType.Down: case DirectionType.Down:
if (_startPosY.Value + _drawningFighterHeight + EntityAirFighter.Step < _pictureHeight) if (_startPosY.Value + _drawningFighterHeight + EntityFighter.Step < _pictureHeight)
{ {
_startPosY += (int)EntityAirFighter.Step; _startPosY += (int)EntityFighter.Step;
} }
return true; return true;
default: default:
@ -113,16 +162,15 @@ public class DrawningAirFighter
} }
} }
public void DrawTransport(Graphics g) public virtual void DrawTransport(Graphics g)
{ {
if (EntityAirFighter == null || !_startPosX.HasValue || !_startPosY.HasValue) if (EntityFighter == null || !_startPosX.HasValue || !_startPosY.HasValue)
{ {
return; return;
} }
Pen pen = new(Color.Black); Pen pen = new(Color.Black);
Brush br = new SolidBrush(EntityAirFighter.BodyColor); Brush br = new SolidBrush(EntityFighter.BodyColor);
Brush additionalBrush = new SolidBrush(EntityAirFighter.AdditionalColor);
g.FillRectangle(br, _startPosX.Value + 10, _startPosY.Value + 30, 60, 10); g.FillRectangle(br, _startPosX.Value + 10, _startPosY.Value + 30, 60, 10);
g.DrawRectangle(pen, _startPosX.Value + 10, _startPosY.Value + 30, 60, 10); g.DrawRectangle(pen, _startPosX.Value + 10, _startPosY.Value + 30, 60, 10);
@ -167,45 +215,5 @@ public class DrawningAirFighter
Point[] HvostDown = { point13, point14, point15, point16 }; Point[] HvostDown = { point13, point14, point15, point16 };
g.FillPolygon(brPink, HvostDown); g.FillPolygon(brPink, HvostDown);
g.DrawPolygon(pen, HvostDown); g.DrawPolygon(pen, HvostDown);
if (EntityAirFighter.Wings)
{
Point wings1 = new Point(_startPosX.Value + 45, _startPosY.Value + 30);
Point wings2 = new Point(_startPosX.Value + 45, _startPosY.Value + 15);
Point wings3 = new Point(_startPosX.Value + 50, _startPosY.Value + 15);
Point wings4 = new Point(_startPosX.Value + 55, _startPosY.Value + 30);
Point[] UpWing = { wings1, wings2, wings3, wings4 };
g.FillPolygon(additionalBrush, UpWing);
g.DrawPolygon(pen, UpWing);
Point wings5 = new Point(_startPosX.Value + 45, _startPosY.Value + 40);
Point wings6 = new Point(_startPosX.Value + 45, _startPosY.Value + 55);
Point wings7 = new Point(_startPosX.Value + 50, _startPosY.Value + 55);
Point wings8 = new Point(_startPosX.Value + 55, _startPosY.Value + 40);
Point[] DownWing = { wings5, wings6, wings7, wings8 };
g.FillPolygon(additionalBrush, DownWing);
g.DrawPolygon(pen, DownWing);
}
if (EntityAirFighter.Rockets)
{
Point rocket1 = new Point(_startPosX.Value + 40, _startPosY.Value + 5);
Point rocket2 = new Point(_startPosX.Value + 15, _startPosY.Value + 5);
Point rocket3 = new Point(_startPosX.Value + 10, _startPosY.Value + 10);
Point rocket4 = new Point(_startPosX.Value + 15, _startPosY.Value + 15);
Point rocket5 = new Point(_startPosX.Value + 40, _startPosY.Value + 15);
Point[] Rocket1 = { rocket1, rocket2, rocket3, rocket4, rocket5 };
g.FillPolygon(additionalBrush, Rocket1);
g.DrawPolygon(pen, Rocket1);
Point rocket6 = new Point(_startPosX.Value + 40, _startPosY.Value + 55);
Point rocket7 = new Point(_startPosX.Value + 15, _startPosY.Value + 55);
Point rocket8 = new Point(_startPosX.Value + 10, _startPosY.Value + 60);
Point rocket9 = new Point(_startPosX.Value + 15, _startPosY.Value + 65);
Point rocket10 = new Point(_startPosX.Value + 40, _startPosY.Value + 65);
Point[] Rocket2 = { rocket6, rocket7, rocket8, rocket9, rocket10 };
g.FillPolygon(additionalBrush, Rocket2);
g.DrawPolygon(pen, Rocket2);
}
} }
} }

View File

@ -0,0 +1,20 @@
namespace ProjectAirFighter.Entities;
/// <summary>
/// Класс-сущность "Истребитель"
/// </summary>
public class EntityAirFighter : EntityFighter
{
public Color AdditionalColor { get; private set; }
public bool Wings { get; private set; }
public bool Rockets { get; private set; }
public EntityAirFighter(int speed, double weight, Color bodyColor, Color additionalColor, bool wings, bool rockets) : base(5, 45, Color.Black)
{
AdditionalColor = additionalColor;
Rockets = rockets;
Wings = wings;
}
}

View File

@ -0,0 +1,29 @@
namespace ProjectAirFighter.Entities;
/// <summary>
/// Класс-сущность "Истребитель"
/// </summary>
public class EntityFighter
{
public int Speed { get; private set; }
public double Weight { get; private set; }
public Color BodyColor { get; private set; }
public double Step => Speed * 100 / Weight;
/// <summary>
/// Конструктор сущности
/// </summary>
/// <param name="speed">Скорость</param>
/// <param name="weight">Вес автомобиля</param>
/// <param name="bodyColor">Основной цвет</param>
public EntityFighter (int speed, double weight, Color bodyColor)
{
Speed = speed;
Weight = weight;
BodyColor = bodyColor;
}
}

View File

@ -1,29 +0,0 @@
namespace ProjectAirFighter;
public class EntityAirFighter
{
public int Speed { get; private set; }
public double Weight { get; private set; }
public Color BodyColor { get; private set; }
public Color AdditionalColor { get; private set; }
public bool Wings { get; private set; }
public bool Rockets { get; private set; }
public double Step => Speed * 100 / Weight;
public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool wings, bool rockets)
{
Speed = speed;
Weight = weight;
BodyColor = bodyColor;
AdditionalColor = additionalColor;
Rockets = rockets;
Wings = wings;
}
}

View File

@ -21,32 +21,33 @@
/// </summary> /// </summary>
private void InitializeComponent() private void InitializeComponent()
{ {
pictureBox1 = new PictureBox(); pictureBoxAirFighter = new PictureBox();
buttonCreateAirFighter = new Button(); buttonCreateAirFighter = new Button();
buttonDown = new Button(); buttonDown = new Button();
buttonRight = new Button(); buttonRight = new Button();
buttonLeft = new Button(); buttonLeft = new Button();
buttonUp = new Button(); buttonUp = new Button();
((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit(); buttonCreateFighter = new Button();
((System.ComponentModel.ISupportInitialize)pictureBoxAirFighter).BeginInit();
SuspendLayout(); SuspendLayout();
// //
// pictureBox1 // pictureBoxAirFighter
// //
pictureBox1.Dock = DockStyle.Fill; pictureBoxAirFighter.Dock = DockStyle.Fill;
pictureBox1.Location = new Point(0, 0); pictureBoxAirFighter.Location = new Point(0, 0);
pictureBox1.Name = "pictureBox1"; pictureBoxAirFighter.Name = "pictureBoxAirFighter";
pictureBox1.Size = new Size(800, 450); pictureBoxAirFighter.Size = new Size(800, 450);
pictureBox1.TabIndex = 0; pictureBoxAirFighter.TabIndex = 0;
pictureBox1.TabStop = false; pictureBoxAirFighter.TabStop = false;
// //
// buttonCreateAirFighter // buttonCreateAirFighter
// //
buttonCreateAirFighter.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; buttonCreateAirFighter.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
buttonCreateAirFighter.Location = new Point(12, 409); buttonCreateAirFighter.Location = new Point(12, 409);
buttonCreateAirFighter.Name = "buttonCreateAirFighter"; buttonCreateAirFighter.Name = "buttonCreateAirFighter";
buttonCreateAirFighter.Size = new Size(94, 29); buttonCreateAirFighter.Size = new Size(169, 29);
buttonCreateAirFighter.TabIndex = 1; buttonCreateAirFighter.TabIndex = 1;
buttonCreateAirFighter.Text = "Создать"; buttonCreateAirFighter.Text = "Создать истребитель";
buttonCreateAirFighter.UseVisualStyleBackColor = true; buttonCreateAirFighter.UseVisualStyleBackColor = true;
buttonCreateAirFighter.Click += buttonCreateAirFighter_Click; buttonCreateAirFighter.Click += buttonCreateAirFighter_Click;
// //
@ -98,30 +99,43 @@
buttonUp.UseVisualStyleBackColor = true; buttonUp.UseVisualStyleBackColor = true;
buttonUp.Click += ButtonMove_Click; buttonUp.Click += ButtonMove_Click;
// //
// buttonCreateFighter
//
buttonCreateFighter.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
buttonCreateFighter.Location = new Point(196, 409);
buttonCreateFighter.Name = "buttonCreateFighter";
buttonCreateFighter.Size = new Size(169, 29);
buttonCreateFighter.TabIndex = 6;
buttonCreateFighter.Text = "Создать самолёт";
buttonCreateFighter.UseVisualStyleBackColor = true;
buttonCreateFighter.Click += buttonCreateAir_Click;
//
// FormAirFighter // FormAirFighter
// //
AutoScaleDimensions = new SizeF(8F, 20F); AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font; AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(800, 450); ClientSize = new Size(800, 450);
Controls.Add(buttonCreateFighter);
Controls.Add(buttonUp); Controls.Add(buttonUp);
Controls.Add(buttonLeft); Controls.Add(buttonLeft);
Controls.Add(buttonRight); Controls.Add(buttonRight);
Controls.Add(buttonDown); Controls.Add(buttonDown);
Controls.Add(buttonCreateAirFighter); Controls.Add(buttonCreateAirFighter);
Controls.Add(pictureBox1); Controls.Add(pictureBoxAirFighter);
Name = "FormAirFighter"; Name = "FormAirFighter";
Text = "Истребитель"; Text = "Истребитель";
((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit(); ((System.ComponentModel.ISupportInitialize)pictureBoxAirFighter).EndInit();
ResumeLayout(false); ResumeLayout(false);
} }
#endregion #endregion
private PictureBox pictureBox1; private PictureBox pictureBoxAirFighter;
private Button buttonCreateAirFighter; private Button buttonCreateAirFighter;
private Button buttonDown; private Button buttonDown;
private Button buttonRight; private Button buttonRight;
private Button buttonLeft; private Button buttonLeft;
private Button buttonUp; private Button buttonUp;
private Button buttonCreateFighter;
} }
} }

View File

@ -1,8 +1,10 @@
namespace ProjectAirFighter; using ProjectAirFighter.Drawnings;
namespace ProjectAirFighter;
public partial class FormAirFighter : Form public partial class FormAirFighter : Form
{ {
private DrawningAirFighter? _drawningAirFighter; private DrawningFighter? _drawningFighter;
public FormAirFighter() public FormAirFighter()
{ {
@ -11,33 +13,48 @@ public partial class FormAirFighter : Form
private void Draw() private void Draw()
{ {
if (_drawningAirFighter == null) if (_drawningFighter == null)
{ {
return; return;
} }
Bitmap bmp = new(pictureBox1.Width, pictureBox1.Height); Bitmap bmp = new(pictureBoxAirFighter.Width, pictureBoxAirFighter.Height);
Graphics gr = Graphics.FromImage(bmp); Graphics gr = Graphics.FromImage(bmp);
_drawningAirFighter.DrawTransport(gr); _drawningFighter.DrawTransport(gr);
pictureBox1.Image = bmp; pictureBoxAirFighter.Image = bmp;
} }
private void buttonCreateAirFighter_Click(object sender, EventArgs e) private void CreateObject(string type)
{ {
Random random = new(); Random random = new();
_drawningAirFighter = new DrawningAirFighter(); switch (type)
_drawningAirFighter.Init(random.Next(100, 300), random.Next(1000, 3000), {
case nameof(DrawningFighter):
_drawningFighter = new DrawningFighter(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(DrawningAirFighter):
_drawningFighter = new DrawningAirFighter(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)),
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))); Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2)));
_drawningAirFighter.SetPictureSize(pictureBox1.Width, pictureBox1.Height); break;
_drawningAirFighter.SetPosition(random.Next(10, 100), random.Next(10, 100)); default:
return;
}
_drawningFighter.SetPictureSize(pictureBoxAirFighter.Width, pictureBoxAirFighter.Height);
_drawningFighter.SetPosition(random.Next(10, 100), random.Next(10, 100));
Draw(); Draw();
} }
private void buttonCreateAirFighter_Click(object sender, EventArgs e) => CreateObject(nameof(DrawningAirFighter));
private void buttonCreateAir_Click(object sender, EventArgs e) => CreateObject(nameof(DrawningFighter));
private void ButtonMove_Click(object sender, EventArgs e) private void ButtonMove_Click(object sender, EventArgs e)
{ {
if (_drawningAirFighter == null) if (_drawningFighter == null)
{ {
return; return;
} }
@ -47,16 +64,16 @@ public partial class FormAirFighter : Form
switch (name) switch (name)
{ {
case "buttonUp": case "buttonUp":
result = _drawningAirFighter.MoveTransport(DirectionType.Up); result = _drawningFighter.MoveTransport(DirectionType.Up);
break; break;
case "buttonDown": case "buttonDown":
result = _drawningAirFighter.MoveTransport(DirectionType.Down); result = _drawningFighter.MoveTransport(DirectionType.Down);
break; break;
case "buttonLeft": case "buttonLeft":
result = _drawningAirFighter.MoveTransport(DirectionType.Left); result = _drawningFighter.MoveTransport(DirectionType.Left);
break; break;
case "buttonRight": case "buttonRight":
result = _drawningAirFighter.MoveTransport(DirectionType.Right); result = _drawningFighter.MoveTransport(DirectionType.Right);
break; break;
} }