diff --git a/HoistingCrane/HoistingCrane/DrawningHoistingCrane.cs b/HoistingCrane/HoistingCrane/DrawningHoistingCrane.cs
index c4c834c..0bf8c35 100644
--- a/HoistingCrane/HoistingCrane/DrawningHoistingCrane.cs
+++ b/HoistingCrane/HoistingCrane/DrawningHoistingCrane.cs
@@ -15,7 +15,7 @@ public class DrawningHoistingCrane
private int? _pictureWidth;
///
- /// Длина окна
+ /// Высота окна
///
private int? _pictureHeight;
@@ -31,17 +31,17 @@ public class DrawningHoistingCrane
///
/// Ширина прорисовки автомобиля
///
- private readonly int _drawingCarWidth = 80;
+ private readonly int _drawingCarWidth = 115;
///
/// Высота прорисовки автомобиля
///
- private readonly int _drawingCarHeight = 67;
+ private readonly int _drawingCarHeight = 63;
- public void Init(int speed, double weight, Color bodyColor, Color additionalColor)
+ public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool counterweight, bool platform)
{
EntityHoistingCrane = new EntityHoistingCrane();
- EntityHoistingCrane.Init(speed, weight, bodyColor, additionalColor);
+ EntityHoistingCrane.Init(speed, weight, bodyColor, additionalColor, counterweight, platform);
_pictureWidth = null;
_pictureHeight = null;
_startPosX = null;
@@ -61,18 +61,28 @@ public class DrawningHoistingCrane
public bool SetPictureSize(int width, int height)
{
- if ((width < _drawingCarWidth) || (height < _drawingCarHeight))
+ // TODO проверка, что объект "влезает" в размеры поля
+ // если влезает, сохраняем границы и корректируем позицию объекта, если она была уже установлена ✔
+
+ if (_drawingCarHeight > height || _drawingCarWidth > width)
{
return false;
}
- // TODO проверка, что объект "влезает" в размеры поля
- // если влезает, сохраняем границы и корректируем позицию объекта, если она была уже установлена
- _pictureWidth = width;
+
_pictureHeight = height;
+ _pictureWidth = width;
-
-
+ if(_startPosX.HasValue && (_startPosX.Value + _drawingCarWidth > _pictureWidth))
+ {
+ _startPosX =_pictureWidth - _drawingCarWidth;
+ }
+
+ if(_startPosY.HasValue && (_startPosY.Value + _drawingCarHeight > _pictureHeight))
+ {
+ _startPosY = _pictureHeight - _drawingCarHeight;
+ }
return true;
+
}
@@ -85,35 +95,29 @@ public class DrawningHoistingCrane
public void SetPosition(int x, int y)
{
//Если размеры были заданы, то присваиваем х и у, иначе выходим из метода
- if (!_pictureHeight.HasValue || !_pictureWidth.HasValue)
- {
- return;
- }
- if ((x + _drawingCarWidth > _pictureWidth) && (y + _drawingCarHeight > _pictureHeight))
+ if (x < 0)
+ x = -x;
+ if (y < 0)
+ y = -y;
+ if(x + _drawingCarWidth > _pictureWidth)
{
- _startPosX = x - _drawingCarWidth;
- _startPosY = y - _drawingCarHeight;
- }
- else if ((x + _drawingCarWidth <= _pictureWidth) && (y + _drawingCarHeight > _pictureHeight))
- {
- _startPosX = x;
- _startPosY = y - _drawingCarHeight;
- }
- else if ((x + _drawingCarWidth > _pictureWidth) && (y + _drawingCarHeight <= _pictureHeight))
- {
- _startPosX = x - _drawingCarWidth;
- _startPosY = y;
+ _startPosX = _pictureWidth - _drawingCarWidth;
}
else
{
_startPosX = x;
+ }
+ if (y + _drawingCarHeight > _pictureHeight)
+ {
+ _startPosY = _pictureHeight - _drawingCarHeight;
+ }
+ else
+ {
_startPosY = y;
}
-
-
}
///
@@ -215,7 +219,11 @@ public class DrawningHoistingCrane
gr.FillRectangle(br, _startPosX.Value, _startPosY.Value + 25, 75, 25);
gr.FillRectangle(br, _startPosX.Value, _startPosY.Value, 25, 25);
-
+ //кран
+ Brush bb = new SolidBrush(EntityHoistingCrane.BodyColor);
+ gr.FillRectangle(bb, _startPosX.Value + 65, _startPosY.Value, 7, 25);
+ gr.FillRectangle(br, _startPosX.Value + 62, _startPosY.Value + 2, 45, 5);
+ gr.DrawLine(pen, _startPosX.Value + 105, _startPosY.Value + 2, _startPosX.Value + 107, _startPosY.Value + 40);
//окно
@@ -243,6 +251,22 @@ public class DrawningHoistingCrane
gr.FillEllipse(brq, _startPosX.Value + 50, _startPosY.Value + 53, 10, 10);
gr.FillRectangle(brq, _startPosX.Value + 30, _startPosY.Value + 45, 4, 6);
gr.FillRectangle(brq, _startPosX.Value + 45, _startPosY.Value + 45, 4, 6);
+
+ //противовес
+ if (EntityHoistingCrane.Counterweight)
+ {
+ Brush b = new SolidBrush(EntityHoistingCrane.AdditionalColor);
+ gr.FillRectangle(b, _startPosX.Value + 68, _startPosY.Value + 5, 10, 10);
+ }
+
+
+ //Наличие спусковой платформы
+ if (EntityHoistingCrane.Platform)
+ {
+ Pen n = new Pen(EntityHoistingCrane.AdditionalColor);
+ gr.DrawRectangle(pen, _startPosX.Value + 101, _startPosY.Value + 40, 15, 5);
+ }
+
}
diff --git a/HoistingCrane/HoistingCrane/EntityHoistingCrane.cs b/HoistingCrane/HoistingCrane/EntityHoistingCrane.cs
index 1be6030..3fce867 100644
--- a/HoistingCrane/HoistingCrane/EntityHoistingCrane.cs
+++ b/HoistingCrane/HoistingCrane/EntityHoistingCrane.cs
@@ -21,6 +21,19 @@ public class EntityHoistingCrane
///
public Color AdditionalColor { get; private set; }
+ ///
+ ///
+ ///
+ public bool Counterweight { get; private set; }
+ ///
+ ///
+ ///
+ public bool Platform{ get; private set; }
+
+
+ ///
+ ///
+ ///
public double Step => Speed * 100 / Weight;
@@ -37,12 +50,14 @@ public class EntityHoistingCrane
- public void Init(int Speed, double Weight, Color BodyColor, Color AdditionalColor)
+ public void Init(int Speed, double Weight, Color BodyColor, Color AdditionalColor, bool Counterweight, bool Platform)
{
this.Speed = Speed;
this.Weight = Weight;
this.BodyColor = BodyColor;
this.AdditionalColor = AdditionalColor;
+ this.Counterweight = Counterweight;
+ this.Platform = Platform;
}
}
\ No newline at end of file
diff --git a/HoistingCrane/HoistingCrane/FormHoistingCrane.cs b/HoistingCrane/HoistingCrane/FormHoistingCrane.cs
index 3bf841b..7250345 100644
--- a/HoistingCrane/HoistingCrane/FormHoistingCrane.cs
+++ b/HoistingCrane/HoistingCrane/FormHoistingCrane.cs
@@ -23,9 +23,14 @@
Random rand = new();
_drawningHoistingCrane = new DrawningHoistingCrane();
- _drawningHoistingCrane.Init(rand.Next(100, 300), rand.Next(1000, 3000),
+ _drawningHoistingCrane.Init(
+ rand.Next(100, 300),
+ rand.Next(1000, 3000),
Color.FromArgb(rand.Next(0, 256), rand.Next(0, 256), rand.Next(0, 256)),
- Color.FromArgb(rand.Next(0, 256), rand.Next(0, 256), rand.Next(0, 256)));
+ Color.FromArgb(rand.Next(0, 256), rand.Next(0, 256), rand.Next(0, 256)),
+ Convert.ToBoolean(rand.Next(0,2)),
+ Convert.ToBoolean(rand.Next(0,2))
+ );
_drawningHoistingCrane.SetPictureSize(pictureBoxHoistingCrane.Width, pictureBoxHoistingCrane.Height);
_drawningHoistingCrane.SetPosition(rand.Next(0, 100), rand.Next(0, 100));
Draw();