Entities и DrawningOblects готовы

This commit is contained in:
a.puchkina 2023-09-27 11:20:19 +04:00
parent b7dcc0892e
commit a6ecfa293f
5 changed files with 178 additions and 80 deletions

View File

@ -7,6 +7,7 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
using AirplaneWithRadar.DrawningObjects;
namespace AirplaneWithRadar namespace AirplaneWithRadar
{ {
@ -50,14 +51,11 @@ namespace AirplaneWithRadar
private void buttonCreateAirplane_Click(object sender, EventArgs e) private void buttonCreateAirplane_Click(object sender, EventArgs e)
{ {
Random random = new(); Random random = new();
_drawningAirplane = new DrawningAirplane(); _drawningAirplane = new DrawningAirplane(random.Next(100,100),random.Next(1000,3000), Color.FromArgbb(random.Next(0, 256), random.Next(0, 256),
_drawningAirplane.Init(random.Next(100, 300), random.Next(0, 256)),
random.Next(1000, 3000), pictureBoxAirplane.Width, pictureBoxAirplane.Height);
Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)), _drawningAirplane.SetPosition(random.Next(10, 100), random.Next(10,
Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)), 100));
Convert.ToBoolean(random.Next(0, 2)),
Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2)), pictureBoxAirplane.Width, pictureBoxAirplane.Height);
_drawningAirplane.SetPosition(random.Next(10, 100), random.Next(10, 100));
Draw(); Draw();
} }

View File

