PIbd-12 Khasyanov A.N. LabWork01 Simple #1

Closed
Aidar wants to merge 2 commits from LabWork01 into main
4 changed files with 37 additions and 5 deletions
Showing only changes of commit c853fe4b1f - Show all commits

View File

@ -1,4 +1,5 @@
namespace ProjectLiner;
/// <summary>
/// Направление передвижения
/// </summary>

View File

@ -1,4 +1,5 @@
namespace ProjectLiner;
/// <summary>
/// Класс-прорисовка сущности "Лайнер"
/// </summary>
@ -8,30 +9,37 @@ public class DrawningLiner
/// Класс-сущность "Лайнер"
/// </summary>
public EntityLiner? EntityLiner { 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 _drawningLinerWidth = 150;
/// <summary>
/// Высота сущности "Лайнер"
/// </summary>
private readonly int _drawningLinerHeight = 65;
/// <summary>
/// Инициализация свойств
/// </summary>
@ -50,6 +58,7 @@ public class DrawningLiner
_startPosX = null;
_startPosY = null;
}
/// <summary>
/// Установка границ поля
/// </summary>
@ -64,8 +73,11 @@ public class DrawningLiner
}
_pictureWidth = width;
_pictureHeight = height;
if (_startPosX.HasValue && _startPosX + _drawningLinerWidth > width) _startPosX = _pictureWidth - _drawningLinerWidth;
if (_startPosY.HasValue && _startPosY + _drawningLinerHeight > height) _startPosY = _pictureHeight - _drawningLinerHeight;
return true;
}
/// <summary>
/// Установка позиции
/// </summary>
@ -117,6 +129,7 @@ public class DrawningLiner
_startPosX -= (int)EntityLiner.Step;
}
return true;
// Вверх
case DirectionType.Up:
if (_startPosY.Value - EntityLiner.Step > 0)
@ -124,6 +137,7 @@ public class DrawningLiner
_startPosY -= (int)EntityLiner.Step;
}
return true;
// Вправо
case DirectionType.Right:
@ -132,6 +146,7 @@ public class DrawningLiner
_startPosX += (int)EntityLiner.Step;
}
return true;
// Вниз
case DirectionType.Down:
if (_startPosY.Value + _drawningLinerHeight + EntityLiner.Step < _pictureHeight.Value)
@ -143,6 +158,7 @@ public class DrawningLiner
return false;
}
}
/// <summary>
/// Прорисовка объекта
/// </summary>
@ -156,6 +172,7 @@ public class DrawningLiner
Pen pen = new(Color.Black, 2);
Brush br = new SolidBrush(EntityLiner.BodyColor);
Brush additionalBrush = new SolidBrush(EntityLiner.AdditionalColor);
// Вторая палуба
if (EntityLiner.SecondDeck)
{
@ -175,6 +192,7 @@ public class DrawningLiner
});
}
// Бассейн
if (EntityLiner.Pool)
{
@ -183,6 +201,7 @@ public class DrawningLiner
g.DrawArc(pen, _startPosX.Value + 135, _startPosY.Value + 20, 8, 8, 180, 180);
g.DrawLine(pen, _startPosX.Value + 143, _startPosY.Value + 25, _startPosX.Value + 143, _startPosY.Value + 30);
}
// Корпус и палуба Лайнера
g.FillPolygon(br, new[]
{
@ -198,7 +217,6 @@ public class DrawningLiner
new Point(_startPosX.Value + 100, _startPosY.Value + 15),
new Point(_startPosX.Value + 105, _startPosY.Value + 30)
});
g.DrawPolygon(pen, new[]
{
new Point(_startPosX.Value + 0, _startPosY.Value + 30),
@ -213,11 +231,11 @@ public class DrawningLiner
new Point(_startPosX.Value + 100, _startPosY.Value + 15),
new Point(_startPosX.Value + 105, _startPosY.Value + 30)
});
// Якорь
g.DrawLine(pen, _startPosX.Value + 30, _startPosY.Value + 33, _startPosX.Value + 30, _startPosY.Value + 45);
g.DrawLine(pen, _startPosX.Value + 27, _startPosY.Value + 36, _startPosX.Value + 33, _startPosY.Value + 36);
g.DrawLine(pen, _startPosX.Value + 25, _startPosY.Value + 40, _startPosX.Value + 30, _startPosY.Value + 45);
g.DrawLine(pen, _startPosX.Value + 30, _startPosY.Value + 45, _startPosX.Value + 35, _startPosY.Value + 40);
}
}
}

View File

@ -1,4 +1,5 @@
namespace ProjectLiner;
/// <summary>
/// Класс-сущность "Лайнер"
/// </summary>
@ -8,30 +9,37 @@ public class EntityLiner
/// Скорость
/// </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 Color AdditionalColor { get; private set; }
/// <summary>
/// Наличие второй палубы
/// </summary>
public bool SecondDeck { get; private set; }
/// <summary>
/// Наличие бассейна
/// </summary>
public bool Pool { get; private set; }
/// <summary>
/// Шаг перемещения сущности "Лайнер"
/// </summary>
public double Step => Speed * 100 / Weight;
/// <summary>
/// Инициализация полей объекта класса "Лайнер"
/// </summary>
@ -50,4 +58,4 @@ public class EntityLiner
SecondDeck = secondDeck;
Pool = pool;
}
}
}

View File

@ -1,4 +1,5 @@
namespace ProjectLiner;
/// <summary>
/// Форма работы с объектом "Лайнер"
/// </summary>
@ -8,6 +9,7 @@ public partial class FormLiner : Form
/// Поле-объект для прорисовки объекта
/// </summary>
private DrawningLiner? _drawningLiner;
/// <summary>
/// Конструктор формы
/// </summary>
@ -15,6 +17,7 @@ public partial class FormLiner : Form
{
InitializeComponent();
}
/// <summary>
/// Метод прорисовки Лайнера
/// </summary>
@ -30,6 +33,7 @@ public partial class FormLiner : Form
_drawningLiner.DrawTransport(gr);
pictureBoxLiner.Image = bmp;
}
/// <summary>
/// Обработка нажатия кнопки "Создать"
/// </summary>
@ -48,6 +52,7 @@ public partial class FormLiner : Form
Draw();
}
/// <summary>
/// Обработка нажатия кнопок навигации движения
/// </summary>
@ -81,4 +86,4 @@ public partial class FormLiner : Form
Draw();
}
}
}
}