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

This commit is contained in:
sheymuh 2024-03-05 21:15:28 +04:00
parent 020699ff0d
commit fa749643ec
8 changed files with 457 additions and 360 deletions

View File

@ -1,248 +0,0 @@
namespace ProjectAircraftCarrier;
internal class DrawningAircraftCarrier
{
/// <summary>
/// Класс-сущность
/// </summary>
public EntityAircraftCarrier? EntityAircraftCarrier { get; private set; }
/// <summary>
/// Ширина окна
/// </summary>
private int? _pictureWidth;
/// <summary>
/// Высота окна
/// </summary>
private int? _pictureHeight;
/// <summary>
/// Левая координата прорисовки авианосца
/// </summary>
private int? _startPosX;
/// <summary>
/// Верхняя координата прорисовки авианосца
/// </summary>
private int? _startPosY;
/// <summary>
/// Ширина прорисовки авианосца
/// </summary>
private readonly int _drawningAircraftCarrierWidth = 140;
/// <summary>
/// Высота прорисовки авианосца
/// </summary>
private readonly int _drawningAircraftCarrierHeight = 50;
/// <summary>
/// Инициализация полей объекта-класса авианосца
/// </summary>
/// <param name="speed">Скорость</param>
/// <param name="weight">Вес</param>
/// <param name="bodyColor">Основной цвет</param>
/// <param name="additionalColor">Дополнительный цвет</param>
/// <param name="deckForAircraftTakeOff">Палуба для взлета самолетов</param>
/// <param name="controlCabin">Рубка управления</param>
/// <param name="fighterJet">Истребитель</param>
public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool deckForAircraftTakeOff, bool controlCabin, bool fighterJet)
{
EntityAircraftCarrier = new EntityAircraftCarrier();
EntityAircraftCarrier.Init(speed, weight, bodyColor, additionalColor, deckForAircraftTakeOff, controlCabin, fighterJet);
_pictureWidth = null;
_pictureHeight = null;
_startPosX = null;
_startPosY = null;
}
/// <summary>
/// Установка границ поля
/// </summary>
/// <param name="width">Ширина поля</param>
/// <param name="height">Высота поля</param>
/// <returns>true - границы заданы, false - проверка не пройдена, нельзя разместить объект в этих размерах</returns>
public bool SetPictureSize(int width, int height)
{
// TODO проверка, что объект "влезает" в размеры поля
// если влезает, сохраняем границы и корректируем позицию объекта, если она была уже установлена
if (_drawningAircraftCarrierWidth <= width && _drawningAircraftCarrierHeight <= height)
{
_pictureWidth = width;
_pictureHeight = height;
if (_startPosX.HasValue && _startPosY.HasValue)
{
if (_startPosX + _drawningAircraftCarrierWidth > width)
{
_startPosX = width - _drawningAircraftCarrierWidth;
}
if (_startPosY + _drawningAircraftCarrierHeight > height)
{
_startPosY = height - _drawningAircraftCarrierHeight;
}
}
return true;
}
return false;
}
/// <summary>
/// Установка позиции
/// </summary>
/// <param name="x">Координата X</param>
/// <param name="y">Координата Y</param>
public void SetPosition(int x, int y)
{
if (!_pictureHeight.HasValue || !_pictureWidth.HasValue)
{
return;
}
// TODO если при установке объекта в эти координаты, он будет "выходить" за границы формы
// то надо изменить координаты, чтобы он оставался в этих границах
_startPosX = x;
_startPosY = y;
if (x < 0)
{
_startPosX = 0;
}
if (y < 0)
{
_startPosY = 0;
}
if (x + _drawningAircraftCarrierWidth > _pictureWidth)
{
_startPosX = _pictureWidth - _drawningAircraftCarrierWidth;
}
if (y + _drawningAircraftCarrierHeight > _pictureHeight)
{
_startPosY = _pictureHeight - _drawningAircraftCarrierHeight;
}
}
public bool MoveTransport(DirectionType direction)
{
if (EntityAircraftCarrier == null || !_startPosX.HasValue || !_startPosY.HasValue)
{
return false;
}
switch (direction)
{
// Влево
case DirectionType.Left:
if (_startPosX.Value - EntityAircraftCarrier.Step > 0)
{
_startPosX -= (int)EntityAircraftCarrier.Step;
}
return true;
// Вверх
case DirectionType.Up:
if (_startPosY.Value - EntityAircraftCarrier.Step > 0)
{
_startPosY -= (int)EntityAircraftCarrier.Step;
}
return true;
// Вправо
case DirectionType.Right:
//TODO прописать логику сдвига в право
if (_startPosX.Value + _drawningAircraftCarrierWidth + EntityAircraftCarrier.Step < _pictureWidth.Value)
{
_startPosX += (int)EntityAircraftCarrier.Step;
}
return true;
// Вниз
case DirectionType.Down:
//TODO прописать логику сдвига в вниз
if (_startPosY.Value + _drawningAircraftCarrierHeight + EntityAircraftCarrier.Step < _pictureHeight.Value)
{
_startPosY += (int)EntityAircraftCarrier.Step;
}
return true;
default:
return false;
}
}
/// <summary>
/// Прорисовка объекта
/// </summary>
/// <param name="g"></param>
public void DrawTransport(Graphics g)
{
if (EntityAircraftCarrier == null || !_startPosX.HasValue || !_startPosY.HasValue)
{
return;
}
Pen pen = new(Color.Black);
Brush additionalBrush = new SolidBrush(EntityAircraftCarrier.AdditionalColor);
Pen additionalPen = new(EntityAircraftCarrier.AdditionalColor, 2);
// Границы авианосца
g.DrawRectangle(pen, _startPosX.Value + 5, _startPosY.Value, 100, 50);
g.DrawRectangle(pen, _startPosX.Value, _startPosY.Value + 5, 5, 15);
g.DrawRectangle(pen, _startPosX.Value, _startPosY.Value + 30, 5, 15);
Point[] points =
{
new Point(_startPosX.Value + 105, _startPosY.Value),
new Point(_startPosX.Value + 120, _startPosY.Value + 15),
new Point(_startPosX.Value + 140, _startPosY.Value + 20),
new Point(_startPosX.Value + 140, _startPosY.Value + 30),
new Point(_startPosX.Value + 120, _startPosY.Value + 35),
new Point(_startPosX.Value + 105, _startPosY.Value + 50),
};
g.DrawPolygon(pen, points);
// Палуба
Brush br = new SolidBrush(EntityAircraftCarrier.BodyColor);
Brush brBlack = new SolidBrush(Color.Black);
g.FillRectangle(br, _startPosX.Value + 6, _startPosY.Value + 1, 100, 49);
g.FillPolygon(br, points);
g.FillRectangle(brBlack, _startPosX.Value, _startPosY.Value + 5, 5, 15);
g.FillRectangle(brBlack, _startPosX.Value, _startPosY.Value + 30, 5, 15);
// Палуба для взлёта самолётов
if (EntityAircraftCarrier.DeckForAircraftTakeOff)
{
Pen penYellow = new(Color.Yellow);
Point[] addPoints =
{
new Point(_startPosX.Value + 5, _startPosY.Value + 10),
new Point(_startPosX.Value + 105, _startPosY.Value),
new Point(_startPosX.Value + 120, _startPosY.Value + 15),
new Point(_startPosX.Value + 5, _startPosY.Value + 30),
};
g.DrawPolygon(pen, addPoints);
g.FillPolygon(additionalBrush, addPoints);
// Разметка
g.DrawLine(penYellow, _startPosX.Value + 10, _startPosY.Value + 20, _startPosX.Value + 105, _startPosY.Value + 8);
}
// Рубка
if (EntityAircraftCarrier.ControlCabin)
{
g.DrawEllipse(pen, _startPosX.Value + 40, _startPosY.Value + 35, 30, 10);
g.FillEllipse(additionalBrush, _startPosX.Value + 40, _startPosY.Value + 35, 30, 10);
}
// Истребитель
if (EntityAircraftCarrier.FighterJet)
{
g.DrawLine(additionalPen, _startPosX.Value + 95, _startPosY.Value + 27, _startPosX.Value + 95, _startPosY.Value + 47);
g.DrawLine(additionalPen, _startPosX.Value + 85, _startPosY.Value + 42, _startPosX.Value + 95, _startPosY.Value + 32);
g.DrawLine(additionalPen, _startPosX.Value + 95, _startPosY.Value + 32, _startPosX.Value + 105, _startPosY.Value + 42);
g.DrawLine(additionalPen, _startPosX.Value + 90, _startPosY.Value + 46, _startPosX.Value + 95, _startPosY.Value + 41);
g.DrawLine(additionalPen, _startPosX.Value + 95, _startPosY.Value + 41, _startPosX.Value + 100, _startPosY.Value + 46);
}
}
}

