diff --git a/Stormtrooper/Stormtrooper/Drawnings/DrawningAircraft.cs b/Stormtrooper/Stormtrooper/Drawnings/DrawningAircraft.cs
index 94c3524..1c54f1d 100644
--- a/Stormtrooper/Stormtrooper/Drawnings/DrawningAircraft.cs
+++ b/Stormtrooper/Stormtrooper/Drawnings/DrawningAircraft.cs
@@ -10,7 +10,7 @@ namespace Stormtrooper.Drawnings;
public class DrawningAircraft
{
// Класс-сущность
- public EntityAircraft? EntityAircraft { get; private set; } // объявление 1
+ public EntityAircraft? EntityAircraft { get; protected set; } // объявление 1
// Ширина окна
@@ -66,6 +66,99 @@ public class DrawningAircraft
/// Прорисовка объекта
///
+ /// // Установка границ поля
+
+ /// Ширина поля
+ /// Высота поля
+ public bool SetPictureSize(int width, int height)
+ {
+ if (_drawningAircraftHeight > height || _drawningAircraftWidth > width)
+ {
+ return false;
+ }
+
+ _pictureWidth = width;
+ _pictureHeight = height;
+
+ if (_startPosX.HasValue && _startPosY.HasValue)
+ {
+ SetPosition(_startPosX.Value, _startPosY.Value);
+ }
+
+ return true;
+ }
+
+ // Установка позиции
+ /// Координата X
+ /// Координата Y
+ public void SetPosition(int x, int y)
+ {
+ if (!_pictureHeight.HasValue || !_pictureWidth.HasValue)
+ {
+ return;
+ }
+
+ if (x < 0 || x + _drawningAircraftWidth > _pictureWidth)
+ {
+ _startPosX = _pictureWidth - _drawningAircraftWidth;
+ }
+ else
+ {
+ _startPosX = x;
+ }
+
+ if (y < 0 || y + _drawningAircraftHeight > _pictureHeight)
+ {
+ _startPosY = _pictureHeight - _drawningAircraftHeight;
+ }
+ else
+ {
+ _startPosY = y;
+ }
+ }
+
+ // Изменение направления перемещения
+ public bool MoveTransport(DirectionType direction)
+ {
+ if (EntityAircraft == null || !_startPosX.HasValue || !_startPosY.HasValue)
+ {
+ return false;
+ }
+ switch (direction)
+ {
+ //влево
+ case DirectionType.Left:
+ if (_startPosX.Value - EntityAircraft.Step > 0)
+ {
+ _startPosX -= (int)EntityAircraft.Step;
+ }
+ return true;
+ //вверх
+ case DirectionType.Up:
+ if (_startPosY.Value - EntityAircraft.Step > 0)
+ {
+ _startPosY -= (int)EntityAircraft.Step;
+ }
+ return true;
+ // вправо
+ case DirectionType.Right:
+ if (_startPosX.Value + EntityAircraft.Step + _drawningAircraftWidth < _pictureWidth)
+ {
+ _startPosX += (int)EntityAircraft.Step;
+ return true;
+ }
+ return true;
+ //вниз
+ case DirectionType.Down:
+ if (_startPosY.Value + EntityAircraft.Step + _drawningAircraftHeight < _pictureHeight)
+ {
+ _startPosY += (int)EntityAircraft.Step;
+ }
+ return true;
+ default:
+ return false;
+ }
+ }
public virtual void DrawTransport(Graphics g)
{
if (EntityAircraft == null || !_startPosX.HasValue || !_startPosY.HasValue)
diff --git a/Stormtrooper/Stormtrooper/Drawnings/DrawningStormtrooper.cs b/Stormtrooper/Stormtrooper/Drawnings/DrawningStormtrooper.cs
index eb60a20..201e9a3 100644
--- a/Stormtrooper/Stormtrooper/Drawnings/DrawningStormtrooper.cs
+++ b/Stormtrooper/Stormtrooper/Drawnings/DrawningStormtrooper.cs
@@ -12,32 +12,7 @@ using Stormtrooper.Entities;
namespace Stormtrooper.Drawnings;
public class DrawningStormtrooper : DrawningAircraft
{
-
- // Ширина окна
-
- public int? _pictureWidth;
-
- // Высота окна
-
- public int? _pictureHeight;
-
- // Левая координата прорисовки штурмовика
-
- public int? _startPosX;
-
- // Верхняя координата прорисовки автомобиля
-
- public int? _startPosY;
-
- // Ширина прорисовки штурмовика
-
- private readonly int _drawningStormtrooperWidth = 140;
-
- // Высота прорисовки штурмовика
-
- private readonly int _drawningStormtrooperHeight = 150;
-
- // Инициализация свойств
+ // Конструктор
/// Скорость
/// Вес
@@ -47,168 +22,26 @@ public class DrawningStormtrooper : DrawningAircraft
/// Признак наличия бомбы
/// Признак наличия крыла
public DrawningStormtrooper(int speed, double weight, Color bodyColor, Color
- additionalColor, bool rocket, bool bomb, bool wing)
+ additionalColor, bool rocket, bool bomb, bool wing) : base(140,150)
{
- EntityStormtrooper = new EntityStormtrooper();
- EntityStormtrooper.Init(speed, weight, bodyColor, additionalColor, rocket, bomb, wing);
+ EntityAircraft = new EntityStormtrooper(speed, weight, bodyColor, additionalColor, rocket, bomb, wing);
}
- // Установка границ поля
- /// Ширина поля
- /// Высота поля
- public bool SetPictureSize(int width, int height)
+ public override void DrawTransport(Graphics g)
{
- if (_drawningStormtrooperHeight > height || _drawningStormtrooperWidth > width)
- {
- return false;
- }
-
- _pictureWidth = width;
- _pictureHeight = height;
-
- if (_startPosX.HasValue && _startPosY.HasValue)
- {
- SetPosition(_startPosX.Value, _startPosY.Value);
- }
-
- return true;
- }
-
- // Установка позиции
- /// Координата X
- /// Координата Y
- public void SetPosition(int x, int y)
- {
- if (!_pictureHeight.HasValue || !_pictureWidth.HasValue)
+ if (EntityAircraft == null || EntityAircraft is not EntityStormtrooper entityStormtrooper|| !_startPosX.HasValue || !_startPosY.HasValue)
{
return;
}
-
- if (x < 0 || x + _drawningStormtrooperWidth > _pictureWidth)
- {
- _startPosX = _pictureWidth - _drawningStormtrooperWidth;
- }
- else
- {
- _startPosX = x;
- }
-
- if (y < 0 || y + _drawningStormtrooperHeight > _pictureHeight)
- {
- _startPosY = _pictureHeight - _drawningStormtrooperHeight;
- }
- else
- {
- _startPosY = y;
- }
- }
-
- // Изменение направления перемещения
- public bool MoveTransport(DirectionType direction)
- {
- if (EntityStormtrooper == null || !_startPosX.HasValue || !_startPosY.HasValue)
- {
- return false;
- }
- switch (direction)
- {
- //влево
- case DirectionType.Left:
- if (_startPosX.Value - EntityStormtrooper.Step > 0)
- {
- _startPosX -= (int)EntityStormtrooper.Step;
- }
- return true;
- //вверх
- case DirectionType.Up:
- if (_startPosY.Value - EntityStormtrooper.Step > 0)
- {
- _startPosY -= (int)EntityStormtrooper.Step;
- }
- return true;
- // вправо
- case DirectionType.Right:
- if (_startPosX.Value + EntityStormtrooper.Step + _drawningStormtrooperWidth < _pictureWidth)
- {
- _startPosX += (int)EntityStormtrooper.Step;
- return true;
- }
- return true;
- //вниз
- case DirectionType.Down:
- if (_startPosY.Value + EntityStormtrooper.Step + _drawningStormtrooperHeight < _pictureHeight)
- {
- _startPosY += (int)EntityStormtrooper.Step;
- }
- return true;
- default:
- return false;
- }
- }
- /// Прорисовка объекта
- ///
- public void DrawTransport(Graphics g)
- {
- if (EntityStormtrooper == null || !_startPosX.HasValue || !_startPosY.HasValue)
- {
- return;
- }
-
Pen pen = new(Color.Black);
- Brush bodyColorBrush = new SolidBrush(EntityStormtrooper.BodyColor);
- Brush additionalBrush = new SolidBrush(EntityStormtrooper.AdditionalColor);
-
- //нос штурмовика
- Brush brBlack = new SolidBrush(Color.Black);
-
- Point[] Nose = new Point[3];
- Nose[0].X = _startPosX.Value + 20; Nose[0].Y = _startPosY.Value + 80;
- Nose[1].X = _startPosX.Value + 20; Nose[1].Y = _startPosY.Value + 60;
- Nose[2].X = _startPosX.Value; Nose[2].Y = _startPosY.Value + 70;
- g.FillPolygon(brBlack, Nose);
- g.DrawPolygon(pen, Nose);
- //Заднии крылья штурмовика
-
- Point[] pflybtwings = new Point[6];
- pflybtwings[0].X = _startPosX.Value + 120; pflybtwings[0].Y = _startPosY.Value + 60;
- pflybtwings[1].X = _startPosX.Value + 120; pflybtwings[1].Y = _startPosY.Value + 50;
- pflybtwings[2].X = _startPosX.Value + 140; pflybtwings[2].Y = _startPosY.Value + 30;
- pflybtwings[3].X = _startPosX.Value + 140; pflybtwings[3].Y = _startPosY.Value + 110;
- pflybtwings[4].X = _startPosX.Value + 120; pflybtwings[4].Y = _startPosY.Value + 90;
- pflybtwings[5].X = _startPosX.Value + 120; pflybtwings[5].Y = _startPosY.Value + 80;
- g.FillPolygon(bodyColorBrush, pflybtwings);
- g.DrawPolygon(pen, pflybtwings);
- //Тело штурмовика
- g.FillRectangle(bodyColorBrush, _startPosX.Value + 20, _startPosY.Value + 60, 120, 20);
- g.DrawRectangle(pen, _startPosX.Value + 20, _startPosY.Value + 60, 120, 20);
-
-
- //Крылья штурмовика
-
-
- Point[] frontwings = new Point[4];
- frontwings[0].X = _startPosX.Value + 60; frontwings[0].Y = _startPosY.Value + 60;
- frontwings[1].X = _startPosX.Value + 60; frontwings[1].Y = _startPosY.Value;
- frontwings[2].X = _startPosX.Value + 70; frontwings[2].Y = _startPosY.Value;
- frontwings[3].X = _startPosX.Value + 80; frontwings[3].Y = _startPosY.Value + 60;
- g.FillPolygon(bodyColorBrush, frontwings);
- g.DrawPolygon(pen, frontwings);
-
- Point[] frontwings2 = new Point[4];
- frontwings2[0].X = _startPosX.Value + 60; frontwings2[0].Y = _startPosY.Value + 80;
- frontwings2[1].X = _startPosX.Value + 60; frontwings2[1].Y = _startPosY.Value + 140;
- frontwings2[2].X = _startPosX.Value + 70; frontwings2[2].Y = _startPosY.Value + 140;
- frontwings2[3].X = _startPosX.Value + 80; frontwings2[3].Y = _startPosY.Value + 80;
- g.FillPolygon(bodyColorBrush, frontwings2);
- g.DrawPolygon(pen, frontwings2);
-
+ Brush bodyColorBrush = new SolidBrush(entityStormtrooper.BodyColor);
+ Brush additionalBrush = new SolidBrush(entityStormtrooper.AdditionalColor);
+ base.DrawTransport(g);
+
//Ракеты штурмовика
-
-
-
- if (EntityStormtrooper.Rocket)
+ if (entityStormtrooper.Rocket)
{
Point[] rockets = new Point[3];
rockets[0].X = _startPosX.Value + 45; rockets[0].Y = _startPosY.Value + 20;
@@ -233,7 +66,7 @@ public class DrawningStormtrooper : DrawningAircraft
//Бомбы бомбардировщика
- if (EntityStormtrooper.Bomb)
+ if (entityStormtrooper.Bomb)
{
g.FillRectangle(additionalBrush, _startPosX.Value + 50, _startPosY.Value + 40, 10, 10);
g.FillRectangle(additionalBrush, _startPosX.Value + 50, _startPosY.Value + 90, 10, 10);
diff --git a/Stormtrooper/Stormtrooper/Entities/EntityStormtrooper.cs b/Stormtrooper/Stormtrooper/Entities/EntityStormtrooper.cs
index da05b84..bbc70c5 100644
--- a/Stormtrooper/Stormtrooper/Entities/EntityStormtrooper.cs
+++ b/Stormtrooper/Stormtrooper/Entities/EntityStormtrooper.cs
@@ -36,9 +36,6 @@ public class EntityStormtrooper : EntityAircraft
public EntityStormtrooper(int speed, double weight, Color bodyColor, Color
additionalColor, bool rocket, bool bomb, bool wing) : base(speed, weight, bodyColor)
{
- Speed = speed;
- Weight = weight;
- BodyColor = bodyColor;
AdditionalColor = additionalColor;
Rocket = rocket;
Bomb = bomb;
diff --git a/Stormtrooper/Stormtrooper/FormStormtrooper.Designer.cs b/Stormtrooper/Stormtrooper/FormStormtrooper.Designer.cs
index 3561ad3..686930c 100644
--- a/Stormtrooper/Stormtrooper/FormStormtrooper.Designer.cs
+++ b/Stormtrooper/Stormtrooper/FormStormtrooper.Designer.cs
@@ -34,6 +34,7 @@
buttonDown = new Button();
buttonLeft = new Button();
buttonRight = new Button();
+ buttonCreateAircraft = new Button();
((System.ComponentModel.ISupportInitialize)pictureBoxStormtrooper).BeginInit();
SuspendLayout();
//
@@ -50,11 +51,11 @@
// buttonCreate
//
buttonCreate.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
- buttonCreate.Location = new Point(12, 398);
+ buttonCreate.Location = new Point(12, 395);
buttonCreate.Name = "buttonCreate";
- buttonCreate.Size = new Size(94, 29);
+ buttonCreate.Size = new Size(205, 32);
buttonCreate.TabIndex = 1;
- buttonCreate.Text = "Создать";
+ buttonCreate.Text = "Создать штурмовик";
buttonCreate.UseVisualStyleBackColor = true;
buttonCreate.Click += ButtonCreate_Click;
//
@@ -106,11 +107,23 @@
buttonRight.UseVisualStyleBackColor = true;
buttonRight.Click += ButtonMove_Click;
//
+ // buttonCreateAircraft
+ //
+ buttonCreateAircraft.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
+ buttonCreateAircraft.Location = new Point(239, 395);
+ buttonCreateAircraft.Name = "buttonCreateAircraft";
+ buttonCreateAircraft.Size = new Size(205, 32);
+ buttonCreateAircraft.TabIndex = 7;
+ buttonCreateAircraft.Text = "Создать самолет";
+ buttonCreateAircraft.UseVisualStyleBackColor = true;
+ buttonCreateAircraft.Click += buttonCreateAircraft_Click;
+ //
// FormStormtrooper
//
AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(773, 439);
+ Controls.Add(buttonCreateAircraft);
Controls.Add(buttonRight);
Controls.Add(buttonLeft);
Controls.Add(buttonDown);
@@ -133,5 +146,6 @@
private Button buttonDown;
private Button buttonLeft;
private Button buttonRight;
+ private Button buttonCreateAircraft;
}
}
\ No newline at end of file
diff --git a/Stormtrooper/Stormtrooper/FormStormtrooper.cs b/Stormtrooper/Stormtrooper/FormStormtrooper.cs
index 58c6536..6ebbe5c 100644
--- a/Stormtrooper/Stormtrooper/FormStormtrooper.cs
+++ b/Stormtrooper/Stormtrooper/FormStormtrooper.cs
@@ -9,88 +9,104 @@ using System.Threading.Tasks;
using System.Windows.Forms;
using Stormtrooper.Drawnings;
-namespace Stormtrooper
+namespace Stormtrooper;
+
+public partial class FormStormtrooper : Form
{
- public partial class FormStormtrooper : Form
+ // Поле объект для прорисовки объекта
+ public DrawningAircraft? _drawningAircraft;
+ // Конструктор формы
+ public FormStormtrooper()
{
- // Поле объект для прорисовки объекта
- public DrawningStormtrooper? _drawningStormtrooper;
- // Конструктор формы
- public FormStormtrooper()
- {
- InitializeComponent();
- }
+ InitializeComponent();
+ }
- // Метод прорисовки машины
- private void FormStormtrooper_Load(object sender, EventArgs e)
- {
+ // Метод прорисовки машины
+ private void FormStormtrooper_Load(object sender, EventArgs e)
+ {
- }
-
- // Обработка нажатия кнопки Создать
- private void ButtonCreate_Click(object sender, EventArgs e)
+ }
+ ///
+ /// Создание объекта класса-перемещения
+ ///
+ /// Тип создаваемого объекта
+ private void CreateObject(string type)
+ {
+ Random random = new();
+ switch (type)
{
- Random random = new();
- _drawningStormtrooper = new DrawningStormtrooper();
- _drawningStormtrooper.Init(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)),
- Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2)));
- _drawningStormtrooper.SetPictureSize(pictureBoxStormtrooper.Width, pictureBoxStormtrooper.Height);
- _drawningStormtrooper.SetPosition(random.Next(10, 100), random.Next(10, 100));
-
- Bitmap bmp = new(pictureBoxStormtrooper.Width, pictureBoxStormtrooper.Height);
- Graphics gr = Graphics.FromImage(bmp);
- _drawningStormtrooper.DrawTransport(gr);
- pictureBoxStormtrooper.Image = bmp;
- }
- private void Draw()
- {
- if (_drawningStormtrooper == null)
- {
+ case nameof(DrawningAircraft):
+ _drawningAircraft = new DrawningAircraft(random.Next(100,
+ 300), random.Next(1000, 3000),
+ Color.FromArgb(random.Next(0, 256)));
+ break;
+ case nameof(DrawningStormtrooper):
+ _drawningAircraft = new DrawningStormtrooper(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)),
+ Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2)));
+ break;
+ default:
return;
- }
- Bitmap bmp = new(pictureBoxStormtrooper.Width,
- pictureBoxStormtrooper.Height);
- Graphics gr = Graphics.FromImage(bmp);
- _drawningStormtrooper.DrawTransport(gr);
- pictureBoxStormtrooper.Image = bmp;
}
- private void ButtonMove_Click(object sender, EventArgs e)
+ _drawningAircraft.SetPictureSize(pictureBoxStormtrooper.Width,
+ pictureBoxStormtrooper.Height);
+ _drawningAircraft.SetPosition(random.Next(10, 100), random.Next(10, 100));
+ Draw();
+ }
+
+ // Обработка нажатия кнопки Создать штурмовик
+ private void ButtonCreate_Click(object sender, EventArgs e) => CreateObject(nameof(DrawningStormtrooper));
+ // Обработка нажатия кнопки Создать самолет
+ private void buttonCreateAircraft_Click(object sender, EventArgs e) => CreateObject(nameof(DrawningAircraft));
+ // Прорисовка
+ private void Draw()
+ {
+ if (_drawningAircraft == null)
{
- if (_drawningStormtrooper == null)
- {
- return;
- }
-
- string name = ((Button)sender)?.Name ?? string.Empty;
- bool result = false;
- switch (name)
- {
- case "buttonUp":
- result = _drawningStormtrooper.MoveTransport(DirectionType.Up);
- break;
- case "buttonDown":
- result = _drawningStormtrooper.MoveTransport(DirectionType.Down);
- break;
- case "buttonLeft":
- result = _drawningStormtrooper.MoveTransport(DirectionType.Left);
- break;
- case "buttonRight":
- result = _drawningStormtrooper.MoveTransport(DirectionType.Right);
- break;
- }
- if (result)
- {
- Draw();
- }
-
-
+ return;
+ }
+ Bitmap bmp = new(pictureBoxStormtrooper.Width,
+ pictureBoxStormtrooper.Height);
+ Graphics gr = Graphics.FromImage(bmp);
+ _drawningAircraft.DrawTransport(gr);
+ pictureBoxStormtrooper.Image = bmp;
+ }
+ // Перемещение объекта по форме
+ private void ButtonMove_Click(object sender, EventArgs e)
+ {
+ if (_drawningAircraft == null)
+ {
+ return;
}
- private void pictureBoxStormtrooper_Click(object sender, EventArgs e)
+ string name = ((Button)sender)?.Name ?? string.Empty;
+ bool result = false;
+ switch (name)
{
-
+ case "buttonUp":
+ result = _drawningAircraft.MoveTransport(DirectionType.Up);
+ break;
+ case "buttonDown":
+ result = _drawningAircraft.MoveTransport(DirectionType.Down);
+ break;
+ case "buttonLeft":
+ result = _drawningAircraft.MoveTransport(DirectionType.Left);
+ break;
+ case "buttonRight":
+ result = _drawningAircraft.MoveTransport(DirectionType.Right);
+ break;
+ }
+ if (result)
+ {
+ Draw();
}
}
+
+ private void pictureBoxStormtrooper_Click(object sender, EventArgs e)
+ {
+
+ }
+
+
}