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

This commit is contained in:
Павел Ладягин 2024-02-18 17:22:50 +04:00
parent 8b95c172a3
commit f38246d46d
4 changed files with 81 additions and 84 deletions

View File

@ -1,6 +1,4 @@
 namespace ProjectAirplaneWithRadar
namespace ProjectAirplaneWithRadar
{ {
/// <summary> /// <summary>
/// Класс, отвечающий за прорисовку и перемещение объекта-сущности /// Класс, отвечающий за прорисовку и перемещение объекта-сущности
@ -33,16 +31,15 @@ namespace ProjectAirplaneWithRadar
private int? _startPosY; private int? _startPosY;
/// <summary> /// <summary>
/// Ширина прорисовки автомобиля /// Ширина прорисовки самолета
/// </summary> /// </summary>
public const int PlaneWidth = 260; public readonly int PlaneWidth = 260;
/// <summary> /// <summary>
/// Высота прорисовки автомобиля /// Высота прорисовки самолета
/// </summary> /// </summary>
public const int PlaneHeight = 95; public readonly int PlaneHeight = 95;
public const int FormPadding = 30;
/// <summary> /// <summary>
/// Инициализация свойств /// Инициализация свойств
@ -51,13 +48,12 @@ namespace ProjectAirplaneWithRadar
/// <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="bodyKit">Признак наличия обвеса</param> /// <param name="wheels">Шасси</param>
/// <param name="wing">Признак наличия антикрыла</param> /// <param name="rocket">Ракета</param>
/// <param name="sportLine">Признак наличия гоночной полосы</param> public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool wheels, bool rocket)
public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool bodyKit, bool wing, bool sportLine)
{ {
EntityAirplaneWithRadar = new EntityAirplaneWithRadar(); EntityAirplaneWithRadar = new EntityAirplaneWithRadar();
EntityAirplaneWithRadar.Init(speed, weight, bodyColor, additionalColor, bodyKit, wing, sportLine); EntityAirplaneWithRadar.Init(speed, weight, bodyColor, additionalColor, wheels, rocket);
_pictureWidth = null; _pictureWidth = null;
_pictureHeight = null; _pictureHeight = null;
_startPosX = null; _startPosX = null;
@ -76,11 +72,19 @@ namespace ProjectAirplaneWithRadar
// если влезает, сохраняем границы и корректируем позицию объекта, если она была уже установлена // если влезает, сохраняем границы и корректируем позицию объекта, если она была уже установлена
_pictureWidth = width; _pictureWidth = width;
_pictureHeight = height; _pictureHeight = height;
if (_startPosX is null || _startPosY is null) //if (PlaneWidth < _pictureWidth || PlaneHeight < _pictureHeight)
{ //{
return false; // return false;
} //}
return SetPosition(_startPosX!.Value, _startPosY!.Value); //if ((_startPosX + PlaneWidth) < _pictureWidth)
//{
// _startPosX -= PlaneWidth + _pictureWidth;
//}
//if ((_startPosY + PlaneHeight) < _pictureHeight)
//{
// _startPosY -= PlaneHeight + _pictureHeight;
//}
return true;
} }
/// <summary> /// <summary>
@ -88,21 +92,28 @@ namespace ProjectAirplaneWithRadar
/// </summary> /// </summary>
/// <param name="x">Координата X</param> /// <param name="x">Координата X</param>
/// <param name="y">Координата Y</param> /// <param name="y">Координата Y</param>
public bool SetPosition(int x, int y) public void SetPosition(int x, int y)
{ {
if (!_pictureHeight.HasValue || !_pictureWidth.HasValue) if (!_pictureHeight.HasValue || !_pictureWidth.HasValue)
{ {
return true; return;
} }
//TODO (10:52)
_startPosX = x;
_startPosY = y;
//if (PlaneWidth < _pictureWidth || PlaneHeight < _pictureHeight)
//{
// return;
//}
//if ((_startPosX + PlaneWidth) < _pictureWidth)
//{
// _startPosX -= PlaneWidth + _pictureWidth;
//}
//if ((_startPosY + PlaneHeight) < _pictureHeight)
//{
// _startPosY -= PlaneHeight + _pictureHeight;
//}
int height = _pictureHeight.Value - PlaneHeight;
int width = _pictureWidth.Value - PlaneWidth;
// TODO если при установке объекта в эти координаты, он будет "выходить" за границы формы
// то надо изменить координаты, чтобы он оставался в этих границах
_startPosX = x < 0 ? 0 : x > width ? width : x;
_startPosY = y < 0 ? 0 : y > height ? height : y;
return (x < 0 || x > width || y < 0 || y > height) == false;
} }
/// <summary> /// <summary>
@ -136,7 +147,7 @@ namespace ProjectAirplaneWithRadar
break; break;
// вправо // вправо
case DirectionType.Right: case DirectionType.Right:
if (_startPosX.Value + step < _pictureWidth - PlaneWidth) if (_startPosX.Value + step < _pictureWidth - PlaneWidth)
{ {
_startPosX += step; _startPosX += step;
} }

View File

@ -1,6 +1,4 @@
 namespace ProjectAirplaneWithRadar
namespace ProjectAirplaneWithRadar
{ {
/// <summary> /// <summary>
/// Класс-сущность "Самолет с радаром" /// Класс-сущность "Самолет с радаром"
@ -33,14 +31,9 @@ namespace ProjectAirplaneWithRadar
public bool Wheels { get; private set; } public bool Wheels { get; private set; }
/// <summary> /// <summary>
/// Признак (опция) наличия антикрыла /// Признак (опция) наличия ракеты
/// </summary> /// </summary>
public bool Rocket { get; private set; } public bool Rocket { get; private set; }
/// <summary>
/// Признак (опция) наличия гоночной полосы
/// </summary>
public bool SportLine { get; private set; }
/// <summary> /// <summary>
/// Шаг перемещения автомобиля /// Шаг перемещения автомобиля
@ -48,25 +41,22 @@ namespace ProjectAirplaneWithRadar
public double Step => Speed * 100 / Weight; public double Step => Speed * 100 / Weight;
/// <summary> /// <summary>
/// Инициализация полей объекта-класса спортивного автомобиля /// Инициализация полей объекта-класса самолета с радаром
/// </summary> /// </summary>
/// <param name="speed">Скорость</param> /// <param name="speed">Скорость</param>
/// <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="bodyKit">Признак наличия обвеса</param> /// <param name="wheels">Шасси</param>
/// <param name="wing">Признак наличия антикрыла</param> /// <param name="rocket">Ракета</param>
/// <param name="sportLine">Признак наличия гоночной полосы</param> public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool wheels, bool rocket)
public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool wheels, bool rocket, bool sportLine)
{ {
Speed = speed; Speed = speed;
Weight = weight; Weight = weight;
BodyColor = bodyColor; BodyColor = bodyColor;
AdditionalColor = additionalColor; AdditionalColor = additionalColor;
Wheels = wheels; Wheels = wheels;
Rocket = rocket;
Rocket = rocket;
SportLine = sportLine;
} }
} }
} }

