Лабораторная 1

This commit is contained in:
vettaql 2024-03-13 14:44:16 +04:00
parent abbb22b052
commit 6cf8c712c1

View File

@ -27,11 +27,11 @@ public class DrawningTank
/// <summary> /// <summary>
/// Ширина прорисовки танка /// Ширина прорисовки танка
/// </summary> /// </summary>
private readonly int _drawningCarWidth = 110; private readonly int _drawningTankWidth = 200;
/// <summary> /// <summary>
/// Высота прорисовки танка /// Высота прорисовки танка
/// </summary> /// </summary>
private readonly int _drawningCarHeight = 60; private readonly int _drawningTankHeight = 100;
/// <summary> /// <summary>
/// Инициализация свойств /// Инициализация свойств
/// </summary> /// </summary>
@ -61,29 +61,45 @@ public class DrawningTank
/// <returns>true - границы заданы, false - проверка не пройдена, нельзя разместить объект в этих размерах</returns> /// <returns>true - границы заданы, false - проверка не пройдена, нельзя разместить объект в этих размерах</returns>
public bool SetPictureSize(int width, int height) public bool SetPictureSize(int width, int height)
{ {
// TODO проверка, что объект "влезает" в размеры поля if (_drawningTankWidth < width && _drawningTankHeight < height)
// если влезает, сохраняем границы и корректируем позицию объекта, если она была уже установлена {
_pictureWidth = width; _pictureWidth = width; _pictureHeight = height;
_pictureHeight = height;
{
if (_startPosX.HasValue&&_startPosY.HasValue)
SetPosition(_startPosX.Value, _startPosY.Value);
}
return true; return true;
} }
return false;
}
/// <summary> /// <summary>
/// Установка позиции /// Установка позиции
/// </summary> /// </summary>
/// <param name="x">Координата X</param> /// <param name="x">Координата X</param>
/// <param name="y">Координата Y</param> /// <param name="y">Координата Y</param>
public void SetPosition(int x, int y) public void SetPosition(int x, int y)
{ {
if (!_pictureHeight.HasValue || !_pictureWidth.HasValue) if (!_pictureHeight.HasValue || !_pictureWidth.HasValue)
{ {
return; return;
} }
// TODO если при установке объекта в эти координаты, он будет "выходить" за границы формы if (x < 0 || x + _drawningTankWidth > _pictureWidth || y < 0 || y + _drawningTankHeight > _pictureHeight)
// то надо изменить координаты, чтобы он оставался в этих границах {
_startPosX = _pictureWidth - _drawningTankWidth; _startPosY = _pictureHeight - _drawningTankHeight;
} else
{
_startPosX = x; _startPosX = x;
_startPosY = y; _startPosY = y;
} }
}
/// <summary> /// <summary>
/// Изменение направления перемещения /// Изменение направления перемещения
/// </summary> /// </summary>
@ -113,20 +129,22 @@ public class DrawningTank
_startPosY -= (int)EntityTank.Step; _startPosY -= (int)EntityTank.Step;
} }
return true; return true;
// вправо
case DirectionType.Right:
if (_startPosX.Value + EntityTank.Step + _drawningCarWidth <= _pictureWidth)
{
_startPosX += (int)EntityTank.Step;
}
return true;
// вниз // вниз
case DirectionType.Down: case DirectionType.Down:
if (_startPosY.Value + EntityTank.Step + _drawningCarHeight <= _pictureHeight) if (_startPosY.Value + EntityTank.Step + _drawningTankHeight < _pictureHeight)
{ {
_startPosY += (int)EntityTank.Step; _startPosY += (int)EntityTank.Step;
} }
return true; return true;
// вправо
case DirectionType.Right:
if (_startPosX.Value + EntityTank.Step + _drawningTankWidth < _pictureWidth)
{
_startPosX += (int)EntityTank.Step;
}
return true;
default: default:
return false; return false;
} }
@ -146,16 +164,54 @@ public class DrawningTank
Brush additionalBrush = new Brush additionalBrush = new
SolidBrush(EntityTank.AdditionalColor); SolidBrush(EntityTank.AdditionalColor);
//границы танка + гусеницы //границы танка + гусеницы + пулемёт + башня с оружием
g.DrawEllipse(pen, _startPosX.Value + 35, _startPosY.Value + 35, 40, 10); g.DrawRectangle(pen, _startPosX.Value + 85, _startPosY.Value + 39, 55, 17);
g.DrawEllipse(pen, _startPosX.Value + 15, _startPosY.Value + 35, 5, 5); g.DrawRectangle(pen, _startPosX.Value + 49, _startPosY.Value + 56, 137, 13);
g.DrawEllipse(pen, _startPosX.Value + 23, _startPosY.Value + 37, 2, 2);
g.DrawEllipse(pen, _startPosX.Value + 30, _startPosY.Value + 37, 2, 2); g.DrawEllipse(pen, _startPosX.Value + 37, _startPosY.Value + 59, 160, 35);
g.DrawEllipse(pen, _startPosX.Value + 37, _startPosY.Value + 37, 2, 2); g.DrawEllipse(pen, _startPosX.Value + 88, _startPosY.Value + 65, 29, 23);
g.DrawEllipse(pen, _startPosX.Value + 44, _startPosY.Value + 37, 2, 2); g.DrawEllipse(pen, _startPosX.Value + 148, _startPosY.Value + 65, 29, 23);
g.DrawEllipse(pen, _startPosX.Value + 52, _startPosY.Value + 35, 5, 5); g.DrawEllipse(pen, _startPosX.Value + 128, _startPosY.Value + 73, 18, 15);
g.DrawEllipse(pen, _startPosX.Value + 108, _startPosY.Value + 73, 18, 15);
g.DrawEllipse(pen, _startPosX.Value + 88, _startPosY.Value + 73, 18, 15);
g.DrawRectangle(pen, _startPosX.Value, _startPosY.Value + 42, 85, 8);
g.DrawRectangle(pen, _startPosX.Value + 101, _startPosY.Value + 27, 24, 12);
g.DrawRectangle(pen, _startPosX.Value + 109, _startPosY.Value + 9, 5, 18);
g.DrawRectangle(pen, _startPosX.Value + 91, _startPosY.Value + 13, 19, 5);
//танк
Brush br = new SolidBrush(EntityTank.BodyColor);
g.FillRectangle(br, _startPosX.Value + 85, _startPosY.Value + 39, 55, 17);
g.FillRectangle(br, _startPosX.Value + 49, _startPosY.Value + 56, 137, 13);
Brush brDBlue = new SolidBrush(Color.DarkBlue);
g.FillEllipse(brDBlue, _startPosX.Value + 37, _startPosY.Value + 59, 160, 35);
//гусеницы
Brush brBlue = new SolidBrush(Color.LightBlue);
g.FillEllipse(brBlue, _startPosX.Value + 56, _startPosY.Value + 65, 29, 23);
g.FillEllipse(brBlue, _startPosX.Value + 148, _startPosY.Value + 65, 29, 23);
g.FillEllipse(brBlue, _startPosX.Value + 128, _startPosY.Value + 73, 18, 15);
g.FillEllipse(brBlue, _startPosX.Value + 108, _startPosY.Value + 73, 18, 15);
g.FillEllipse(brBlue, _startPosX.Value + 88, _startPosY.Value + 73, 18, 15);
if (EntityTank.GunTurret)
{
g.FillRectangle(additionalBrush, _startPosX.Value, _startPosY.Value + 42, 85, 8);
}
if (EntityTank.MachineGun)
{
g.FillRectangle(additionalBrush, _startPosX.Value + 101, _startPosY.Value + 27, 24, 12);
g.FillRectangle(additionalBrush, _startPosX.Value + 109, _startPosY.Value + 9, 5, 18);
g.FillRectangle(additionalBrush, _startPosX.Value + 91, _startPosY.Value + 13, 19, 5);
}
g.DrawRectangle(pen, _startPosX.Value + 34, _startPosY.Value + 29, 46, 3);
g.DrawRectangle(pen, _startPosX.Value + 32, _startPosY.Value + 25, 17, 6);
} }
} }