изменения в лабе 2

This commit is contained in:
cyxarukk 2024-03-11 13:16:46 +04:00
parent 7f9117622a
commit a30f2a037c
6 changed files with 219 additions and 7 deletions

View File

@ -1,4 +1,4 @@
namespace ProjectCar
namespace ProjectGasMachine
{
partial class FormGasMachine
{
@ -28,7 +28,7 @@
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormGasMachine));
//System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormGasMachine));
buttonCreate = new Button();
buttonLeft = new Button();
buttonRight = new Button();
@ -53,7 +53,8 @@
// buttonLeft
//
buttonLeft.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
buttonLeft.BackgroundImage = (Image)resources.GetObject("buttonLeft.BackgroundImage");
//buttonLeft.BackgroundImage = (Image)resources.GetObject("buttonLeft.BackgroundImage");
buttonLeft.BackgroundImage = Properties.Resources.free_icon_left_arrow_10696518;
buttonLeft.BackgroundImageLayout = ImageLayout.Stretch;
buttonLeft.Location = new Point(862, 481);
buttonLeft.Name = "buttonLeft";
@ -65,7 +66,8 @@
// buttonRight
//
buttonRight.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
buttonRight.BackgroundImage = (Image)resources.GetObject("buttonRight.BackgroundImage");
//buttonRight.BackgroundImage = (Image)resources.GetObject("buttonRight.BackgroundImage");
buttonRight.BackgroundImage = Properties.Resources.free_icon_left_arrow_10696518;
buttonRight.BackgroundImageLayout = ImageLayout.Stretch;
buttonRight.Location = new Point(944, 481);
buttonRight.Name = "buttonRight";
@ -77,7 +79,8 @@
// buttonUp
//
buttonUp.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
buttonUp.BackgroundImage = (Image)resources.GetObject("buttonUp.BackgroundImage");
//buttonUp.BackgroundImage = (Image)resources.GetObject("buttonUp.BackgroundImage");
buttonUp.BackgroundImage = Properties.Resources.free_icon_left_arrow_10696518;
buttonUp.BackgroundImageLayout = ImageLayout.Stretch;
buttonUp.Location = new Point(903, 440);
buttonUp.Name = "buttonUp";
@ -89,7 +92,8 @@
// buttonDown
//
buttonDown.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
buttonDown.BackgroundImage = (Image)resources.GetObject("buttonDown.BackgroundImage");
//buttonDown.BackgroundImage = (Image)resources.GetObject("buttonDown.BackgroundImage");
buttonDown.BackgroundImage = Properties.Resources.free_icon_left_arrow_10696518;
buttonDown.BackgroundImageLayout = ImageLayout.Stretch;
buttonDown.Location = new Point(903, 481);
buttonDown.Name = "buttonDown";
@ -117,7 +121,7 @@
buttonCreateMachine.TabIndex = 6;
buttonCreateMachine.Text = "Создать орнамент на колесах";
buttonCreateMachine.UseVisualStyleBackColor = true;
buttonCreateMachine.Click += buttonCreateMachine_Click;
buttonCreateMachine.Click += ButtonCreateMachine_Click;
//
// FormGasMachine
//

View File

@ -0,0 +1,69 @@
namespace ProjectGasMachine.MovementStrategy;
/// <summary>
/// класс-стратегия перемещения объекта
/// </summary>
public abstract class AbstractStrategy
{
/// <summary>
/// перемещаемый объект
/// </summary>
private IMoveableObjects? _moveableObject;
/// <summary>
/// статус перемещения
/// </summary>
private StrategyStatus _state = StrategyStatus.NotInit;
/// <summary>
/// ширина поля
/// </summary>
protected int FieldWidth { get; private set; }
/// <summary>
/// высота поля
/// </summary>
protected int FieldHeight { get; private set; }
/// <summary>
/// статус перемещения
/// </summary>
public StrategyStatus GetStatus() { return _state; }
/// <summary>
/// установка данных
/// </summary>
/// <param name="moveableObject">перемещаемый объект</param>
/// <param name="width">ширина</param>
/// <param name="height">высота</param>
public void SetData(IMoveableObjects moveableObject, int width, int height)
{
if (moveableObject == null)
{
_state = StrategyStatus.NotInit;
return;
}
_state = StrategyStatus.InProgress;
_moveableObject = moveableObject;
FieldWidth = width;
FieldHeight = height;
}
public void MakeStep()
{
if (_state != StrategyStatus.InProgress)
{
return;
}
if (IsTargetDestination())
{
_state = StrategyStatus.Finish;
return;
}
MoveToTarget();
}
}

View File

@ -0,0 +1,24 @@
namespace ProjectGasMachine.MovementStrategy;
/// <summary>
/// интерфейс для работы с перемещаемым объектом
/// </summary>
public interface IMoveableObjects
{
/// <summary>
/// получение координаты объекта
/// </summary>
ObjectParameters? GetObjectPosition { get; }
/// <summary>
/// шаг объекта
/// </summary>
int GetStep { get; }
/// <summary>
/// попытка переместить объект в указанном направлении
/// </summary>
/// <param name="direction"></param>
/// <returns>true - объект перемещен, false - перемещение невозможно</returns>
bool TryMoveObject(MovementDirection direction);
}

View File

@ -0,0 +1,21 @@
namespace ProjectGasMachine.MovementStrategy;
public enum MovementDirection
{
/// <summary>
/// Вверх
/// </summary>
Up = 1,
/// <summary>
/// Вниз
/// </summary>
Down = 2,
/// <summary>
/// Влево
/// </summary>
Left = 3,
/// <summary>
/// Вправо
/// </summary>
Right = 4
}

View File

@ -0,0 +1,72 @@
namespace ProjectGasMachine.MovementStrategy;
public class ObjectParameters
{
/// <summary>
/// координата x
/// </summary>
private readonly int _x;
/// <summary>
/// координата y
/// </summary>
private readonly int _y;
/// <summary>
/// ширина объекта
/// </summary>
private readonly int _width;
/// <summary>
/// высота объекта
/// </summary>
private readonly int _height;
/// <summary>
/// левая граница
/// </summary>
public int LeftBorder => _x;
/// <summary>
/// верхняя граница
/// </summary>
public int TopBorder => _y;
/// <summary>
/// правая граница
/// </summary>
public int RightBorder => _x + _width;
/// <summary>
/// нижняя граница
/// </summary>
public int DownBorder => _y + _height;
/// <summary>
/// середина объекта
/// </summary>
public int ObjectMiddleHorizontal => _x + _width/2;
/// <summary>
/// середина объекта
/// </summary>
public int ObjectMiddleVertical => _y + _height / 2;
/// <summary>
/// конструктор
/// </summary>
/// <param name="x">координата x</param>
/// <param name="y">координата y</param>
/// <param name="width">ширина объекта</param>
/// <param name="height">высота объекта</param>
public ObjectParameters(int x, int y, int width, int height)
{
_x = x;
_y = y;
_width = width;
_height = height;
}
}

View File

@ -0,0 +1,22 @@
namespace ProjectGasMachine.MovementStrategy;
/// <summary>
/// статус выполнения операции перемещения
/// </summary>
public enum StrategyStatus
{
/// <summary>
/// все готово к началу
/// </summary>
NotInit,
/// <summary>
/// выполняется
/// </summary>
InProgress,
/// <summary>
/// завершено
/// </summary>
Finish
}