Доделанная лабораторная №2

This commit is contained in:
alhimek17 2024-03-12 19:15:04 +04:00
parent 3a23ad0810
commit 2199a05ce4
7 changed files with 59 additions and 29 deletions

View File

@ -18,7 +18,7 @@ public class DrawningAirPlane : DrawningPlane
/// <param name="radar">Признак наличия обвеса</param>
/// <param name="dopBak">Признак наличия антикрыла</param>
/// <param name="chassi">Признак наличия гоночной полосы</param>
public DrawningAirPlane(int speed, double weight, Color bodyColor, Color additionalColor, bool radar, bool dopBak, bool chassi) : base(190, 70)
public DrawningAirPlane(int speed, double weight, Color bodyColor, Color additionalColor, bool radar, bool dopBak, bool chassi) : base(195, 70)
{
EntityPlane = new EntityAirPlane(speed, weight, bodyColor, additionalColor, radar, dopBak, chassi);
@ -46,19 +46,21 @@ public class DrawningAirPlane : DrawningPlane
}
_startPosX += 0;
_startPosY += 0;
base.DrawTransport(g);
_startPosX -= 0;
_startPosY -= 0;
if (airPlane.DopBak)
{
//бак
g.FillEllipse(additionalBrush, _startPosX.Value, _startPosY.Value + 45, 40, 20);
g.DrawEllipse(pen, _startPosX.Value, _startPosY.Value + 45, 40, 20);
}
if (airPlane.Radar)
{
//радар
g.DrawLine(pen, _startPosX.Value + 60, _startPosY.Value + 25, _startPosX.Value + 60, _startPosY.Value + 15);
g.DrawLine(pen, _startPosX.Value + 60, _startPosY.Value + 15, _startPosX.Value + 67, _startPosY.Value + 11);
@ -73,10 +75,9 @@ public class DrawningAirPlane : DrawningPlane
};
g.FillPolygon(additionalBrush, curvePoints3);
}
}
}

View File

@ -32,7 +32,7 @@ public class DrawningPlane
/// <summary>
/// Ширина прорисовки самолёта
/// </summary>
private readonly int _drawningAirPlaneWidth = 190;
private readonly int _drawningAirPlaneWidth = 195;
/// <summary>
/// Высота прорисовки самолёта
@ -91,10 +91,10 @@ public class DrawningPlane
/// <param name="drawningAirPlaneHeight">Высота прорисовки самолёта</param>
protected DrawningPlane(int drawningAirPlaneWidth, int drawningAirPlaneHeight) : this()
protected DrawningPlane(int drawningPlaneWidth, int drawningPlaneHeight) : this()
{
_drawningAirPlaneWidth = drawningAirPlaneWidth;
_drawningAirPlaneHeight = drawningAirPlaneHeight;
_drawningAirPlaneWidth = drawningPlaneWidth;
_drawningAirPlaneHeight = drawningPlaneHeight;
}
@ -109,9 +109,26 @@ public class DrawningPlane
{
// TODO проверка, что объект "влезает" в размеры поля
// если влезает, сохраняем границы и корректируем позицию объекта, если она была уже установлена
if (_drawningAirPlaneWidth > width || _drawningAirPlaneHeight > height)
{
return false;
}
_pictureWidth = width;
_pictureHeight = height;
if (_startPosX.HasValue || _startPosY.HasValue)
{
if (_startPosX + _drawningAirPlaneWidth > _pictureWidth)
{
_startPosX = _pictureWidth - _drawningAirPlaneWidth;
}
else if (_startPosX < 0) _startPosX = 0;
if (_startPosY + _drawningAirPlaneHeight > _pictureHeight)
{
_startPosY = _pictureHeight - _drawningAirPlaneHeight;
}
else if (_startPosY < 0) _startPosY = 0;
}
return true;
}
@ -203,6 +220,13 @@ public class DrawningPlane
Pen pen = new(Color.Black);
Brush additionalBrush = new SolidBrush(EntityPlane.BodyColor);
//шасси
g.DrawLine(pen, _startPosX.Value + 50, _startPosY.Value + 55, _startPosX.Value + 50, _startPosY.Value + 70);
g.DrawLine(pen, _startPosX.Value + 150, _startPosY.Value + 55, _startPosX.Value + 150, _startPosY.Value + 70);
g.FillEllipse(additionalBrush, _startPosX.Value + 40, _startPosY.Value + 65, 10, 10);
g.FillEllipse(additionalBrush, _startPosX.Value + 50, _startPosY.Value + 65, 10, 10);
g.FillEllipse(additionalBrush, _startPosX.Value + 145, _startPosY.Value + 65, 10, 10);
// корпус
Brush br = new SolidBrush(EntityPlane.BodyColor);
g.DrawRectangle(pen, _startPosX.Value, _startPosY.Value + 25, 170, 30);