@ -4,8 +4,10 @@ using System.Linq;
using System.Reflection.Metadata.Ecma335; using System.Reflection.Metadata.Ecma335;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using AirplaneWithRadar.Entities;
namespace AirplaneWithRadar
namespace AirplaneWithRadar.DrawningObjects
{/// <summary> {/// <summary>
/// Класс, отвечающий за прорисовку и перемещение объекта-сущности /// Класс, отвечающий за прорисовку и перемещение объекта-сущности
/// </summary> /// </summary>
@ -14,7 +16,7 @@ namespace AirplaneWithRadar
/// <summary> /// <summary>
/// Класс-сущность /// Класс-сущность
/// </summary> /// </summary>
public EntityAirplaneWithRadar? EntityAirplaneWithRadar{ get; private set; } public EntityAirplane? EntityAirplane{ get; protected set; }
/// <summary> /// <summary>
/// Ширина окна /// Ширина окна
/// </summary> /// </summary>
@ -22,23 +24,23 @@ namespace AirplaneWithRadar
/// <summary> /// <summary>
/// Высота окна /// Высота окна
/// </summary> /// </summary>
private int _pictureHeight; private int _pictureHeight;
/// <summary> /// <summary>
/// /// Левая координата прорисовки самолета /// /// Левая координата прорисовки самолета
/// </summary> /// </summary>
private int _startPosX; protected int _startPosX;
/// <summary> /// <summary>
/// Верхняя кооридната прорисовки самолета /// Верхняя кооридната прорисовки самолета
/// </summary> /// </summary>
private int _startPosY; protected int _startPosY;
/// <summary> /// <summary>
/// Ширина прорисовки самолета /// Ширина прорисовки самолета
/// </summary> /// </summary>
private readonly int _airplaneWidth = 200; protected readonly int _airplaneWidth = 200;
/// <summary> /// <summary>
/// Высота прорисовки самолета /// Высота прорисовки самолета
/// </summary> /// </summary>
private readonly int _airplaneHeight = 85; protected readonly int _airplaneHeight = 85;
/// <summary> /// <summary>
/// Инициализация свойств /// Инициализация свойств
/// </summary> /// </summary>
@ -46,24 +48,43 @@ namespace AirplaneWithRadar
/// <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="radar">Признак наличия радара</param>
/// <param name="tank">Признак наличия доп.бака</param>
/// <param name="pin">Признак наличия штыря</param>
/// <param name="width">Ширина картинки</param> /// <param name="width">Ширина картинки</param>
/// <param name="height">Высота картинки</param> /// <param name="height">Высота картинки</param>
/// <returns>true - объект создан, false - проверка не пройдена, нельзя создать объект в этих размерах</returns> /// <returns>true - объект создан, false - проверка не пройдена, нельзя создать объект в этих размерах</returns>
public bool Init(int speed, double weight, Color bodyColor, Color public DrawningAirplane(int speed, double weight, Color bodyColor, Color
additionalColor, bool radar, bool tank, bool pin, int width, int height) additionalColor, int width, int height)
{ {
_pictureWidth = width; _pictureWidth = width;
_pictureHeight = height; _pictureHeight = height;
if (_pictureWidth < _airplaneWidth || _pictureHeight < _airplaneHeight) if (_pictureWidth < _airplaneWidth || _pictureHeight < _airplaneHeight)
{ {
return false; return;
} }
EntityAirplaneWithRadar = new EntityAirplaneWithRadar(); EntityAirplane = new EntityAirplane(speed, weight, bodyColor, additionalColor);
EntityAirplaneWithRadar.Init(speed, weight, bodyColor, additionalColor, radar, tank, pin);
return true; }
/// <summary>
/// Конструктор
/// </summary>
/// <param name="speed">Скорость</param>
/// <param name="weight">Вес</param>
/// <param name="bodyColor">Основной цвет</param>
/// <param name="width">Ширина картинки</param>
/// <param name="height">Высота картинки</param>
/// <param name="airplaneWidth">Ширина прорисовки автомобиля</param>
/// <param name="airplaneHeight">Высота прорисовки автомобиля</param>
protected DrawningAirplane(int speed, double weight, Color bodyColor, Color additionalColor, int
width, int height, int airplaneWidth, int airplaneHeight)
{
_pictureWidth = width;
_pictureHeight = height;
_airplaneWidth = airplaneWidth;
_airplaneHeight = airplaneHeight;
if (_pictureWidth < _airplaneWidth || _pictureHeight < _airplaneHeight)
{
return;
}
EntityAirplane = new EntityAirplane(speed, weight, bodyColor, additionalColor);
} }
/// <summary> /// <summary>
/// Установка позиции /// Установка позиции
@ -81,7 +102,7 @@ namespace AirplaneWithRadar
/// <param name="direction">Направление</param> /// <param name="direction">Направление</param>
public void MoveTransport(DirectionType direction) public void MoveTransport(DirectionType direction)
{ {
if (EntityAirplaneWithRadar == null) if (EntityAirplane == null)
{ {
return; return;
} }
@ -89,30 +110,30 @@ namespace AirplaneWithRadar
{ {
//влево //влево
case DirectionType.Left: case DirectionType.Left:
if (_startPosX - EntityAirplaneWithRadar.Step > 0) if (_startPosX - EntityAirplane.Step > 0)
{ {
_startPosX -= (int)EntityAirplaneWithRadar.Step; _startPosX -= (int)EntityAirplane.Step;
} }
break; break;
//вверх //вверх
case DirectionType.Up: case DirectionType.Up:
if (_startPosY - EntityAirplaneWithRadar.Step > 0) if (_startPosY - EntityAirplane.Step > 0)
{ {
_startPosY -= (int)EntityAirplaneWithRadar.Step; _startPosY -= (int)EntityAirplane.Step;
} }
break; break;
// вправо // вправо
case DirectionType.Right: case DirectionType.Right:
if (_startPosX + EntityAirplaneWithRadar.Step + _airplaneWidth < _pictureWidth) if (_startPosX + EntityAirplane.Step + _airplaneWidth < _pictureWidth)
{ {
_startPosX += (int)EntityAirplaneWithRadar.Step; _startPosX += (int)EntityAirplane.Step;
} }
break; break;
//вниз //вниз
case DirectionType.Down: case DirectionType.Down:
if (_startPosY + EntityAirplaneWithRadar.Step + _airplaneHeight < _pictureHeight) if (_startPosY + EntityAirplane.Step + _airplaneHeight < _pictureHeight)
{ {
_startPosY += (int)EntityAirplaneWithRadar.Step; _startPosY += (int)EntityAirplane.Step;
} }
break; break;
} }
@ -121,24 +142,16 @@ namespace AirplaneWithRadar
/// Прорисовка объекта /// Прорисовка объекта
/// </summary> /// </summary>
/// <param name="g"></param> /// <param name="g"></param>
public void DrawTransport(Graphics g) public virtual void DrawTransport(Graphics g)
{ {
if (EntityAirplaneWithRadar == null) if (EntityAirplane == null)
{ {
return; return;
} }
Pen penBlack = new(Color.Black); Pen penBlack = new(Color.Black);
Brush additionalBrush = new SolidBrush(EntityAirplaneWithRadar.AdditionalColor); Brush additionalBrush = new SolidBrush(EntityAirplane.AdditionalColor);
Brush bodyBrush = new SolidBrush(EntityAirplaneWithRadar.BodyColor); Brush bodyBrush = new SolidBrush(EntityAirplane.BodyColor);
// радар
if (EntityAirplaneWithRadar.Radar)
{
g.FillEllipse(additionalBrush, _startPosX + 65, _startPosY + 25, 50, 10);
g.DrawEllipse(penBlack, _startPosX + 65, _startPosY + 25, 50, 10);
g.FillRectangle(additionalBrush, _startPosX + 85, _startPosY + 35, 10, 5);
g.DrawRectangle(penBlack, _startPosX + 85, _startPosY + 35, 10, 5);
}
//фюзеляж //фюзеляж
g.FillRectangle(bodyBrush, _startPosX + 4, _startPosY + 40, 150, 30); g.FillRectangle(bodyBrush, _startPosX + 4, _startPosY + 40, 150, 30);
g.DrawRectangle(penBlack, _startPosX + 4, _startPosY + 40, 150, 30); g.DrawRectangle(penBlack, _startPosX + 4, _startPosY + 40, 150, 30);
@ -175,19 +188,6 @@ namespace AirplaneWithRadar
g.DrawLine(penBlack, new Point(_startPosX + 150, _startPosY + 72), new Point(_startPosX + 150, _startPosY + 55)); g.DrawLine(penBlack, new Point(_startPosX + 150, _startPosY + 72), new Point(_startPosX + 150, _startPosY + 55));
g.DrawLine(penBlack, new Point(_startPosX + 150, _startPosY + 72), new Point(_startPosX + 190, _startPosY + 55)); g.DrawLine(penBlack, new Point(_startPosX + 150, _startPosY + 72), new Point(_startPosX + 190, _startPosY + 55));
// Штырь
if (EntityAirplaneWithRadar.Pin)
{
g.DrawLine(penGray, new Point(_startPosX + 190, _startPosY + 55), new Point(_startPosX + 200, _startPosY + 55));
}
// бак
if (EntityAirplaneWithRadar.Tank)
{
g.FillRectangle(additionalBrush, _startPosX + 70, _startPosY + 65, 45, 15);
g.FillPolygon(additionalBrush, new Point[] { new Point(_startPosX + 70, _startPosY + 65), new Point(_startPosX + 60, _startPosY + 72), new Point(_startPosX + 70, _startPosY + 80) });
g.FillPolygon(additionalBrush, new Point[] { new Point(_startPosX + 115, _startPosY + 65), new Point(_startPosX + 125, _startPosY + 72), new Point(_startPosX + 115, _startPosY + 80) });
}
} }
} }
} }