View File

@ -1,4 +1,4 @@
namespace ProjectAircraftCarrier; namespace ProjectAircraftCarrier_.Drawnings;
/// <summary> /// <summary>
/// Направление перемещения /// Направление перемещения

View File

@ -0,0 +1,71 @@
using ProjectAircraftCarrier_.Entities;
namespace ProjectAircraftCarrier_.Drawnings;
public class DrawningAircraftCarrier : DrawningWarship
{
/// <summary>
/// Конструктор
/// </summary>
/// <param name="speed">Скорость</param>
/// <param name="weight">Вес</param>
/// <param name="bodyColor">Основной цвет</param>
/// <param name="additionalColor">Дополнительный цвет</param>
/// <param name="deckForAircraftTakeOff">Палуба для взлета самолетов</param>
/// <param name="controlCabin">Рубка управления</param>
/// <param name="fighterJet">Истребитель</param>
public DrawningAircraftCarrier(int speed, double weight, Color bodyColor, Color additionalColor, bool deckForAircraftTakeOff, bool controlCabin, bool fighterJet) : base(140, 50)
{
EntityWarship = new EntityAircraftCarrier(speed, weight, bodyColor, additionalColor, deckForAircraftTakeOff, controlCabin, fighterJet);
}
public override void DrawTransport(Graphics g)
{
if (EntityWarship == null || EntityWarship is not EntityAircraftCarrier aircraftCarrier || !_startPosX.HasValue || !_startPosY.HasValue)
{
return;
}
Pen pen = new(Color.Black);
Brush additionalBrush = new SolidBrush(aircraftCarrier.AdditionalColor);
Pen additionalPen = new(aircraftCarrier.AdditionalColor, 2);
// Палуба для взлёта самолётов
if (aircraftCarrier.DeckForAircraftTakeOff)
{
Pen penYellow = new(Color.Yellow);
Point[] addPoints =
{
new Point(_startPosX.Value + 5, _startPosY.Value + 10),
new Point(_startPosX.Value + 105, _startPosY.Value),
new Point(_startPosX.Value + 120, _startPosY.Value + 15),
new Point(_startPosX.Value + 5, _startPosY.Value + 30),
};
g.DrawPolygon(pen, addPoints);
g.FillPolygon(additionalBrush, addPoints);
// Разметка
g.DrawLine(penYellow, _startPosX.Value + 10, _startPosY.Value + 20, _startPosX.Value + 105, _startPosY.Value + 8);
}
// Рубка
if (aircraftCarrier.ControlCabin)
{
g.DrawEllipse(pen, _startPosX.Value + 40, _startPosY.Value + 35, 30, 10);
g.FillEllipse(additionalBrush, _startPosX.Value + 40, _startPosY.Value + 35, 30, 10);
}
// Истребитель
if (aircraftCarrier.FighterJet)
{
g.DrawLine(additionalPen, _startPosX.Value + 95, _startPosY.Value + 27, _startPosX.Value + 95, _startPosY.Value + 47);
g.DrawLine(additionalPen, _startPosX.Value + 85, _startPosY.Value + 42, _startPosX.Value + 95, _startPosY.Value + 32);
g.DrawLine(additionalPen, _startPosX.Value + 95, _startPosY.Value + 32, _startPosX.Value + 105, _startPosY.Value + 42);
g.DrawLine(additionalPen, _startPosX.Value + 90, _startPosY.Value + 46, _startPosX.Value + 95, _startPosY.Value + 41);
g.DrawLine(additionalPen, _startPosX.Value + 95, _startPosY.Value + 41, _startPosX.Value + 100, _startPosY.Value + 46);
}
base.DrawTransport(g);
}
}

