PIbd-14 Oripov SH. H. LabWork01 Simple #1

Open
Shoha12 wants to merge 2 commits from LabWork01 into main
2 changed files with 66 additions and 26 deletions
Showing only changes of commit d06167a54c - Show all commits

View File

@ -7,6 +7,9 @@ using System.Threading.Tasks;
namespace ProjectAircraft12;
/// <summary>
/// Класс, отвечающий за прорисовку и перемещение объекта-сущности
/// </summary>
public class DrawningAircraft
{
@ -43,7 +46,7 @@ public class DrawningAircraft
/// <summary>
/// Высота прорисовки самолета
/// </summary>
private readonly int _drawingAircraftHeight = 40;
private readonly int _drawingAircraftHeight = 50;
/// <summary>
/// Инициализация свойств
@ -73,9 +76,19 @@ public class DrawningAircraft
public bool SetPictureSize(int width, int height)
{
// TODO: проверка, что объект "влезает" в размеры поля
_pictureWidth = width;
_pictureHeight = height;
return true;
if (width > _drawingAircraftWidth && height > _drawingAircraftHeight)
{
_pictureWidth = width;
_pictureHeight = height;
return true;
}
else
{
return false;
}
}
/// <summary>
@ -92,9 +105,38 @@ public class DrawningAircraft
// TODO: если при установке объекта в эти координаты, он будет "выходить" за границы формы
// то надо изменить координаты, чтобы он оставался в этих границах
if (x < 0)
{
_startPosX = 0;
}
_startPosX = x;
_startPosY = y;
if(_pictureWidth < x + _drawingAircraftWidth)
{
_startPosX = _drawingAircraftWidth - _drawingAircraftWidth;
}
else
{
_startPosX = x;
}
if (y < 0)
{
_startPosY = 0;
}
if (_pictureHeight < y + _drawingAircraftWidth)
{
_startPosY = _pictureHeight - _drawingAircraftWidth;
}
else
{
_startPosY = y;
}
//_startPosX = x;
//_startPosY = y;
}
/// <summary>
@ -126,21 +168,19 @@ public class DrawningAircraft
return true;
case DirectionType.Right:
if (_startPosX.Value + EntityAircraft.Step < _pictureWidth - 60) //-60
if (_startPosX.Value + _drawingAircraftWidth + EntityAircraft.Step < _pictureWidth)
{
_startPosX += (int)EntityAircraft.Step - 20;
_startPosX += (int)EntityAircraft.Step;
}
return true;
case DirectionType.Down:
if (_startPosY.Value + EntityAircraft.Step < _pictureHeight)
if (_startPosY.Value + _drawingAircraftHeight + EntityAircraft.Step < _pictureHeight)
{
_startPosY += (int)EntityAircraft.Step;
}
return true;
}
// Если вдруг передали неизвестное направление — возврат по умолчанию
return false;
@ -196,12 +236,13 @@ public class DrawningAircraft
g.FillPolygon(bodyBrush, trianglePoints); // Закрашенный треугольник
g.DrawPolygon(pen, trianglePoints); // Контур треугольника
// бак
Rectangle rect = new Rectangle(_startPosX.Value - 5, _startPosY.Value + 5, 30, 10); // Прямоугольник от заданной точки
int radius = 4; // Радиус скругления
DrawRoundedRectangle(g, bodyBrush, Pens.Black, rect, radius);
if (EntityAircraft.ExtraFuelTanks)
{
// бак
Rectangle extraFuelTanks = new Rectangle(_startPosX.Value - 5, _startPosY.Value + 5, 30, 10); // Прямоугольник от заданной точки
int radius_extraFuelTanks = 4; // Радиус скругления
DrawRoundedRectangle(g, bodyBrush, Pens.Black, extraFuelTanks, radius_extraFuelTanks);
}
// oldi uchburchak
Point[] triangle_right = {
@ -240,11 +281,13 @@ public class DrawningAircraft
g.DrawRectangle(koliso3, _startPosX.Value + 88, _startPosY.Value + 35, 4, 4);
g.FillRectangle(brush, _startPosX.Value + 88, _startPosY.Value + 35, 4, 4);
// radar
Rectangle radar = new Rectangle(_startPosX.Value + 50, _startPosY.Value - 5, 20, 10); // Прямоугольник от заданной точки
int radius_radara = 6; // Радиус скругления
DrawRoundedRectangle(g, bodyBrush, Pens.Black, radar, radius_radara);
if (EntityAircraft.Radar)
{
// radar
Rectangle radar = new Rectangle(_startPosX.Value + 50, _startPosY.Value - 5, 20, 10); // Прямоугольник от заданной точки
int radius_radara = 6; // Радиус скругления
DrawRoundedRectangle(g, bodyBrush, Pens.Black, radar, radius_radara);
}
Pen os_radar = new Pen(Color.Black, 2); // Чёрная линия толщиной 1 пикселя
g.DrawLine(os_radar, _startPosX.Value + 60, _startPosY.Value + 10, _startPosX.Value + 60, _startPosY.Value + 5);

View File

@ -43,13 +43,10 @@ public class EntityAircraft
/// </summary>
public double Step => Speed * 100 / Weight;
public int WindowCount { get; internal set; }
public bool BodyKit { get; internal set; }
public bool Wing { get; internal set; }
/// <summary>
/// Инициализация полей объекта-класса самолета
/// </summary>
/// <param name="speed">Скорость</param>
/// <param name="weight">Вес самолета</param>
/// <param name="bodyColor">Основной цвет</param>