View File

@ -0,0 +1,71 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using AirplaneWithRadar.Entities;
namespace AirplaneWithRadar.DrawningObjects
{
public class DrawningAirplaneWithRadar : DrawningAirplane
{
/// <summary>
/// Инициализация свойств
/// </summary>
/// <param name="speed">Скорость</param>
/// <param name="weight">Вес</param>
/// <param name="bodyColor">Цвет фюзеляжа</param>
/// <param name="additionalColor">Дополнительный цвет</param>
/// <param name="radar">Признак наличия радара</param>
/// <param name="tank">Признак наличия бака</param>
/// <param name="pin">Признак наличия штыря</param>
/// <param name="width">Ширина картинки</param>
/// <param name="height">Высота картинки</param>
/// <returns>true - объект создан, false - проверка не пройдена, нельзя создать объект в этих размерах</returns>
public DrawningAirplaneWithRadar(int speed, double weight, Color bodyColor, Color
additionalColor, bool radar, bool tank, bool pin, int width, int height) :
base(speed, weight, bodyColor, additionalColor, width, height, 200, 85)
{
if (EntityAirplane != null)
{
EntityAirplane = new EntityAirplaneWithRadar(speed, weight, bodyColor,
additionalColor, radar, tank, pin);
}
}
public override void DrawTransport(Graphics g)
{
if (EntityAirplane is not EntityAirplaneWithRadar airplaneWithRadar)
{
return;
}
Pen penBlack = new(Color.Black);
Brush additionalBrush = new SolidBrush(EntityAirplane.AdditionalColor);
Brush bodyBrush = new SolidBrush(EntityAirplane.BodyColor);
Pen penGray = new Pen(Color.Gray);
// радар
if (airplaneWithRadar.Radar)
{
g.FillEllipse(additionalBrush, _startPosX + 65, _startPosY + 25, 50, 10);
g.DrawEllipse(penBlack, _startPosX + 65, _startPosY + 25, 50, 10);
g.FillRectangle(additionalBrush, _startPosX + 85, _startPosY + 35, 10, 5);
g.DrawRectangle(penBlack, _startPosX + 85, _startPosY + 35, 10, 5);
}
base.DrawTransport(g);
// Штырь
if (airplaneWithRadar.Pin)
{
g.DrawLine(penGray, new Point(_startPosX + 190, _startPosY + 55), new Point(_startPosX + 200, _startPosY + 55));
}
// бак
if (airplaneWithRadar.Tank)
{
g.FillRectangle(additionalBrush, _startPosX + 70, _startPosY + 65, 45, 15);
g.FillPolygon(additionalBrush, new Point[] { new Point(_startPosX + 70, _startPosY + 65), new Point(_startPosX + 60, _startPosY + 72), new Point(_startPosX + 70, _startPosY + 80) });
g.FillPolygon(additionalBrush, new Point[] { new Point(_startPosX + 115, _startPosY + 65), new Point(_startPosX + 125, _startPosY + 72), new Point(_startPosX + 115, _startPosY + 80) });
}
}
}
}