View File

@ -0,0 +1,220 @@
using ProjectAircraftCarrier_.Entities;
namespace ProjectAircraftCarrier_.Drawnings;
public class DrawningWarship
{
/// <summary>
/// Класс-сущность
/// </summary>
public EntityWarship? EntityWarship { get; protected set; }
/// <summary>
/// Ширина окна
/// </summary>
private int? _pictureWidth;
/// <summary>
/// Высота окна
/// </summary>
private int? _pictureHeight;
/// <summary>
/// Левая координата прорисовки военного корабля
/// </summary>
protected int? _startPosX;
/// <summary>
/// Верхняя координата прорисовки военного корабля
/// </summary>
protected int? _startPosY;
/// <summary>
/// Ширина прорисовки военного корабля
/// </summary>
private readonly int _drawningWarshipWidth = 140;
/// <summary>
/// Высота прорисовки военного корабля
/// </summary>
private readonly int _drawningWarshipHeight = 50;
/// <summary>
/// Пустой конструктор
/// </summary>
private DrawningWarship()
{
_pictureWidth = null;
_pictureHeight = null;
_startPosX = null;
_startPosY = null;
}
/// <summary>
/// Конструктор
/// </summary>
/// <param name="speed">Скорость</param>
/// <param name="weight">Вес</param>
/// <param name="bodyColor">Основной цвет</param>
public DrawningWarship(int speed, double weight, Color bodyColor) : this()
{
EntityWarship = new EntityWarship(speed, weight, bodyColor);
}
/// <summary>
/// Конструктор для наследников
/// </summary>
/// <param name="drawningCarrierWidth">Ширина прорисовки военного корабля</param>
/// <param name="drawningCarrierHeight">Высота прорисовки военного корабля</param>
protected DrawningWarship(int drawningCarrierWidth, int drawningCarrierHeight) : this()
{
_drawningWarshipWidth = drawningCarrierWidth;
_drawningWarshipHeight = drawningCarrierHeight;
}
/// <summary>
/// Установка границ поля
/// </summary>
/// <param name="width">Ширина поля</param>
/// <param name="height">Высота поля</param>
/// <returns>true - границы заданы, false - проверка не пройдена, нельзя разместить объект в этих размерах</returns>
public bool SetPictureSize(int width, int height)
{
if (_drawningWarshipWidth <= width && _drawningWarshipHeight <= height)
{
_pictureWidth = width;
_pictureHeight = height;
if (_startPosX.HasValue && _startPosY.HasValue)
{
if (_startPosX + _drawningWarshipWidth > width)
{
_startPosX = width - _drawningWarshipWidth;
}
if (_startPosY + _drawningWarshipHeight > height)
{
_startPosY = height - _drawningWarshipHeight;
}
}
return true;
}
return false;
}
/// <summary>
/// Установка позиции
/// </summary>
/// <param name="x">Координата X</param>
/// <param name="y">Координата Y</param>
public void SetPosition(int x, int y)
{
if (!_pictureHeight.HasValue || !_pictureWidth.HasValue)
{
return;
}
_startPosX = x;
_startPosY = y;
if (x < 0)
{
_startPosX = 0;
}
if (y < 0)
{
_startPosY = 0;
}
if (x + _drawningWarshipWidth > _pictureWidth)
{
_startPosX = _pictureWidth - _drawningWarshipWidth;
}
if (y + _drawningWarshipHeight > _pictureHeight)
{
_startPosY = _pictureHeight - _drawningWarshipHeight;
}
}
public bool MoveTransport(DirectionType direction)
{
if (EntityWarship == null || !_startPosX.HasValue || !_startPosY.HasValue)
{
return false;
}
switch (direction)
{
// Влево
case DirectionType.Left:
if (_startPosX.Value - EntityWarship.Step > 0)
{
_startPosX -= (int)EntityWarship.Step;
}
return true;
// Вверх
case DirectionType.Up:
if (_startPosY.Value - EntityWarship.Step > 0)
{
_startPosY -= (int)EntityWarship.Step;
}
return true;
// Вправо
case DirectionType.Right:
if (_startPosX.Value + _drawningWarshipWidth + EntityWarship.Step < _pictureWidth.Value)
{
_startPosX += (int)EntityWarship.Step;
}
return true;
// Вниз
case DirectionType.Down:
if (_startPosY.Value + _drawningWarshipHeight + EntityWarship.Step < _pictureHeight.Value)
{
_startPosY += (int)EntityWarship.Step;
}
return true;
default:
return false;
}
}
/// <summary>
/// Прорисовка объекта
/// </summary>
/// <param name="g"></param>
public virtual void DrawTransport(Graphics g)
{
if (EntityWarship == null || !_startPosX.HasValue || !_startPosY.HasValue)
{
return;
}
Pen pen = new(Color.Black);
// Границы перевозчика
g.DrawRectangle(pen, _startPosX.Value + 5, _startPosY.Value, 100, 50);
g.DrawRectangle(pen, _startPosX.Value, _startPosY.Value + 5, 5, 15);
g.DrawRectangle(pen, _startPosX.Value, _startPosY.Value + 30, 5, 15);
Point[] points =
{
new Point(_startPosX.Value + 105, _startPosY.Value),
new Point(_startPosX.Value + 120, _startPosY.Value + 15),
new Point(_startPosX.Value + 140, _startPosY.Value + 20),
new Point(_startPosX.Value + 140, _startPosY.Value + 30),
new Point(_startPosX.Value + 120, _startPosY.Value + 35),
new Point(_startPosX.Value + 105, _startPosY.Value + 50),
};
g.DrawPolygon(pen, points);
// Палуба
Brush br = new SolidBrush(EntityWarship.BodyColor);
Brush brBlack = new SolidBrush(Color.Black);
g.FillRectangle(br, _startPosX.Value + 6, _startPosY.Value + 1, 100, 49);
g.FillPolygon(br, points);
g.FillRectangle(brBlack, _startPosX.Value, _startPosY.Value + 5, 5, 15);
g.FillRectangle(brBlack, _startPosX.Value, _startPosY.Value + 30, 5, 15);
}
}