View File

@ -118,6 +118,7 @@
ButtonCreatePlane.TabIndex = 6;
ButtonCreatePlane.Text = "Создать самолёт";
ButtonCreatePlane.UseVisualStyleBackColor = true;
ButtonCreatePlane.Click += ButtonCreatePlane_Click;
//
// comboBoxStrategy
//
@ -137,7 +138,7 @@
buttonStrategyStepS.TabIndex = 8;
buttonStrategyStepS.Text = "Шаг";
buttonStrategyStepS.UseVisualStyleBackColor = true;
buttonStrategyStepS.Click += buttonStrategyStepS_Click;
buttonStrategyStepS.Click += ButtonStrategyStep_Click;
//
// FormAirPlane
//

View File

@ -1,6 +1,7 @@
using ProjectAirPlane.Drawnings;
using ProjectAirPlane.MovementStrategy;
namespace ProjectAirPlane;
/// <summary>
@ -130,12 +131,9 @@ public partial class FormAirPlane : Form
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void buttonStrategyStepS_Click(object sender, EventArgs e)
private void ButtonStrategyStep_Click(object sender, EventArgs e)
{
if (_drawningPlane == null)
{
return;
}
if (_drawningPlane == null) return;
if (comboBoxStrategy.Enabled)
{
@ -149,7 +147,7 @@ public partial class FormAirPlane : Form
{
return;
}
_strategy.SetData(new MoveablePlane(_drawningPlane), pictureBoxAirPlane.Height, pictureBoxAirPlane.Width);
_strategy.SetData(new MoveablePlane(_drawningPlane), pictureBoxAirPlane.Width, pictureBoxAirPlane.Height);
}
if (_strategy == null)
@ -167,4 +165,6 @@ public partial class FormAirPlane : Form
_strategy = null;
}
}
}

View File

@ -21,4 +21,6 @@ public interface IMoveableObject
/// <param name="direction">Направление</param>
/// <returns>true - объект перемещен, false - перемещение невозможно</returns>
bool TryMoveObject(MovementDirection direction);
protected void Move();
}

View File

@ -1,5 +1,5 @@
namespace ProjectAirPlane.MovementStrategy;

namespace ProjectAirPlane.MovementStrategy;
/// <summary>
/// Стратегия перемещения объекта в центр экрана
@ -13,11 +13,9 @@ public class MoveToCenter : AbstractStrategy
{
return false;
}
return objParams.ObjectMiddleHorizontal - GetStep() <= FieldWidth / 2 && objParams.ObjectMiddleHorizontal + GetStep() >= FieldWidth / 2 &&
objParams.ObjectMiddleVertical - GetStep() <= FieldHeight / 2 && objParams.ObjectMiddleVertical + GetStep() >= FieldHeight / 2;
objParams.ObjectMiddleVertical - GetStep() <= FieldHeight / 2 && objParams.ObjectMiddleVertical + GetStep() >= FieldHeight / 2;
}
protected override void MoveToTarget()
{
ObjectParameters? objParams = GetObjectParameters;
@ -25,7 +23,6 @@ public class MoveToCenter : AbstractStrategy
{
return;
}
int diffX = objParams.ObjectMiddleHorizontal - FieldWidth / 2;
if (Math.Abs(diffX) > GetStep())
{
@ -38,7 +35,6 @@ public class MoveToCenter : AbstractStrategy
MoveRight();
}
}
int diffY = objParams.ObjectMiddleVertical - FieldHeight / 2;
if (Math.Abs(diffY) > GetStep())
{
@ -53,3 +49,4 @@ public class MoveToCenter : AbstractStrategy
}
}
}

View File

@ -58,4 +58,9 @@ public class MoveablePlane : IMoveableObject
_ => DirectionType.Unknow,
};
}
void IMoveableObject.Move()
{
throw new NotImplementedException();
}
}