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

View File

@ -1,6 +1,4 @@

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

View File

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

View File

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