Compare commits
No commits in common. "2b478161f0583b49fc60dc96908d9f2a9819791c" and "5eb0454b661dd1c607c30b234525820fb734b85c" have entirely different histories.
2b478161f0
...
5eb0454b66
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,75 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
|
|
||||||
using ProjectMotorShip.DrawingObjects;
|
|
||||||
|
|
||||||
namespace ProjectMotorShip.MovementStrategy
|
|
||||||
{
|
|
||||||
public abstract class AbstractStrategy
|
|
||||||
{
|
|
||||||
private IMoveableObject? _movebleObject;
|
|
||||||
private Status _state = Status.NotInit;
|
|
||||||
protected int FieldWidth { get; private set; }
|
|
||||||
protected int FieldHeight { get; private set; }
|
|
||||||
public Status GetStatus() { return _state; }
|
|
||||||
public void SetData(IMoveableObject moveableObject, int width, int height)
|
|
||||||
{
|
|
||||||
if (moveableObject == null)
|
|
||||||
{
|
|
||||||
_state = Status.NotInit;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
_state = Status.InProgress;
|
|
||||||
_movebleObject = moveableObject;
|
|
||||||
FieldWidth = width;
|
|
||||||
FieldHeight = height;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void MakeStep()
|
|
||||||
{
|
|
||||||
if (_state != Status.InProgress)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (IsTargetDestination())
|
|
||||||
{
|
|
||||||
_state = Status.Finish;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
MoveToTarget();
|
|
||||||
}
|
|
||||||
protected bool MoveLeft() => MoveTo(DirectionType.Left);
|
|
||||||
protected bool MoveRight() => MoveTo(DirectionType.Right);
|
|
||||||
protected bool MoveUp() => MoveTo(DirectionType.Up);
|
|
||||||
protected bool MoveDown() => MoveTo(DirectionType.Down);
|
|
||||||
|
|
||||||
protected ObjectParametrs? GetObjectParametrs => _movebleObject?.GetObjectPosition;
|
|
||||||
|
|
||||||
protected int? GetStep()
|
|
||||||
{
|
|
||||||
if (_state != Status.InProgress)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return _movebleObject?.GetStep;
|
|
||||||
}
|
|
||||||
protected abstract void MoveToTarget();
|
|
||||||
protected abstract bool IsTargetDestination();
|
|
||||||
private bool MoveTo(DirectionType directionType)
|
|
||||||
{
|
|
||||||
if (_state != Status.InProgress)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (_movebleObject?.CheckCanMove(directionType) ?? false)
|
|
||||||
{
|
|
||||||
_movebleObject.MoveObject(directionType);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -3,50 +3,183 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using ProjectMotorShip.Entities;
|
|
||||||
|
|
||||||
namespace ProjectMotorShip.DrawingObjects
|
namespace ProjectMotorShip
|
||||||
{
|
{
|
||||||
public class DrawningMotorShip : DrawningShip
|
public class DrawningMotorShip
|
||||||
{
|
{
|
||||||
public DrawningMotorShip(int speed, double weight,
|
/// <summary>
|
||||||
Color mainColor, Color optionalColor, bool pipes,
|
/// Класс-сущность
|
||||||
bool fuelCompartment, int width, int height) :
|
/// </summary>
|
||||||
base(speed, weight, mainColor, width, height, 100, 60)
|
public EntityMotorShip? EntityMotorShip { get; private set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Ширина окна
|
||||||
|
/// </summary>
|
||||||
|
private int _pictureWidth;
|
||||||
|
/// <summary>
|
||||||
|
/// Высота окна
|
||||||
|
/// </summary>
|
||||||
|
private int _pictureHeight;
|
||||||
|
/// <summary>
|
||||||
|
/// Левая координата прорисовки автомобиля
|
||||||
|
/// </summary>
|
||||||
|
private int _startPosX;
|
||||||
|
/// <summary>
|
||||||
|
/// Верхняя кооридната прорисовки автомобиля
|
||||||
|
/// </summary>
|
||||||
|
private int _startPosY;
|
||||||
|
/// <summary>
|
||||||
|
/// Ширина прорисовки автомобиля
|
||||||
|
/// </summary>
|
||||||
|
private readonly int _MotorShipWidth = 100;
|
||||||
|
/// <summary>
|
||||||
|
/// Высота прорисовки автомобиля
|
||||||
|
/// </summary>
|
||||||
|
private readonly int _MotorShipHeight = 70;
|
||||||
|
/// <summary>
|
||||||
|
/// Инициализация свойств
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="speed">Скорость</param>
|
||||||
|
/// <param name="weight">Вес</param>
|
||||||
|
/// <param name="bodyColor">Цвет корпуса</param>
|
||||||
|
/// <param name="additionalColor">Дополнительный цвет</param>
|
||||||
|
/// <param name="pipes">Признак наличия труб</param>
|
||||||
|
/// <param name="section">Признак наличия отсека для топлива</param>
|
||||||
|
/// <param name="width">Ширина картинки</param>
|
||||||
|
/// <param name="height">Высота картинки</param>
|
||||||
|
/// <returns>true - объект создан, false - проверка не пройдена,нельзя создать объект в этих размерах</returns>
|
||||||
|
public bool Init(int speed, double weight, Color bodyColor, Color additionalColor, bool pipes, bool section,
|
||||||
|
int width, int height)
|
||||||
{
|
{
|
||||||
if (EntityShip != null)
|
if (width < _MotorShipWidth || height < _MotorShipHeight)
|
||||||
{
|
{
|
||||||
EntityShip = new EntityMotorShip(speed, weight, mainColor,
|
return false;
|
||||||
optionalColor, pipes, fuelCompartment);
|
|
||||||
}
|
}
|
||||||
|
_pictureWidth = width;
|
||||||
|
_pictureHeight = height;
|
||||||
|
EntityMotorShip = new EntityMotorShip();
|
||||||
|
EntityMotorShip.Init(speed, weight, bodyColor, additionalColor, pipes, section);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
/// <summary>
|
||||||
public override void DrawTrasport(Graphics g)
|
/// Установка позиции
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="x">Координата X</param>
|
||||||
|
/// <param name="y">Координата Y</param>
|
||||||
|
public void SetPosition(int x, int y)
|
||||||
{
|
{
|
||||||
if (EntityShip is not EntityMotorShip motorShip)
|
/// <summary>
|
||||||
|
/// Проверка, что x и y не выходят за пределы формы
|
||||||
|
/// </summary>
|
||||||
|
if (x < 0 || x + _MotorShipWidth > _pictureWidth)
|
||||||
|
{
|
||||||
|
x = 20;
|
||||||
|
}
|
||||||
|
if (y < 0 || y + _MotorShipHeight > _pictureHeight)
|
||||||
|
{
|
||||||
|
y = 20;
|
||||||
|
}
|
||||||
|
_startPosX = x;
|
||||||
|
_startPosY = y;
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Изменение направления перемещения
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="direction">Направление</param>
|
||||||
|
public void MoveTransport(DirectionType direction)
|
||||||
|
{
|
||||||
|
if (EntityMotorShip == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
switch (direction)
|
||||||
|
{
|
||||||
|
//влево
|
||||||
|
case DirectionType.Left:
|
||||||
|
if (_startPosX - EntityMotorShip.Step > 0)
|
||||||
|
{
|
||||||
|
_startPosX -= (int)EntityMotorShip.Step;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
//вверх
|
||||||
|
case DirectionType.Up:
|
||||||
|
if (_startPosY - EntityMotorShip.Step > 0)
|
||||||
|
{
|
||||||
|
_startPosY -= (int)EntityMotorShip.Step;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
// вправо
|
||||||
|
case DirectionType.Right:
|
||||||
|
if (_startPosX + _MotorShipWidth + EntityMotorShip.Step < _pictureWidth)
|
||||||
|
{
|
||||||
|
_startPosX += (int)EntityMotorShip.Step;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
//вниз
|
||||||
|
case DirectionType.Down:
|
||||||
|
if (_startPosY + _MotorShipHeight + EntityMotorShip.Step < _pictureHeight)
|
||||||
|
{
|
||||||
|
_startPosY += (int)EntityMotorShip.Step;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Прорисовка объекта
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="g"></param>
|
||||||
|
public void DrawTransport(Graphics g)
|
||||||
|
{
|
||||||
|
if (EntityMotorShip == null)
|
||||||
{
|
{
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
}
|
}
|
||||||
Pen pen = new(Color.Black);
|
Pen pen = new(Color.Black);
|
||||||
Brush optionalBrush = new SolidBrush(motorShip.OptionalColor);
|
Brush optionalBrush = new SolidBrush(EntityMotorShip.BodyColor);
|
||||||
if (motorShip.Pipes)
|
if (EntityMotorShip.Pipes)
|
||||||
{
|
{
|
||||||
g.FillRectangle(optionalBrush, _startPosX + 70, _startPosY, 10, 30);
|
g.FillRectangle(optionalBrush, _startPosX + 70, _startPosY, 10, 30);
|
||||||
g.FillRectangle(optionalBrush, _startPosX + 50, _startPosY + 10, 10, 20);
|
g.FillRectangle(optionalBrush, _startPosX + 50, _startPosY + 10, 10, 20);
|
||||||
g.DrawRectangle(pen, _startPosX + 50, _startPosY + 10, 10, 20);
|
g.DrawRectangle(pen, _startPosX + 50, _startPosY + 10, 10, 20);
|
||||||
g.DrawRectangle(pen, _startPosX + 70, _startPosY, 10, 30);
|
g.DrawRectangle(pen, _startPosX + 70, _startPosY, 10, 30);
|
||||||
}
|
}
|
||||||
if (motorShip.FuelCompartment)
|
if (EntityMotorShip.Section)
|
||||||
{
|
{
|
||||||
g.FillRectangle(optionalBrush, _startPosX + 10, _startPosY + 30, 10, 10);
|
g.FillRectangle(optionalBrush, _startPosX + 10, _startPosY + 30, 10, 10);
|
||||||
g.DrawRectangle(pen, _startPosX + 10, _startPosY + 30, 10, 10);
|
g.DrawRectangle(pen, _startPosX + 10, _startPosY + 30, 10, 10);
|
||||||
}
|
}
|
||||||
_startPosY += 30;
|
Brush mainBrush = new SolidBrush(EntityMotorShip.AdditionalColor);
|
||||||
base.DrawTrasport(g);
|
//палуба
|
||||||
_startPosY -= 30;
|
g.FillRectangle(mainBrush, _startPosX + 30, _startPosY + 30, 60, 10);
|
||||||
|
g.DrawRectangle(pen, _startPosX + 30, _startPosY + 30, 60, 10);
|
||||||
|
//корпус
|
||||||
|
g.FillPolygon(mainBrush, new Point[]
|
||||||
|
{
|
||||||
|
new Point(_startPosX, _startPosY + 40),
|
||||||
|
new Point(_startPosX + 100, _startPosY + 40),
|
||||||
|
new Point(_startPosX + 90, _startPosY + 60),
|
||||||
|
new Point(_startPosX + 20, _startPosY + 60),
|
||||||
|
new Point(_startPosX, _startPosY + 40),
|
||||||
|
}
|
||||||
|
);
|
||||||
|
g.DrawPolygon(pen, new Point[]
|
||||||
|
{
|
||||||
|
new Point(_startPosX, _startPosY + 40),
|
||||||
|
new Point(_startPosX + 100, _startPosY + 40),
|
||||||
|
new Point(_startPosX + 90, _startPosY + 60),
|
||||||
|
new Point(_startPosX + 20, _startPosY + 60),
|
||||||
|
new Point(_startPosX, _startPosY + 40),
|
||||||
|
}
|
||||||
|
);
|
||||||
|
//якорь
|
||||||
|
g.DrawLine(pen, _startPosX + 25, _startPosY + 45, _startPosX + 25, _startPosY + 55);
|
||||||
|
g.DrawLine(pen, _startPosX + 20, _startPosY + 50, _startPosX + 30, _startPosY + 50);
|
||||||
|
g.DrawLine(pen, _startPosX + 23, _startPosY + 55, _startPosX + 27, _startPosY + 55);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal void Init(int v1, int v2, Color color1, Color color2, bool v3, bool v4, bool v5, int width, int height)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,37 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using ProjectMotorShip.DrawingObjects;
|
|
||||||
|
|
||||||
|
|
||||||
namespace ProjectMotorShip.MovementStrategy
|
|
||||||
{
|
|
||||||
public class DrawningObjectShip : IMoveableObject
|
|
||||||
{
|
|
||||||
private readonly DrawningShip? _drawningShip = null;
|
|
||||||
public DrawningObjectShip(DrawningShip drawningShip)
|
|
||||||
{
|
|
||||||
_drawningShip = drawningShip;
|
|
||||||
}
|
|
||||||
public ObjectParametrs? GetObjectPosition
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (_drawningShip == null || _drawningShip.EntityShip == null)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return new ObjectParametrs(_drawningShip.GetPosX,
|
|
||||||
_drawningShip.GetPosY, _drawningShip.GetWidth,
|
|
||||||
_drawningShip.GetHeight);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public int GetStep => (int)(_drawningShip?.EntityShip?.Step ?? 0);
|
|
||||||
public bool CheckCanMove(DirectionType direction) =>
|
|
||||||
_drawningShip?.CanMove(direction) ?? false;
|
|
||||||
public void MoveObject(DirectionType direction) =>
|
|
||||||
_drawningShip?.MoveTransport(direction);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,132 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using ProjectMotorShip.Entities;
|
|
||||||
|
|
||||||
namespace ProjectMotorShip.DrawingObjects
|
|
||||||
{
|
|
||||||
public class DrawningShip
|
|
||||||
{
|
|
||||||
public EntityShip? EntityShip { get; protected set; }
|
|
||||||
private int _pictureWidth;
|
|
||||||
private int _pictureHeight;
|
|
||||||
protected int _startPosX;
|
|
||||||
protected int _startPosY;
|
|
||||||
protected readonly int _shipWidth = 100;
|
|
||||||
protected readonly int _shipHeight = 30;
|
|
||||||
|
|
||||||
public DrawningShip(int speed, double weight, Color mainColor, int width, int heigth)
|
|
||||||
{
|
|
||||||
if (width <= _shipWidth || heigth <= _shipHeight)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
_pictureWidth = width;
|
|
||||||
_pictureHeight = heigth;
|
|
||||||
EntityShip = new EntityShip(speed, weight, mainColor);
|
|
||||||
}
|
|
||||||
protected DrawningShip(int speed, double weight,
|
|
||||||
Color mainColor, int width, int heigth,
|
|
||||||
int shipWidth, int shipHeight)
|
|
||||||
{
|
|
||||||
if (width <= shipWidth || heigth <= shipHeight)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
_pictureHeight = heigth;
|
|
||||||
_pictureWidth = width;
|
|
||||||
_shipHeight = shipHeight;
|
|
||||||
_shipWidth = shipWidth;
|
|
||||||
EntityShip = new EntityShip(speed, weight, mainColor);
|
|
||||||
}
|
|
||||||
public void SetPosition(int x, int y)
|
|
||||||
{
|
|
||||||
if (x < 0 || y < 0 || x + _shipWidth > _pictureWidth || y + _shipHeight > _pictureHeight)
|
|
||||||
{
|
|
||||||
x = 10;
|
|
||||||
y = 10;
|
|
||||||
}
|
|
||||||
_startPosX = x;
|
|
||||||
_startPosY = y;
|
|
||||||
}
|
|
||||||
public int GetPosX => _startPosX;
|
|
||||||
public int GetPosY => _startPosY;
|
|
||||||
public int GetWidth => _shipWidth;
|
|
||||||
public int GetHeight => _shipHeight;
|
|
||||||
public bool CanMove(DirectionType direction)
|
|
||||||
{
|
|
||||||
if (EntityShip == null)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return direction switch
|
|
||||||
{
|
|
||||||
DirectionType.Left => _startPosX - EntityShip.Step > 0,
|
|
||||||
DirectionType.Up => _startPosY - EntityShip.Step > 0,
|
|
||||||
DirectionType.Right => _startPosX + EntityShip.Step + _shipWidth <= _pictureWidth,
|
|
||||||
DirectionType.Down => _startPosY + EntityShip.Step + _shipHeight <= _pictureHeight,
|
|
||||||
_ => false,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
public void MoveTransport(DirectionType direction)
|
|
||||||
{
|
|
||||||
if (!CanMove(direction) || EntityShip == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
switch (direction)
|
|
||||||
{
|
|
||||||
case DirectionType.Left:
|
|
||||||
_startPosX -= (int)EntityShip.Step;
|
|
||||||
break;
|
|
||||||
case DirectionType.Up:
|
|
||||||
_startPosY -= (int)EntityShip.Step;
|
|
||||||
break;
|
|
||||||
case DirectionType.Right:
|
|
||||||
_startPosX += (int)EntityShip.Step;
|
|
||||||
break;
|
|
||||||
case DirectionType.Down:
|
|
||||||
_startPosY += (int)EntityShip.Step;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public virtual void DrawTrasport(Graphics g)
|
|
||||||
{
|
|
||||||
if (EntityShip == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Pen pen = new(Color.Black);
|
|
||||||
Brush mainBrush = new SolidBrush(EntityShip.MainColor);
|
|
||||||
//палуба
|
|
||||||
g.FillRectangle(mainBrush, _startPosX + 30, _startPosY, 60, 10);
|
|
||||||
g.DrawRectangle(pen, _startPosX + 30, _startPosY, 60, 10);
|
|
||||||
//корпус
|
|
||||||
g.FillPolygon(mainBrush, new Point[]
|
|
||||||
{
|
|
||||||
new Point(_startPosX, _startPosY + 10),
|
|
||||||
new Point(_startPosX + 100, _startPosY + 10),
|
|
||||||
new Point(_startPosX + 90, _startPosY + 30),
|
|
||||||
new Point(_startPosX + 20, _startPosY + 30),
|
|
||||||
new Point(_startPosX, _startPosY + 10),
|
|
||||||
}
|
|
||||||
);
|
|
||||||
g.DrawPolygon(pen, new Point[]
|
|
||||||
{
|
|
||||||
new Point(_startPosX, _startPosY + 10),
|
|
||||||
new Point(_startPosX + 100, _startPosY + 10),
|
|
||||||
new Point(_startPosX + 90, _startPosY + 30),
|
|
||||||
new Point(_startPosX + 20, _startPosY + 30),
|
|
||||||
new Point(_startPosX, _startPosY + 10),
|
|
||||||
}
|
|
||||||
);
|
|
||||||
//якорь
|
|
||||||
g.DrawLine(pen, _startPosX + 25, _startPosY + 15, _startPosX + 25, _startPosY + 25);
|
|
||||||
g.DrawLine(pen, _startPosX + 20, _startPosY + 20, _startPosX + 30, _startPosY + 20);
|
|
||||||
g.DrawLine(pen, _startPosX + 23, _startPosY + 25, _startPosX + 27, _startPosY + 25);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -5,20 +5,56 @@ using System.Text;
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using static System.Collections.Specialized.BitVector32;
|
using static System.Collections.Specialized.BitVector32;
|
||||||
|
|
||||||
namespace ProjectMotorShip.Entities
|
namespace ProjectMotorShip
|
||||||
{
|
{
|
||||||
public class EntityMotorShip : EntityShip
|
public class EntityMotorShip
|
||||||
{
|
{
|
||||||
public Color OptionalColor { get; private set; }
|
/// <summary>
|
||||||
|
/// Скорость
|
||||||
|
/// </summary>
|
||||||
|
public int Speed { get; private set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Вес
|
||||||
|
/// </summary>
|
||||||
|
public double Weight { get; private set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Основной цвет
|
||||||
|
/// </summary>
|
||||||
|
public Color BodyColor { get; private set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Дополнительный цвет (для опциональных элементов)
|
||||||
|
/// </summary>
|
||||||
|
public Color AdditionalColor { get; private set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Признак (опция) наличия труб
|
||||||
|
/// </summary>
|
||||||
public bool Pipes { get; private set; }
|
public bool Pipes { get; private set; }
|
||||||
public bool FuelCompartment { get; private set; }
|
/// <summary>
|
||||||
public EntityMotorShip(int speed, double weight,
|
/// Признак (опция) наличия отсека для топлива
|
||||||
Color mainColor, Color optionalColor,
|
/// </summary>
|
||||||
bool pipes, bool fuelCompartment) : base(speed, weight, mainColor)
|
public bool Section { get; private set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Шаг перемещения теплохода
|
||||||
|
/// </summary>
|
||||||
|
public double Step => (double)Speed * 100 / Weight;
|
||||||
|
/// <summary>
|
||||||
|
/// Инициализация полей объекта-класса спортивного автомобиля
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="speed">Скорость</param>
|
||||||
|
/// <param name="weight">Вес теплохода</param>
|
||||||
|
/// <param name="bodyColor">Основной цвет</param>
|
||||||
|
/// <param name="additionalColor">Дополнительный цвет</param>
|
||||||
|
/// <param name="pipes">Признак наличия труб</param>
|
||||||
|
/// <param name="section">Признак наличия отсека для топлива</param>
|
||||||
|
public void Init(int speed, double weight, Color bodyColor, Color
|
||||||
|
additionalColor, bool pipes, bool section)
|
||||||
{
|
{
|
||||||
OptionalColor = optionalColor;
|
Speed = speed;
|
||||||
|
Weight = weight;
|
||||||
|
BodyColor = bodyColor;
|
||||||
|
AdditionalColor = additionalColor;
|
||||||
Pipes = pipes;
|
Pipes = pipes;
|
||||||
FuelCompartment = fuelCompartment;
|
Section = section;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,22 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace ProjectMotorShip.Entities
|
|
||||||
{
|
|
||||||
public class EntityShip
|
|
||||||
{
|
|
||||||
public int Speed { get; private set; }
|
|
||||||
public double Weight { get; private set; }
|
|
||||||
public Color MainColor { get; private set; }
|
|
||||||
public double Step => (double)Speed * 100 / Weight;
|
|
||||||
public EntityShip(int speed, double weight, Color mainColor)
|
|
||||||
{
|
|
||||||
Speed = speed;
|
|
||||||
Weight = weight;
|
|
||||||
MainColor = mainColor;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,16 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace ProjectMotorShip.MovementStrategy
|
|
||||||
{
|
|
||||||
public interface IMoveableObject
|
|
||||||
{
|
|
||||||
ObjectParametrs? GetObjectPosition { get; }
|
|
||||||
int GetStep { get; }
|
|
||||||
bool CheckCanMove(DirectionType direction);
|
|
||||||
void MoveObject(DirectionType direction);
|
|
||||||
}
|
|
||||||
}
|
|
@ -34,9 +34,6 @@
|
|||||||
this.buttonRight = new System.Windows.Forms.Button();
|
this.buttonRight = new System.Windows.Forms.Button();
|
||||||
this.buttonUp = new System.Windows.Forms.Button();
|
this.buttonUp = new System.Windows.Forms.Button();
|
||||||
this.buttonDown = new System.Windows.Forms.Button();
|
this.buttonDown = new System.Windows.Forms.Button();
|
||||||
this.comboBoxStrategy = new System.Windows.Forms.ComboBox();
|
|
||||||
this.buttonStep = new System.Windows.Forms.Button();
|
|
||||||
this.buttonCreateShip = new System.Windows.Forms.Button();
|
|
||||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
@ -53,11 +50,11 @@
|
|||||||
// buttonCreate
|
// buttonCreate
|
||||||
//
|
//
|
||||||
this.buttonCreate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
this.buttonCreate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||||
this.buttonCreate.Location = new System.Drawing.Point(39, 402);
|
this.buttonCreate.Location = new System.Drawing.Point(62, 402);
|
||||||
this.buttonCreate.Name = "buttonCreate";
|
this.buttonCreate.Name = "buttonCreate";
|
||||||
this.buttonCreate.Size = new System.Drawing.Size(144, 29);
|
this.buttonCreate.Size = new System.Drawing.Size(94, 29);
|
||||||
this.buttonCreate.TabIndex = 1;
|
this.buttonCreate.TabIndex = 1;
|
||||||
this.buttonCreate.Text = "Создать теплоход";
|
this.buttonCreate.Text = "Создать";
|
||||||
this.buttonCreate.UseVisualStyleBackColor = true;
|
this.buttonCreate.UseVisualStyleBackColor = true;
|
||||||
this.buttonCreate.Click += new System.EventHandler(this.buttonCreate_Click_1);
|
this.buttonCreate.Click += new System.EventHandler(this.buttonCreate_Click_1);
|
||||||
//
|
//
|
||||||
@ -107,44 +104,11 @@
|
|||||||
this.buttonDown.UseVisualStyleBackColor = true;
|
this.buttonDown.UseVisualStyleBackColor = true;
|
||||||
this.buttonDown.Click += new System.EventHandler(this.buttonMove_Click);
|
this.buttonDown.Click += new System.EventHandler(this.buttonMove_Click);
|
||||||
//
|
//
|
||||||
// comboBoxStrategy
|
|
||||||
//
|
|
||||||
this.comboBoxStrategy.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
|
||||||
this.comboBoxStrategy.FormattingEnabled = true;
|
|
||||||
this.comboBoxStrategy.Items.AddRange(new object[] {
|
|
||||||
"1",
|
|
||||||
"2"});
|
|
||||||
this.comboBoxStrategy.Location = new System.Drawing.Point(719, 23);
|
|
||||||
this.comboBoxStrategy.Name = "comboBoxStrategy";
|
|
||||||
this.comboBoxStrategy.Size = new System.Drawing.Size(151, 28);
|
|
||||||
this.comboBoxStrategy.TabIndex = 6;
|
|
||||||
//
|
|
||||||
// buttonStep
|
|
||||||
//
|
|
||||||
this.buttonStep.Location = new System.Drawing.Point(782, 57);
|
|
||||||
this.buttonStep.Name = "buttonStep";
|
|
||||||
this.buttonStep.Size = new System.Drawing.Size(88, 29);
|
|
||||||
this.buttonStep.TabIndex = 7;
|
|
||||||
this.buttonStep.Text = "Шаг";
|
|
||||||
this.buttonStep.UseVisualStyleBackColor = true;
|
|
||||||
this.buttonStep.Click += new System.EventHandler(this.buttonStep_Click);
|
|
||||||
//
|
|
||||||
// buttonCreateShip
|
|
||||||
//
|
|
||||||
this.buttonCreateShip.Location = new System.Drawing.Point(201, 402);
|
|
||||||
this.buttonCreateShip.Name = "buttonCreateShip";
|
|
||||||
this.buttonCreateShip.Size = new System.Drawing.Size(153, 29);
|
|
||||||
this.buttonCreateShip.TabIndex = 8;
|
|
||||||
this.buttonCreateShip.Text = "Создать корабль";
|
|
||||||
this.buttonCreateShip.UseVisualStyleBackColor = true;
|
|
||||||
this.buttonCreateShip.Click += new System.EventHandler(this.buttonCreateShip_Click);
|
|
||||||
//
|
|
||||||
// MotorShip
|
// MotorShip
|
||||||
//
|
//
|
||||||
|
// this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F);
|
||||||
|
// this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
this.ClientSize = new System.Drawing.Size(882, 453);
|
this.ClientSize = new System.Drawing.Size(882, 453);
|
||||||
this.Controls.Add(this.buttonCreateShip);
|
|
||||||
this.Controls.Add(this.buttonStep);
|
|
||||||
this.Controls.Add(this.comboBoxStrategy);
|
|
||||||
this.Controls.Add(this.buttonDown);
|
this.Controls.Add(this.buttonDown);
|
||||||
this.Controls.Add(this.buttonUp);
|
this.Controls.Add(this.buttonUp);
|
||||||
this.Controls.Add(this.buttonRight);
|
this.Controls.Add(this.buttonRight);
|
||||||
@ -167,8 +131,5 @@
|
|||||||
private Button buttonRight;
|
private Button buttonRight;
|
||||||
private Button buttonUp;
|
private Button buttonUp;
|
||||||
private Button buttonDown;
|
private Button buttonDown;
|
||||||
private ComboBox comboBoxStrategy;
|
|
||||||
private Button buttonStep;
|
|
||||||
private Button buttonCreateShip;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,9 +1,4 @@
|
|||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
|
|
||||||
using ProjectMotorShip.DrawingObjects;
|
|
||||||
using ProjectMotorShip.MovementStrategy;
|
|
||||||
using Status = ProjectMotorShip.MovementStrategy.Status;
|
|
||||||
using Button = System.Windows.Forms.Button;
|
|
||||||
|
|
||||||
namespace ProjectMotorShip
|
namespace ProjectMotorShip
|
||||||
{
|
{
|
||||||
@ -13,10 +8,7 @@ namespace ProjectMotorShip
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Ïîëå-îáúåêò äëÿ ïðîðèñîâêè îáúåêòà
|
/// Ïîëå-îáúåêò äëÿ ïðîðèñîâêè îáúåêòà
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private DrawningShip? _drawningShip;
|
private DrawningMotorShip? _drawningMotorShip;
|
||||||
private AbstractStrategy? _abstractStrategy;
|
|
||||||
private object _drawingShip;
|
|
||||||
|
|
||||||
public MotorShip()
|
public MotorShip()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
@ -26,18 +18,18 @@ namespace ProjectMotorShip
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private void Draw()
|
private void Draw()
|
||||||
{
|
{
|
||||||
if (_drawningShip == null)
|
if (_drawningMotorShip == null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Bitmap bmp = new(pictureBox1.Width, pictureBox1.Height);
|
Bitmap bmp = new(pictureBox1.Width, pictureBox1.Height);
|
||||||
Graphics gr = Graphics.FromImage(bmp);
|
Graphics gr = Graphics.FromImage(bmp);
|
||||||
_drawningShip.DrawTrasport(gr); pictureBox1.Image = bmp;
|
_drawningMotorShip.DrawTransport(gr); pictureBox1.Image = bmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void buttonMove_Click(object sender, EventArgs e)
|
private void buttonMove_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (_drawningShip == null)
|
if (_drawningMotorShip == null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -45,16 +37,16 @@ namespace ProjectMotorShip
|
|||||||
switch (name)
|
switch (name)
|
||||||
{
|
{
|
||||||
case "buttonUp":
|
case "buttonUp":
|
||||||
_drawningShip.MoveTransport(DirectionType.Up);
|
_drawningMotorShip.MoveTransport(DirectionType.Up);
|
||||||
break;
|
break;
|
||||||
case "buttonDown":
|
case "buttonDown":
|
||||||
_drawningShip.MoveTransport(DirectionType.Down);
|
_drawningMotorShip.MoveTransport(DirectionType.Down);
|
||||||
break;
|
break;
|
||||||
case "buttonLeft":
|
case "buttonLeft":
|
||||||
_drawningShip.MoveTransport(DirectionType.Left);
|
_drawningMotorShip.MoveTransport(DirectionType.Left);
|
||||||
break;
|
break;
|
||||||
case "buttonRight":
|
case "buttonRight":
|
||||||
_drawningShip.MoveTransport(DirectionType.Right);
|
_drawningMotorShip.MoveTransport(DirectionType.Right);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
Draw();
|
Draw();
|
||||||
@ -63,64 +55,14 @@ namespace ProjectMotorShip
|
|||||||
private void buttonCreate_Click_1(object sender, EventArgs e)
|
private void buttonCreate_Click_1(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
Random random = new();
|
Random random = new();
|
||||||
_drawningShip = new DrawningMotorShip(random.Next(100, 300), random.Next(1000, 3000),
|
_drawningMotorShip = new DrawningMotorShip();
|
||||||
|
_drawningMotorShip.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)), /*Convert.ToBoolean(random.Next(0, 2))*/
|
||||||
pictureBox1.Width, pictureBox1.Height);
|
pictureBox1.Width, pictureBox1.Height);
|
||||||
_drawningShip.SetPosition(random.Next(10, 100), random.Next(10, 100));
|
_drawningMotorShip.SetPosition(random.Next(10, 100), random.Next(10, 100));
|
||||||
Draw();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void buttonStep_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
if (_drawningShip == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (comboBoxStrategy.Enabled)
|
|
||||||
{
|
|
||||||
_abstractStrategy = comboBoxStrategy.SelectedIndex
|
|
||||||
switch
|
|
||||||
{
|
|
||||||
0 => new MoveToCenter(),
|
|
||||||
1 => new MoveToBorder(),
|
|
||||||
_ => null,
|
|
||||||
};
|
|
||||||
if (_abstractStrategy == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
_abstractStrategy.SetData(
|
|
||||||
new DrawningObjectShip(_drawningShip),
|
|
||||||
pictureBox1.Width,
|
|
||||||
pictureBox1.Height);
|
|
||||||
comboBoxStrategy.Enabled = false;
|
|
||||||
}
|
|
||||||
if (_abstractStrategy == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
_abstractStrategy.MakeStep();
|
|
||||||
Draw();
|
|
||||||
if (_abstractStrategy.GetStatus() == Status.Finish)
|
|
||||||
{
|
|
||||||
comboBoxStrategy.Enabled = true;
|
|
||||||
_abstractStrategy = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void buttonCreateShip_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
Random random = new Random();
|
|
||||||
_drawningShip = new DrawningShip(
|
|
||||||
random.Next(100, 300),
|
|
||||||
random.Next(1000, 3000),
|
|
||||||
Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)),
|
|
||||||
pictureBox1.Width,
|
|
||||||
pictureBox1.Height);
|
|
||||||
_drawningShip.SetPosition(random.Next(10, 100), random.Next(10, 100));
|
|
||||||
Draw();
|
Draw();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,42 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace ProjectMotorShip.MovementStrategy
|
|
||||||
{
|
|
||||||
internal class MoveToBorder : AbstractStrategy
|
|
||||||
{
|
|
||||||
protected override bool IsTargetDestination()
|
|
||||||
{
|
|
||||||
var objParams = GetObjectParametrs;
|
|
||||||
if (objParams == null)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return objParams.RightBorder <= FieldWidth &&
|
|
||||||
objParams.RightBorder + GetStep() >= FieldWidth &&
|
|
||||||
objParams.DownBorder <= FieldHeight &&
|
|
||||||
objParams.DownBorder + GetStep() >= FieldHeight;
|
|
||||||
}
|
|
||||||
protected override void MoveToTarget()
|
|
||||||
{
|
|
||||||
var objParams = GetObjectParametrs;
|
|
||||||
if (objParams == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var diffX = objParams.RightBorder - FieldWidth;
|
|
||||||
if (Math.Abs(diffX) > GetStep())
|
|
||||||
{
|
|
||||||
MoveRight();
|
|
||||||
}
|
|
||||||
var diffY = objParams.DownBorder - FieldHeight;
|
|
||||||
if (Math.Abs(diffY) > GetStep())
|
|
||||||
{
|
|
||||||
MoveDown();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,56 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace ProjectMotorShip.MovementStrategy
|
|
||||||
{
|
|
||||||
public class MoveToCenter : AbstractStrategy
|
|
||||||
{
|
|
||||||
protected override bool IsTargetDestination()
|
|
||||||
{
|
|
||||||
var objParams = GetObjectParametrs;
|
|
||||||
if (objParams == null)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return
|
|
||||||
Math.Abs(objParams.ObjectMiddleHorizontal - FieldWidth / 2) <= GetStep()
|
|
||||||
&&
|
|
||||||
Math.Abs(objParams.ObjectMiddleVertical - FieldHeight / 2) <= GetStep();
|
|
||||||
}
|
|
||||||
protected override void MoveToTarget()
|
|
||||||
{
|
|
||||||
var objParams = GetObjectParametrs;
|
|
||||||
if (objParams == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var diffX = objParams.ObjectMiddleHorizontal - FieldWidth / 2;
|
|
||||||
if (Math.Abs(diffX) > GetStep())
|
|
||||||
{
|
|
||||||
if (diffX > 0)
|
|
||||||
{
|
|
||||||
MoveLeft();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
MoveRight();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var diffY = objParams.ObjectMiddleVertical - FieldHeight / 2;
|
|
||||||
if (Math.Abs(diffY) > GetStep())
|
|
||||||
{
|
|
||||||
if (diffY > 0)
|
|
||||||
{
|
|
||||||
MoveUp();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
MoveDown();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,29 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace ProjectMotorShip.MovementStrategy
|
|
||||||
{
|
|
||||||
public class ObjectParametrs
|
|
||||||
{
|
|
||||||
private readonly int _x;
|
|
||||||
private readonly int _y;
|
|
||||||
private readonly int _width;
|
|
||||||
private readonly int _height;
|
|
||||||
public int LeftBorder => _x;
|
|
||||||
public int TopBorder => _y;
|
|
||||||
public int RightBorder => _x + _width;
|
|
||||||
public int DownBorder => _y + _height;
|
|
||||||
public int ObjectMiddleHorizontal => _x + _width / 2;
|
|
||||||
public int ObjectMiddleVertical => _y + _height / 2;
|
|
||||||
public ObjectParametrs(int x, int y, int width, int height)
|
|
||||||
{
|
|
||||||
_x = x;
|
|
||||||
_y = y;
|
|
||||||
_width = width;
|
|
||||||
_height = height;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,15 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace ProjectMotorShip.MovementStrategy
|
|
||||||
{
|
|
||||||
public enum Status
|
|
||||||
{
|
|
||||||
NotInit,
|
|
||||||
InProgress,
|
|
||||||
Finish
|
|
||||||
}
|
|
||||||
}
|
|
Binary file not shown.
Binary file not shown.
@ -1 +1 @@
|
|||||||
556daec231b7e3b877f10be99e1b34a9bd49f3d7
|
92a56f81e67c3af2f643156bfb15fe83c802e1d6
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue
Block a user