View File

@ -1,25 +1,10 @@
namespace ProjectAircraftCarrier; namespace ProjectAircraftCarrier_.Entities;
/// <summary> /// <summary>
/// Класс-сущность "Авианосец" /// Класс-сущность "Авианосец"
/// </summary> /// </summary>
public class EntityAircraftCarrier public class EntityAircraftCarrier : EntityWarship
{ {
/// <summary>
/// Скорость
/// </summary>
public int Speed { get; private set; }
/// <summary>
/// Вес
/// </summary>
public double Weight { get; private set; }
/// <summary>
/// Основной цвет
/// </summary>
public Color BodyColor { get; private set; }
/// <summary> /// <summary>
/// Дополнительный цвет (для опциональных элементов) /// Дополнительный цвет (для опциональных элементов)
/// </summary> /// </summary>
@ -40,11 +25,6 @@ public class EntityAircraftCarrier
/// </summary> /// </summary>
public bool FighterJet { get; private set; } public bool FighterJet { get; private set; }
/// <summary>
/// Шаг перемещения авианосца
/// </summary>
public double Step => Speed * 100 / Weight;
/// <summary> /// <summary>
/// Инициализация полей объекта-класса авианосца /// Инициализация полей объекта-класса авианосца
/// </summary> /// </summary>
@ -52,14 +32,11 @@ public class EntityAircraftCarrier
/// <param name="weight">Вес</param> /// <param name="weight">Вес</param>
/// <param name="bodyColor">Основной цвет</param> /// <param name="bodyColor">Основной цвет</param>
/// <param name="additionalColor">Дополнительный цвет</param> /// <param name="additionalColor">Дополнительный цвет</param>
/// <param name="deckForAircraftTakeOff">Признак наличия рубки управления</param> /// <param name="deckForAircraftTakeOff">Палуба для взлета самолетов</param>
/// <param name="controlCabin">Признак наличия рубки управления</param> /// <param name="controlCabin">Признак наличия рубки управления</param>
/// <param name="fighterJet">Признак наличия истребителя</param> /// <param name="fighterJet">Признак наличия истребителя</param>
public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool deckForAircraftTakeOff, bool controlCabin, bool fighterJet) public EntityAircraftCarrier(int speed, double weight, Color bodyColor, Color additionalColor, bool deckForAircraftTakeOff, bool controlCabin, bool fighterJet) : base(speed, weight, bodyColor)
{ {
Speed = speed;
Weight = weight;
BodyColor = bodyColor;
AdditionalColor = additionalColor; AdditionalColor = additionalColor;
DeckForAircraftTakeOff = deckForAircraftTakeOff; DeckForAircraftTakeOff = deckForAircraftTakeOff;
ControlCabin = controlCabin; ControlCabin = controlCabin;

View File

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

View File

@ -34,6 +34,7 @@
buttonDown = new Button(); buttonDown = new Button();
buttonRight = new Button(); buttonRight = new Button();
buttonUp = new Button(); buttonUp = new Button();
buttonCreateWarship = new Button();
((System.ComponentModel.ISupportInitialize)pictureBoxAircraftCarrier).BeginInit(); ((System.ComponentModel.ISupportInitialize)pictureBoxAircraftCarrier).BeginInit();
SuspendLayout(); SuspendLayout();
// //
@ -51,9 +52,9 @@
buttonCreateAircraftCarrier.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; buttonCreateAircraftCarrier.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
buttonCreateAircraftCarrier.Location = new Point(12, 601); buttonCreateAircraftCarrier.Location = new Point(12, 601);
buttonCreateAircraftCarrier.Name = "buttonCreateAircraftCarrier"; buttonCreateAircraftCarrier.Name = "buttonCreateAircraftCarrier";
buttonCreateAircraftCarrier.Size = new Size(131, 40); buttonCreateAircraftCarrier.Size = new Size(207, 40);
buttonCreateAircraftCarrier.TabIndex = 1; buttonCreateAircraftCarrier.TabIndex = 1;
buttonCreateAircraftCarrier.Text = "Создать"; buttonCreateAircraftCarrier.Text = "Создать авианосец";
buttonCreateAircraftCarrier.UseVisualStyleBackColor = true; buttonCreateAircraftCarrier.UseVisualStyleBackColor = true;
buttonCreateAircraftCarrier.Click += ButtonCreateAircraftCarrier_Click; buttonCreateAircraftCarrier.Click += ButtonCreateAircraftCarrier_Click;
// //
@ -105,11 +106,23 @@
buttonUp.UseVisualStyleBackColor = true; buttonUp.UseVisualStyleBackColor = true;
buttonUp.Click += ButtonMove_Click; buttonUp.Click += ButtonMove_Click;
// //
// buttonCreateWarship
//
buttonCreateWarship.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
buttonCreateWarship.Location = new Point(244, 601);
buttonCreateWarship.Name = "buttonCreateWarship";
buttonCreateWarship.Size = new Size(273, 40);
buttonCreateWarship.TabIndex = 7;
buttonCreateWarship.Text = "Создать военный корабль";
buttonCreateWarship.UseVisualStyleBackColor = true;
buttonCreateWarship.Click += ButtonCreateWarship_Click;
//
// FormAircraftCarrier // FormAircraftCarrier
// //
AutoScaleDimensions = new SizeF(12F, 30F); AutoScaleDimensions = new SizeF(12F, 30F);
AutoScaleMode = AutoScaleMode.Font; AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(1167, 653); ClientSize = new Size(1167, 653);
Controls.Add(buttonCreateWarship);
Controls.Add(buttonUp); Controls.Add(buttonUp);
Controls.Add(buttonRight); Controls.Add(buttonRight);
Controls.Add(buttonDown); Controls.Add(buttonDown);
@ -130,5 +143,6 @@
private Button buttonDown; private Button buttonDown;
private Button buttonRight; private Button buttonRight;
private Button buttonUp; private Button buttonUp;
private Button buttonCreateWarship;
} }
} }