View File

@ -118,8 +118,6 @@
Controls.Add(pictureBoxAirplaneWithRadar); Controls.Add(pictureBoxAirplaneWithRadar);
Name = "FormAirplaneWithRadar"; Name = "FormAirplaneWithRadar";
Text = "Самолет с радаром"; Text = "Самолет с радаром";
Load += FormAirplaneWithRadar_Load;
ResizeEnd += FormAirplaneWithRadar_ResizeEnd;
((System.ComponentModel.ISupportInitialize)pictureBoxAirplaneWithRadar).EndInit(); ((System.ComponentModel.ISupportInitialize)pictureBoxAirplaneWithRadar).EndInit();
ResumeLayout(false); ResumeLayout(false);
} }

View File

@ -1,24 +1,28 @@
using System; namespace ProjectAirplaneWithRadar
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 ProjectAirplaneWithRadar
{ {
/// <summary>
/// Форма работы с объектом "Самолет с радаром"
/// </summary>
public partial class FormAirplaneWithRadar : Form public partial class FormAirplaneWithRadar : Form
{ {
/// <summary>
/// Поле-объект для происовки объект
/// </summary>
private DrawingAirplaneWithRadar? _drawingAirplaneWithRadar; private DrawingAirplaneWithRadar? _drawingAirplaneWithRadar;
/// <summary>
/// Конструктор формы
/// </summary>
public FormAirplaneWithRadar() public FormAirplaneWithRadar()
{ {
InitializeComponent(); InitializeComponent();
MinimumSize = new Size(DrawingAirplaneWithRadar.PlaneWidth + 40, DrawingAirplaneWithRadar.PlaneHeight + 40 + DrawingAirplaneWithRadar.FormPadding);
} }
/// <summary>
/// Обработка нажатия кнопки "Создать"
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ButtonCreate_Click(object sender, EventArgs e) private void ButtonCreate_Click(object sender, EventArgs e)
{ {
Random random = new(); Random random = new();
@ -26,20 +30,33 @@ namespace ProjectAirplaneWithRadar
_drawingAirplaneWithRadar.Init(random.Next(100, 300), random.Next(1000, 3000), _drawingAirplaneWithRadar.Init(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)));
_drawingAirplaneWithRadar.SetPictureSize(pictureBoxAirplaneWithRadar.Width, pictureBoxAirplaneWithRadar.Height); _drawingAirplaneWithRadar.SetPictureSize(pictureBoxAirplaneWithRadar.Width, pictureBoxAirplaneWithRadar.Height);
_drawingAirplaneWithRadar.SetPosition(random.Next(10, 100), random.Next(10, 100)); _drawingAirplaneWithRadar.SetPosition(random.Next(10, 100), random.Next(10, 100));
UpdatePlane(); UpdatePlane();
} }
/// <summary>
/// Метод прорисовки самолета
/// </summary>
private void UpdatePlane() private void UpdatePlane()
{ {
if (_drawingAirplaneWithRadar == null)
{
return;
}
Bitmap bmp = new(pictureBoxAirplaneWithRadar.Width, pictureBoxAirplaneWithRadar.Height); Bitmap bmp = new(pictureBoxAirplaneWithRadar.Width, pictureBoxAirplaneWithRadar.Height);
Graphics gr = Graphics.FromImage(bmp); Graphics gr = Graphics.FromImage(bmp);
_drawingAirplaneWithRadar?.DrawTransport(gr); _drawingAirplaneWithRadar?.DrawTransport(gr);
pictureBoxAirplaneWithRadar.Image = bmp; pictureBoxAirplaneWithRadar.Image = bmp;
} }
/// <summary>
/// Перемещение объекта по форме (нажатие кнопок навигации)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ButtonMove_Click(object sender, EventArgs e) private void ButtonMove_Click(object sender, EventArgs e)
{ {
if (_drawingAirplaneWithRadar == null) if (_drawingAirplaneWithRadar == null)
@ -73,26 +90,7 @@ namespace ProjectAirplaneWithRadar
_drawingAirplaneWithRadar.MoveTransport(result); _drawingAirplaneWithRadar.MoveTransport(result);
UpdatePlane(); UpdatePlane();
} }
}
}
private void FormAirplaneWithRadar_ResizeEnd(object sender, EventArgs e)
{
if (_drawingAirplaneWithRadar is null)
return;
bool outOfRange = _drawingAirplaneWithRadar.SetPictureSize(pictureBoxAirplaneWithRadar.Width, pictureBoxAirplaneWithRadar.Height);
if (outOfRange)
{
UpdatePlane();
}
}
private void FormAirplaneWithRadar_Load(object sender, EventArgs e)
{
}
} }
} }