View File

@ -4,9 +4,12 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace AirplaneWithRadar namespace AirplaneWithRadar.Entities
{ {
public class EntityAirplaneWithRadar /// <summary>
/// Класс-сущность "Самолет"
/// </summary>
public class EntityAirplane
{ {
/// <summary> /// <summary>
/// Скорость /// Скорость
@ -25,18 +28,6 @@ namespace AirplaneWithRadar
/// </summary> /// </summary>
public Color AdditionalColor { get; private set; } public Color AdditionalColor { get; private set; }
/// <summary> /// <summary>
/// Признак (опция) наличия радара
/// </summary>
public bool Radar { get; private set; }
/// <summary>
/// Признак (опция) наличия доп.бака
/// </summary>
public bool Tank { get; private set; }
/// <summary>
/// Признак (опция) наличия штыря
/// </summary>
public bool Pin { get; private set; }
/// <summary>
/// Шаг перемещения самолета /// Шаг перемещения самолета
/// </summary> /// </summary>
public double Step => (double)Speed * 100 / Weight; public double Step => (double)Speed * 100 / Weight;
@ -47,19 +38,13 @@ namespace AirplaneWithRadar
/// <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="radar">Признак наличия радара</param> public EntityAirplane(int speed, double weight, Color bodyColor, Color
/// <param name="tank">Признак наличия доп.бака</param> additionalColor)
/// <param name="pin">Признак наличия штыря</param>
public void Init(int speed, double weight, Color bodyColor, Color
additionalColor, bool radar, bool tank, bool pin)
{ {
Speed = speed; Speed = speed;
Weight = weight; Weight = weight;
BodyColor = bodyColor; BodyColor = bodyColor;
AdditionalColor = additionalColor; AdditionalColor = additionalColor;
Radar = radar;
Tank = tank;
Pin = pin;
} }
} }

View File

@ -0,0 +1,44 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace AirplaneWithRadar.Entities
{
/// <summary>
/// Класс-сущность "Самолет с радаром"
/// </summary>
public class EntityAirplaneWithRadar : EntityAirplane
{
/// <summary>
/// Признак (опция) наличия радара
/// </summary>
public bool Radar { get; private set; }
/// <summary>
/// Признак (опция) наличия доп.бака
/// </summary>
public bool Tank { get; private set; }
/// <summary>
/// Признак (опция) наличия штыря
/// </summary>
public bool Pin { get; private set; }
/// <summary>
/// Инициализация полей объекта-класса самолета с радаром
/// </summary>
/// <param name="speed">Скорость</param>
/// <param name="weight">Вес самолета</param>
/// <param name="bodyColor">Основной цвет</param>
/// <param name="additionalColor">Дополнительный цвет</param>
/// <param name="radar">Признак наличия радара</param>
/// <param name="tank">Признак наличия доп.бака</param>
/// <param name="pin">Признак наличия штыря</param>
public EntityAirplaneWithRadar(int speed, double weight, Color bodyColor, Color
additionalColor, bool radar, bool tank, bool pin)
{
Radar = radar;
Tank = tank;
Pin = pin;
}
}
}