View File

@ -1,22 +1,20 @@
using ProjectAircraftCarrier; using ProjectAircraftCarrier_.Drawnings;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ProjectAircraftCarrier_ namespace ProjectAircraftCarrier_;
/// <summary>
/// Форма работы с объектом "Авианосец"
/// </summary>
public partial class FormAircraftCarrier : Form
{ {
public partial class FormAircraftCarrier : Form
{
/// <summary> /// <summary>
/// Поле-объект для прорисовки объекта /// Поле-объект для прорисовки объекта
/// </summary> /// </summary>
private DrawningAircraftCarrier? _drawningAircraftCarrier; private DrawningWarship? _drawningWarship;
/// <summary>
/// Конструктор формы
/// </summary>
public FormAircraftCarrier() public FormAircraftCarrier()
{ {
InitializeComponent(); InitializeComponent();
@ -27,37 +25,60 @@ namespace ProjectAircraftCarrier_
/// </summary> /// </summary>
private void Draw() private void Draw()
{ {
if (_drawningAircraftCarrier == null) if (_drawningWarship == null)
{ {
return; return;
} }
Bitmap bmp = new(pictureBoxAircraftCarrier.Width, pictureBoxAircraftCarrier.Height); Bitmap bmp = new(pictureBoxAircraftCarrier.Width, pictureBoxAircraftCarrier.Height);
Graphics gr = Graphics.FromImage(bmp); Graphics gr = Graphics.FromImage(bmp);
_drawningAircraftCarrier.DrawTransport(gr); _drawningWarship.DrawTransport(gr);
pictureBoxAircraftCarrier.Image = bmp; pictureBoxAircraftCarrier.Image = bmp;
} }
/// <summary> /// <summary>
/// Обработка нажатия кнопки создать /// Создание объекта класса-перемещения
/// </summary> /// </summary>
/// <param name="sender"></param> /// <param name="type">Тип создаваемого объекта</param>
/// <param name="e"></param> private void CreateObject(string type)
private void ButtonCreateAircraftCarrier_Click(object sender, EventArgs e)
{ {
Random random = new(); Random random = new();
_drawningAircraftCarrier = new DrawningAircraftCarrier(); switch (type)
_drawningAircraftCarrier.Init(random.Next(100, 300), random.Next(1000, 3000), {
case nameof(DrawningWarship):
_drawningWarship = new DrawningWarship(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(DrawningAircraftCarrier):
_drawningWarship = new DrawningAircraftCarrier(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)), Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2)));
_drawningAircraftCarrier.SetPictureSize(pictureBoxAircraftCarrier.Width, pictureBoxAircraftCarrier.Height); break;
_drawningAircraftCarrier.SetPosition(random.Next(10, 100), random.Next(10, 100)); default:
return;
}
_drawningWarship.SetPictureSize(pictureBoxAircraftCarrier.Width, pictureBoxAircraftCarrier.Height);
_drawningWarship.SetPosition(random.Next(10, 100), random.Next(10, 100));
Draw(); Draw();
} }
/// <summary>
/// Обработка нажатия кнопки "Создать авианосец"
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ButtonCreateAircraftCarrier_Click(object sender, EventArgs e) => CreateObject(nameof(DrawningAircraftCarrier));
/// <summary>
/// Обработка нажатия кнопки "Создать военный корабль"
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ButtonCreateWarship_Click(object sender, EventArgs e) => CreateObject(nameof(DrawningWarship));
/// <summary> /// <summary>
/// Перемещение объекта по форме (нажатие кнопок навигации) /// Перемещение объекта по форме (нажатие кнопок навигации)
/// </summary> /// </summary>
@ -65,7 +86,7 @@ namespace ProjectAircraftCarrier_
/// <param name="e"></param> /// <param name="e"></param>
private void ButtonMove_Click(object sender, EventArgs e) private void ButtonMove_Click(object sender, EventArgs e)
{ {
if (_drawningAircraftCarrier == null) if (_drawningWarship == null)
{ {
return; return;
} }
@ -75,16 +96,16 @@ namespace ProjectAircraftCarrier_
switch (name) switch (name)
{ {
case "buttonUp": case "buttonUp":
result = _drawningAircraftCarrier.MoveTransport(DirectionType.Up); result = _drawningWarship.MoveTransport(DirectionType.Up);
break; break;
case "buttonDown": case "buttonDown":
result = _drawningAircraftCarrier.MoveTransport(DirectionType.Down); result = _drawningWarship.MoveTransport(DirectionType.Down);
break; break;
case "buttonLeft": case "buttonLeft":
result = _drawningAircraftCarrier.MoveTransport(DirectionType.Left); result = _drawningWarship.MoveTransport(DirectionType.Left);
break; break;
case "buttonRight": case "buttonRight":
result = _drawningAircraftCarrier.MoveTransport(DirectionType.Right); result = _drawningWarship.MoveTransport(DirectionType.Right);
break; break;
} }
@ -93,5 +114,6 @@ namespace ProjectAircraftCarrier_
Draw(); Draw();
} }
} }
}
} }