Лабораторная 1
This commit is contained in:
parent
abbb22b052
commit
6cf8c712c1
@ -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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user