Лабораторная работа №1

This commit is contained in:
Aidar 2024-03-08 11:07:33 +04:00
parent 58edf8d4ec
commit c853fe4b1f
4 changed files with 37 additions and 5 deletions

View File

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

View File

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

View File

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

View File

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