Добавление родителей и ввод конструкторов
This commit is contained in:
parent
e356bb94ae
commit
72b7375d44
@ -1,278 +0,0 @@
|
|||||||
namespace ProjectBulldozer;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Класс, отвечающий за прорисовку и перемещение объекта-сущности
|
|
||||||
/// </summary>
|
|
||||||
public class DrawningBulldozer
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Класс-сущность
|
|
||||||
/// </summary>
|
|
||||||
public EntityBulldozer? EntityBulldozer { 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 _BulldozerWidth = 180;
|
|
||||||
/// <summary>
|
|
||||||
/// Высота прорисовки автомобиля
|
|
||||||
/// </summary>
|
|
||||||
private readonly int _BulldozerHeight = 140;
|
|
||||||
/// <summary>
|
|
||||||
/// Инициализация свойств
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="speed">Скорость</param>
|
|
||||||
/// <param name="weight">Вес</param>
|
|
||||||
/// <param name="bodyColor">Основной цвет</param>
|
|
||||||
/// <param name="additionalColor">Дополнительный цвет</param>
|
|
||||||
/// <param name="additionalOtval">Признак наличия отвала спереди</param>
|
|
||||||
/// <param name="additionalRihl">Признак наличия рыхлителя сзади</param>
|
|
||||||
|
|
||||||
public void Init(int speed, double weight, Color bodyColor, Color
|
|
||||||
additionalColor, bool additionalOtval, bool additionalRihl)
|
|
||||||
{
|
|
||||||
EntityBulldozer = new EntityBulldozer();
|
|
||||||
EntityBulldozer.Init(speed, weight, bodyColor, additionalColor, additionalOtval,
|
|
||||||
additionalRihl);
|
|
||||||
|
|
||||||
_pictureWidth = null;
|
|
||||||
_pictureHeight = null;
|
|
||||||
_startPosX = null;
|
|
||||||
_startPosY = null;
|
|
||||||
|
|
||||||
}
|
|
||||||
/// <summary>
|
|
||||||
/// Установка границ поля
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="width">Ширина поля</param>
|
|
||||||
/// <param name="height">Высота поля</param>
|
|
||||||
/// <returns>true - границы заданы, false - проверка не пройдена, нельзя
|
|
||||||
public bool SetPictureSize(int width, int height)
|
|
||||||
{
|
|
||||||
if (_BulldozerWidth < width && _BulldozerHeight < height)
|
|
||||||
{
|
|
||||||
_pictureWidth = width;
|
|
||||||
_pictureHeight = height;
|
|
||||||
if (_startPosX.HasValue && _startPosY.HasValue)
|
|
||||||
{
|
|
||||||
SetPosition(_startPosX.Value, _startPosY.Value);
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
/// <summary>
|
|
||||||
/// Установка позиции
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="x">Координата X</param>
|
|
||||||
/// <param name="y">Координата Y</param>
|
|
||||||
public void SetPosition(int x, int y)
|
|
||||||
{
|
|
||||||
if (!_pictureHeight.HasValue || !_pictureWidth.HasValue)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (x < 0 || x + _BulldozerWidth > _pictureWidth || y < 0 || y + _BulldozerHeight > _pictureHeight)
|
|
||||||
{
|
|
||||||
_startPosX = _pictureWidth - _BulldozerWidth;
|
|
||||||
_startPosY = _pictureHeight - _BulldozerHeight;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_startPosX = x;
|
|
||||||
_startPosY = y;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/// <summary>
|
|
||||||
/// Изменение направления перемещения
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="direction">Направление</param>
|
|
||||||
/// <returns>true - перемещене выполнено, false - перемещение
|
|
||||||
public bool MoveTransport(DirectionType1 direction) {
|
|
||||||
|
|
||||||
if (EntityBulldozer == null || !_startPosX.HasValue ||
|
|
||||||
!_startPosY.HasValue)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
switch (direction)
|
|
||||||
{
|
|
||||||
//влево
|
|
||||||
case DirectionType1.Left:
|
|
||||||
if (_startPosX.Value - EntityBulldozer.Step > 0)
|
|
||||||
{
|
|
||||||
_startPosX -= (int)EntityBulldozer.Step;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
|
|
||||||
//вверх
|
|
||||||
case DirectionType1.Up:
|
|
||||||
if (_startPosY.Value - EntityBulldozer.Step > 0)
|
|
||||||
{
|
|
||||||
_startPosY -= (int)EntityBulldozer.Step;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
|
|
||||||
// вправо
|
|
||||||
case DirectionType1.Right:
|
|
||||||
if (_startPosX + _BulldozerWidth + EntityBulldozer.Step < _pictureWidth)
|
|
||||||
{
|
|
||||||
_startPosX += (int)EntityBulldozer.Step;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
|
|
||||||
//вниз
|
|
||||||
case DirectionType1.Down:
|
|
||||||
if (_startPosY + _BulldozerHeight + EntityBulldozer.Step < _pictureHeight)
|
|
||||||
{
|
|
||||||
_startPosY += (int)EntityBulldozer.Step;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Прорисовка объекта
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="g"></param>
|
|
||||||
public void DrawTransport(Graphics g)
|
|
||||||
{
|
|
||||||
if (EntityBulldozer == null || !_startPosX.HasValue ||
|
|
||||||
!_startPosY.HasValue)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Pen pen = new(Color.Black);
|
|
||||||
Brush brush = new SolidBrush(Color.Black);
|
|
||||||
Brush bl = new SolidBrush(EntityBulldozer.AdditionalColor);
|
|
||||||
Brush bodyBrush = new SolidBrush(EntityBulldozer.BodyColor);
|
|
||||||
Brush bodyBrush2 = new SolidBrush(EntityBulldozer.AdditionalColor);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//основное тело
|
|
||||||
g.FillRectangle(bodyBrush, _startPosX.Value + 20, _startPosY.Value + 40, 120, 60);
|
|
||||||
|
|
||||||
g.DrawRectangle(pen, _startPosX.Value + 20, _startPosY.Value + 40, 120, 60);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//Гусеницы
|
|
||||||
Brush gg = new SolidBrush(Color.LightGray);
|
|
||||||
g.FillEllipse(gg, _startPosX.Value + 23, _startPosY.Value + 101, 118, 35);
|
|
||||||
g.DrawEllipse(pen, _startPosX.Value + 23, _startPosY.Value + 101, 118, 35);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
g.DrawEllipse(pen, _startPosX.Value + 26, _startPosY.Value + 103, 110, 30);
|
|
||||||
|
|
||||||
//катки в гусеницах
|
|
||||||
Brush gr = new SolidBrush(Color.Gray);
|
|
||||||
g.FillEllipse(gr, _startPosX.Value + 40, _startPosY.Value + 108, 20, 20);
|
|
||||||
g.DrawEllipse(pen, _startPosX.Value + 40, _startPosY.Value + 108, 20, 20);
|
|
||||||
|
|
||||||
|
|
||||||
g.FillEllipse(gr, _startPosX.Value + 65, _startPosY.Value + 110, 20, 20);
|
|
||||||
g.DrawEllipse(pen, _startPosX.Value + 65, _startPosY.Value + 110, 20, 20);
|
|
||||||
|
|
||||||
g.FillEllipse(gr, _startPosX.Value + 115, _startPosY.Value + 110, 15, 15);
|
|
||||||
g.DrawEllipse(pen, _startPosX.Value + 115, _startPosY.Value + 110, 15, 15);
|
|
||||||
|
|
||||||
g.FillEllipse(gr, _startPosX.Value + 90, _startPosY.Value + 110, 20, 20);
|
|
||||||
g.DrawEllipse(pen, _startPosX.Value + 90, _startPosY.Value + 110, 20, 20);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//кабина водителя
|
|
||||||
g.FillRectangle(bodyBrush2, _startPosX.Value + 20, _startPosY.Value, 40, 40);
|
|
||||||
g.DrawRectangle(pen, _startPosX.Value + 20, _startPosY.Value, 40, 40);
|
|
||||||
|
|
||||||
|
|
||||||
//выхлопная труба
|
|
||||||
Brush brBr = new SolidBrush(Color.Brown);
|
|
||||||
|
|
||||||
g.FillRectangle(brBr, _startPosX.Value + 110, _startPosY.Value, 15, 40);
|
|
||||||
g.DrawRectangle(pen, _startPosX.Value + 110, _startPosY.Value, 15, 40);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//Brush bl = new SolidBrush(Color.LightYellow);
|
|
||||||
/////////отвал
|
|
||||||
///
|
|
||||||
if (EntityBulldozer.AdditionalOtval)
|
|
||||||
{
|
|
||||||
Point[] Otval =
|
|
||||||
{
|
|
||||||
new Point(_startPosX.Value + 142, _startPosY.Value + 70),
|
|
||||||
new Point(_startPosX.Value + 172, _startPosY.Value + 130),
|
|
||||||
new Point(_startPosX.Value+ 142, _startPosY.Value + 130),
|
|
||||||
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
g.FillPolygon(bl, Otval);
|
|
||||||
g.DrawPolygon(pen, Otval);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
///рыхлитель
|
|
||||||
if (EntityBulldozer.AdditionalRihl)
|
|
||||||
{
|
|
||||||
Brush black = new SolidBrush(Color.Black);
|
|
||||||
Point[] Rihl =
|
|
||||||
{
|
|
||||||
new Point(_startPosX.Value + 18 , _startPosY.Value + 60),
|
|
||||||
new Point(_startPosX.Value + 18, _startPosY.Value + 80),
|
|
||||||
new Point(_startPosX.Value, _startPosY.Value + 120),
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
g.FillPolygon(black, Rihl);
|
|
||||||
g.DrawPolygon(pen, Rihl);
|
|
||||||
|
|
||||||
Point[] Ttt =
|
|
||||||
{
|
|
||||||
new Point(_startPosX.Value + 18 , _startPosY.Value + 80),
|
|
||||||
new Point(_startPosX.Value + 18, _startPosY.Value + 120),
|
|
||||||
new Point(_startPosX.Value, _startPosY.Value + 50),
|
|
||||||
|
|
||||||
};
|
|
||||||
g.FillPolygon(black, Ttt);
|
|
||||||
g.DrawPolygon(pen, Ttt);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,12 +1,6 @@
|
|||||||
using System;
|
namespace ProjectBulldozer.Drawnings;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace ProjectBulldozer;
|
public enum DirectionType
|
||||||
|
|
||||||
public enum DirectionType1
|
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Вверх
|
/// Вверх
|
104
ProjectBulldozer/ProjectBulldozer/Drawnings/DrawingBulldozer.cs
Normal file
104
ProjectBulldozer/ProjectBulldozer/Drawnings/DrawingBulldozer.cs
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
using ProjectBulldozer.Entities;
|
||||||
|
using System.Drawing;
|
||||||
|
|
||||||
|
namespace ProjectBulldozer.Drawnings;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Класс, отвечающий за прорисовку и перемещение объекта-сущности
|
||||||
|
/// </summary>
|
||||||
|
public class DrawningBulldozer : DrawningBulldozerProstoy
|
||||||
|
{
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// конструктор
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="speed">Скорость</param>
|
||||||
|
/// <param name="weight">Вес</param>
|
||||||
|
/// <param name="bodyColor">Основной цвет</param>
|
||||||
|
/// <param name="additionalColor">Дополнительный цвет</param>
|
||||||
|
/// <param name="additionalOtval">Признак наличия отвала спереди</param>
|
||||||
|
/// <param name="additionalRihl">Признак наличия рыхлителя сзади</param>
|
||||||
|
|
||||||
|
public DrawningBulldozer(int speed, double weight, Color bodyColor, Color
|
||||||
|
additionalColor, bool additionalOtval, bool additionalRihl, bool v) : base(180, 140)
|
||||||
|
{
|
||||||
|
EntityBulldozerProstoy = new EntityBulldozer(speed, weight, bodyColor, additionalColor, additionalOtval,
|
||||||
|
additionalRihl);
|
||||||
|
}
|
||||||
|
public override void DrawTransport(Graphics g)
|
||||||
|
{
|
||||||
|
if (EntityBulldozerProstoy == null || EntityBulldozerProstoy is not EntityBulldozer Bulldozer || !_startPosX.HasValue || !_startPosY.HasValue)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Pen pen = new(Color.Black);
|
||||||
|
Brush bodyBrush = new SolidBrush(Bulldozer.BodyColor);
|
||||||
|
Brush bodyBrush2 = new SolidBrush(Bulldozer.AdditionalColor);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
_startPosX += 10;
|
||||||
|
_startPosY += 5;
|
||||||
|
|
||||||
|
base.DrawTransport(g);
|
||||||
|
_startPosX -= 10;
|
||||||
|
_startPosY -= 5;
|
||||||
|
|
||||||
|
Brush bl = new SolidBrush(Bulldozer.AdditionalColor);
|
||||||
|
/////////отвал
|
||||||
|
///
|
||||||
|
if (Bulldozer.AdditionalOtval)
|
||||||
|
{
|
||||||
|
Point[] Otval =
|
||||||
|
{
|
||||||
|
new Point(_startPosX.Value + 142, _startPosY.Value + 70),
|
||||||
|
new Point(_startPosX.Value + 172, _startPosY.Value + 130),
|
||||||
|
new Point(_startPosX.Value+ 142, _startPosY.Value + 130),
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
g.FillPolygon(bl, Otval);
|
||||||
|
g.DrawPolygon(pen, Otval);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
///рыхлитель
|
||||||
|
if (Bulldozer.AdditionalRihl)
|
||||||
|
{
|
||||||
|
Brush black = new SolidBrush(Color.Black);
|
||||||
|
Point[] Rihl =
|
||||||
|
{
|
||||||
|
new Point(_startPosX.Value + 18 , _startPosY.Value + 60),
|
||||||
|
new Point(_startPosX.Value + 18, _startPosY.Value + 80),
|
||||||
|
new Point(_startPosX.Value, _startPosY.Value + 120),
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
g.FillPolygon(black, Rihl);
|
||||||
|
g.DrawPolygon(pen, Rihl);
|
||||||
|
|
||||||
|
Point[] Ttt =
|
||||||
|
{
|
||||||
|
new Point(_startPosX.Value + 18 , _startPosY.Value + 80),
|
||||||
|
new Point(_startPosX.Value + 18, _startPosY.Value + 120),
|
||||||
|
new Point(_startPosX.Value, _startPosY.Value + 50),
|
||||||
|
|
||||||
|
};
|
||||||
|
g.FillPolygon(black, Ttt);
|
||||||
|
g.DrawPolygon(pen, Ttt);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,234 @@
|
|||||||
|
using ProjectBulldozer.Entities;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace ProjectBulldozer.Drawnings;
|
||||||
|
|
||||||
|
public class DrawningBulldozerProstoy
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Класс-сущность
|
||||||
|
/// </summary>
|
||||||
|
public EntityBulldozerProstoy? EntityBulldozerProstoy { get; protected set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Ширина окна
|
||||||
|
/// </summary>
|
||||||
|
private int? _pictureWidth;
|
||||||
|
/// <summary>
|
||||||
|
/// Высота окна
|
||||||
|
/// </summary>
|
||||||
|
private int? _pictureHeight;
|
||||||
|
/// <summary>
|
||||||
|
/// Левая координата прорисовки автомобиля
|
||||||
|
/// </summary>
|
||||||
|
protected int? _startPosX;
|
||||||
|
/// <summary>
|
||||||
|
/// Верхняя кооридната прорисовки автомобиля
|
||||||
|
/// </summary>
|
||||||
|
protected int? _startPosY;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Ширина прорисовки бульдозера
|
||||||
|
/// </summary>
|
||||||
|
private readonly int _BulldozerWidth = 130;
|
||||||
|
/// <summary>
|
||||||
|
/// Высота прорисовки бульдозера
|
||||||
|
/// </summary>
|
||||||
|
private readonly int _BulldozerHeight = 120;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Пустой конструктор
|
||||||
|
/// </summary>
|
||||||
|
private DrawningBulldozerProstoy()
|
||||||
|
{
|
||||||
|
_pictureWidth = null;
|
||||||
|
_pictureHeight = null;
|
||||||
|
_startPosX = null;
|
||||||
|
_startPosY = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Конструктор
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="speed">Скорость</param>
|
||||||
|
/// <param name="weight">Вес</param>
|
||||||
|
/// <param name="bodyColor">Основной цвет</param>
|
||||||
|
public DrawningBulldozerProstoy(int speed, double weight, Color bodyColor) : this()
|
||||||
|
{
|
||||||
|
EntityBulldozerProstoy = new EntityBulldozerProstoy(speed, weight, bodyColor);
|
||||||
|
_pictureWidth = null;
|
||||||
|
_pictureHeight = null;
|
||||||
|
_startPosX = null;
|
||||||
|
_startPosY = null;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Конструктор для наследников
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="BulldozerWidth">Ширина прорисовки бульдозера</param>
|
||||||
|
/// <param name="BulldozerHeight">Высота прорисовки бульдозера</param>
|
||||||
|
protected DrawningBulldozerProstoy(int BulldozerWidth, int BulldozerHeight) : this()
|
||||||
|
{
|
||||||
|
_BulldozerWidth = BulldozerWidth;
|
||||||
|
_BulldozerHeight = BulldozerHeight;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Установка границ поля
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="width">Ширина поля</param>
|
||||||
|
/// <param name="height">Высота поля</param>
|
||||||
|
/// <returns>true - границы заданы, false - проверка не пройдена, нельзя
|
||||||
|
public bool SetPictureSize(int width, int height)
|
||||||
|
{
|
||||||
|
if (_BulldozerWidth < width && _BulldozerHeight < height)
|
||||||
|
{
|
||||||
|
_pictureWidth = width;
|
||||||
|
_pictureHeight = height;
|
||||||
|
if (_startPosX.HasValue && _startPosY.HasValue)
|
||||||
|
{
|
||||||
|
SetPosition(_startPosX.Value, _startPosY.Value);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Установка позиции
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="x">Координата X</param>
|
||||||
|
/// <param name="y">Координата Y</param>
|
||||||
|
public void SetPosition(int x, int y)
|
||||||
|
{
|
||||||
|
if (!_pictureHeight.HasValue || !_pictureWidth.HasValue)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (x < 0 || x + _BulldozerWidth > _pictureWidth || y < 0 || y + _BulldozerHeight > _pictureHeight)
|
||||||
|
{
|
||||||
|
_startPosX = _pictureWidth - _BulldozerWidth;
|
||||||
|
_startPosY = _pictureHeight - _BulldozerHeight;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_startPosX = x;
|
||||||
|
_startPosY = y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Изменение направления перемещения
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="direction">Направление</param>
|
||||||
|
/// <returns>true - перемещене выполнено, false - перемещение
|
||||||
|
public bool MoveTransport(DirectionType direction)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (EntityBulldozerProstoy == null || !_startPosX.HasValue ||
|
||||||
|
!_startPosY.HasValue)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
switch (direction)
|
||||||
|
{
|
||||||
|
//влево
|
||||||
|
case DirectionType.Left:
|
||||||
|
if (_startPosX.Value - EntityBulldozerProstoy.Step > 0)
|
||||||
|
{
|
||||||
|
_startPosX -= (int)EntityBulldozerProstoy.Step;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
|
||||||
|
//вверх
|
||||||
|
case DirectionType.Up:
|
||||||
|
if (_startPosY.Value - EntityBulldozerProstoy.Step > 0)
|
||||||
|
{
|
||||||
|
_startPosY -= (int)EntityBulldozerProstoy.Step;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
|
||||||
|
// вправо
|
||||||
|
case DirectionType.Right:
|
||||||
|
if (_startPosX + _BulldozerWidth + EntityBulldozerProstoy.Step < _pictureWidth)
|
||||||
|
{
|
||||||
|
_startPosX += (int)EntityBulldozerProstoy.Step;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
|
||||||
|
//вниз
|
||||||
|
case DirectionType.Down:
|
||||||
|
if (_startPosY + _BulldozerHeight + EntityBulldozerProstoy.Step < _pictureHeight)
|
||||||
|
{
|
||||||
|
_startPosY += (int)EntityBulldozerProstoy.Step;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Прорисовка объекта
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="g"></param>
|
||||||
|
public virtual void DrawTransport(Graphics g)
|
||||||
|
{
|
||||||
|
if (EntityBulldozerProstoy == null || !_startPosX.HasValue ||
|
||||||
|
!_startPosY.HasValue)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Pen pen = new(Color.Black);
|
||||||
|
Brush brush = new SolidBrush(Color.Black);
|
||||||
|
Brush bodyBrush = new SolidBrush(EntityBulldozerProstoy.BodyColor);
|
||||||
|
|
||||||
|
|
||||||
|
//основное тело
|
||||||
|
g.FillRectangle(bodyBrush, _startPosX.Value + 10, _startPosY.Value + 35, 120, 60);
|
||||||
|
g.DrawRectangle(pen, _startPosX.Value + 10, _startPosY.Value + 35, 120, 60);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Гусеницы
|
||||||
|
Brush gg = new SolidBrush(Color.LightGray);
|
||||||
|
g.FillEllipse(gg, _startPosX.Value + 13, _startPosY.Value + 96, 118, 35);
|
||||||
|
g.DrawEllipse(pen, _startPosX.Value + 13, _startPosY.Value + 96, 118, 35);
|
||||||
|
|
||||||
|
g.DrawEllipse(pen, _startPosX.Value + 16, _startPosY.Value + 98, 110, 30);
|
||||||
|
|
||||||
|
//катки в гусеницах
|
||||||
|
Brush gr = new SolidBrush(Color.Gray);
|
||||||
|
g.FillEllipse(gr, _startPosX.Value + 30, _startPosY.Value + 104, 20, 20);
|
||||||
|
g.DrawEllipse(pen, _startPosX.Value + 30, _startPosY.Value + 104, 20, 20);////
|
||||||
|
|
||||||
|
|
||||||
|
g.FillEllipse(gr, _startPosX.Value + 55, _startPosY.Value + 105, 20, 20);
|
||||||
|
g.DrawEllipse(pen, _startPosX.Value + 55, _startPosY.Value + 105, 20, 20);
|
||||||
|
|
||||||
|
g.FillEllipse(gr, _startPosX.Value + 105, _startPosY.Value + 105, 15, 15);
|
||||||
|
g.DrawEllipse(pen, _startPosX.Value + 105, _startPosY.Value + 105, 15, 15);
|
||||||
|
|
||||||
|
g.FillEllipse(gr, _startPosX.Value + 80, _startPosY.Value + 105, 20, 20);
|
||||||
|
g.DrawEllipse(pen, _startPosX.Value + 80, _startPosY.Value + 105, 20, 20);
|
||||||
|
|
||||||
|
//кабина водителя
|
||||||
|
g.FillRectangle(bodyBrush, _startPosX.Value + 10, _startPosY.Value, 40, 40);
|
||||||
|
g.DrawRectangle(pen, _startPosX.Value + 10, _startPosY.Value, 40, 40);
|
||||||
|
|
||||||
|
|
||||||
|
//выхлопная труба
|
||||||
|
Brush brBr = new SolidBrush(Color.Brown);
|
||||||
|
|
||||||
|
g.FillRectangle(brBr, _startPosX.Value + 100, _startPosY.Value, 15, 40);
|
||||||
|
g.DrawRectangle(pen, _startPosX.Value + 100, _startPosY.Value, 15, 40);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -1,20 +1,11 @@
|
|||||||
|
namespace ProjectBulldozer.Entities;
|
||||||
namespace ProjectBulldozer;
|
|
||||||
|
|
||||||
public class EntityBulldozer
|
public class EntityBulldozer : EntityBulldozerProstoy
|
||||||
{
|
{
|
||||||
/// <summary>
|
public EntityBulldozer(int speed, double weight, Color bodyColor) : base(speed, weight, bodyColor)
|
||||||
/// Скорость
|
{
|
||||||
/// </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>
|
||||||
/// Дополнительный цвет (для опциональных элементов)
|
/// Дополнительный цвет (для опциональных элементов)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -28,10 +19,8 @@ public class EntityBulldozer
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public bool AdditionalRihl { get; private set; }
|
public bool AdditionalRihl { get; private set; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Шаг перемещения автомобиля
|
|
||||||
/// </summary>
|
|
||||||
public double Step => Speed * 100 / Weight;
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Инициализация полей объекта-класса спортивного автомобиля
|
/// Инициализация полей объекта-класса спортивного автомобиля
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -41,12 +30,9 @@ public class EntityBulldozer
|
|||||||
/// <param name="additionalColor">Дополнительный цвет</param>
|
/// <param name="additionalColor">Дополнительный цвет</param>
|
||||||
/// <param name="additionalOtval">Признак наличия отвала спереди</param>
|
/// <param name="additionalOtval">Признак наличия отвала спереди</param>
|
||||||
/// <param name="additionalRihl">Признак наличия рыхлителя сзади</param>
|
/// <param name="additionalRihl">Признак наличия рыхлителя сзади</param>
|
||||||
public void Init(int speed, double weight, Color bodyColor, Color
|
public EntityBulldozer(int speed, double weight, Color bodyColor, Color
|
||||||
additionalColor, bool additionalOtval, bool additionalRihl)
|
additionalColor, bool additionalOtval, bool additionalRihl) : base(speed, weight, bodyColor)
|
||||||
{
|
{
|
||||||
Speed = speed;
|
|
||||||
Weight = weight;
|
|
||||||
BodyColor = bodyColor;
|
|
||||||
AdditionalColor = additionalColor;
|
AdditionalColor = additionalColor;
|
||||||
AdditionalOtval = additionalOtval;
|
AdditionalOtval = additionalOtval;
|
||||||
AdditionalRihl = additionalRihl;
|
AdditionalRihl = additionalRihl;
|
@ -0,0 +1,41 @@
|
|||||||
|
namespace ProjectBulldozer.Entities;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Класс-сущность "Бульдозер простой"
|
||||||
|
/// </summary>
|
||||||
|
public class EntityBulldozerProstoy
|
||||||
|
{
|
||||||
|
/// <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 double Step => Speed * 100 / Weight;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Конструктор сущности
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="speed">Скорость</param>
|
||||||
|
/// <param name="weight">Вес автомобиля</param>
|
||||||
|
/// <param name="bodyColor">Основной цвет</param>
|
||||||
|
|
||||||
|
public EntityBulldozerProstoy(int speed, double weight, Color bodyColor)
|
||||||
|
{
|
||||||
|
Speed = speed;
|
||||||
|
Weight = weight;
|
||||||
|
BodyColor = bodyColor;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -34,6 +34,7 @@
|
|||||||
buttonDown = new Button();
|
buttonDown = new Button();
|
||||||
buttonLeft = new Button();
|
buttonLeft = new Button();
|
||||||
buttonUp = new Button();
|
buttonUp = new Button();
|
||||||
|
buttonCreateBulldozerProstoy = new Button();
|
||||||
((System.ComponentModel.ISupportInitialize)pictureBoxBulldozer).BeginInit();
|
((System.ComponentModel.ISupportInitialize)pictureBoxBulldozer).BeginInit();
|
||||||
SuspendLayout();
|
SuspendLayout();
|
||||||
//
|
//
|
||||||
@ -51,9 +52,9 @@
|
|||||||
buttonCreate.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
|
buttonCreate.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
|
||||||
buttonCreate.Location = new Point(12, 511);
|
buttonCreate.Location = new Point(12, 511);
|
||||||
buttonCreate.Name = "buttonCreate";
|
buttonCreate.Name = "buttonCreate";
|
||||||
buttonCreate.Size = new Size(94, 29);
|
buttonCreate.Size = new Size(231, 29);
|
||||||
buttonCreate.TabIndex = 1;
|
buttonCreate.TabIndex = 1;
|
||||||
buttonCreate.Text = "Создать";
|
buttonCreate.Text = "Создать бульозер с доп.";
|
||||||
buttonCreate.UseVisualStyleBackColor = true;
|
buttonCreate.UseVisualStyleBackColor = true;
|
||||||
buttonCreate.Click += ButtonCreateBulldozer_Click;
|
buttonCreate.Click += ButtonCreateBulldozer_Click;
|
||||||
//
|
//
|
||||||
@ -105,9 +106,21 @@
|
|||||||
buttonUp.UseVisualStyleBackColor = true;
|
buttonUp.UseVisualStyleBackColor = true;
|
||||||
buttonUp.Click += ButtonMove_Click;
|
buttonUp.Click += ButtonMove_Click;
|
||||||
//
|
//
|
||||||
|
// buttonCreateBulldozerProstoy
|
||||||
|
//
|
||||||
|
buttonCreateBulldozerProstoy.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
|
||||||
|
buttonCreateBulldozerProstoy.Location = new Point(274, 511);
|
||||||
|
buttonCreateBulldozerProstoy.Name = "buttonCreateBulldozerProstoy";
|
||||||
|
buttonCreateBulldozerProstoy.Size = new Size(231, 29);
|
||||||
|
buttonCreateBulldozerProstoy.TabIndex = 6;
|
||||||
|
buttonCreateBulldozerProstoy.Text = "Создать простой бульдозер";
|
||||||
|
buttonCreateBulldozerProstoy.UseVisualStyleBackColor = true;
|
||||||
|
buttonCreateBulldozerProstoy.Click += buttonCreateBulldozerProstoy_Click;
|
||||||
|
//
|
||||||
// FormBulldozer
|
// FormBulldozer
|
||||||
//
|
//
|
||||||
ClientSize = new Size(899, 552);
|
ClientSize = new Size(899, 552);
|
||||||
|
Controls.Add(buttonCreateBulldozerProstoy);
|
||||||
Controls.Add(buttonUp);
|
Controls.Add(buttonUp);
|
||||||
Controls.Add(buttonLeft);
|
Controls.Add(buttonLeft);
|
||||||
Controls.Add(buttonDown);
|
Controls.Add(buttonDown);
|
||||||
@ -128,5 +141,6 @@
|
|||||||
private Button buttonDown;
|
private Button buttonDown;
|
||||||
private Button buttonLeft;
|
private Button buttonLeft;
|
||||||
private Button buttonUp;
|
private Button buttonUp;
|
||||||
|
private Button buttonCreateBulldozerProstoy;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -7,6 +7,7 @@ using System.Linq;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
using ProjectBulldozer.Drawnings;
|
||||||
|
|
||||||
namespace ProjectBulldozer
|
namespace ProjectBulldozer
|
||||||
{
|
{
|
||||||
@ -15,7 +16,7 @@ namespace ProjectBulldozer
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Поле-объект для прорисовки объекта
|
/// Поле-объект для прорисовки объекта
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private DrawningBulldozer? _drawningBulldozer;
|
private DrawningBulldozerProstoy? _drawningBulldozerProstoy;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Конструктор формы
|
/// Конструктор формы
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -28,34 +29,61 @@ namespace ProjectBulldozer
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private void Draw()
|
private void Draw()
|
||||||
{
|
{
|
||||||
if (_drawningBulldozer == null)
|
if (_drawningBulldozerProstoy == null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Bitmap bmp = new(pictureBoxBulldozer.Width,
|
Bitmap bmp = new(pictureBoxBulldozer.Width,
|
||||||
pictureBoxBulldozer.Height);
|
pictureBoxBulldozer.Height);
|
||||||
Graphics gr = Graphics.FromImage(bmp);
|
Graphics gr = Graphics.FromImage(bmp);
|
||||||
_drawningBulldozer.DrawTransport(gr);
|
_drawningBulldozerProstoy.DrawTransport(gr);
|
||||||
pictureBoxBulldozer.Image = bmp;
|
pictureBoxBulldozer.Image = bmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Обработка нажатия кнопки "Создать"
|
/// создеание объекта класса-перемещения
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="type">Тип создаваемого объекта</param>
|
||||||
|
private void CreateObject(string type)
|
||||||
|
{
|
||||||
|
Random random = new();
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
case nameof(DrawningBulldozerProstoy):
|
||||||
|
_drawningBulldozerProstoy = new DrawningBulldozerProstoy(random.Next(100, 300),random.Next(1000, 3000),
|
||||||
|
Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)));
|
||||||
|
break;
|
||||||
|
case nameof(DrawningBulldozer):
|
||||||
|
_drawningBulldozerProstoy = new DrawningBulldozer(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)),
|
||||||
|
Convert.ToBoolean(random.Next(0, 2)),
|
||||||
|
Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2)));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_drawningBulldozerProstoy.SetPictureSize(pictureBoxBulldozer.Width,pictureBoxBulldozer.Height);
|
||||||
|
_drawningBulldozerProstoy.SetPosition(random.Next(10, 100), random.Next(10, 100));
|
||||||
|
Draw();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Обработка нажатия кнопки "Создать бульдозер с доп."
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="sender"></param>
|
/// <param name="sender"></param>
|
||||||
/// <param name="e"></param>
|
/// <param name="e"></param>
|
||||||
private void ButtonCreateBulldozer_Click(object sender, EventArgs e)
|
private void ButtonCreateBulldozer_Click(object sender, EventArgs e) => CreateObject(nameof(DrawningBulldozer));
|
||||||
{
|
|
||||||
Random random = new();
|
/// <summary>
|
||||||
_drawningBulldozer = new DrawningBulldozer();
|
/// Обработка нажатия кнопки "Создать обычный бульдозер"
|
||||||
|
/// </summary>
|
||||||
_drawningBulldozer.Init(random.Next(100, 300), random.Next(1000, 3000),
|
/// <param name="sender"></param>
|
||||||
Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)),
|
/// <param name="e"></param>
|
||||||
Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)),
|
private void buttonCreateBulldozerProstoy_Click(object sender, EventArgs e) => CreateObject(nameof(DrawningBulldozerProstoy));
|
||||||
Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2)));
|
|
||||||
_drawningBulldozer.SetPictureSize(pictureBoxBulldozer.Width, pictureBoxBulldozer.Height);
|
|
||||||
_drawningBulldozer.SetPosition(random.Next(10, 100), random.Next(10, 100));
|
|
||||||
Draw();
|
|
||||||
}
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Перемещение объекта по форме (нажатие кнопок навигации)
|
/// Перемещение объекта по форме (нажатие кнопок навигации)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -63,7 +91,7 @@ namespace ProjectBulldozer
|
|||||||
/// <param name="e"></param>
|
/// <param name="e"></param>
|
||||||
private void ButtonMove_Click(object sender, EventArgs e)
|
private void ButtonMove_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (_drawningBulldozer == null)
|
if (_drawningBulldozerProstoy == null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -73,19 +101,19 @@ namespace ProjectBulldozer
|
|||||||
{
|
{
|
||||||
case "buttonUp":
|
case "buttonUp":
|
||||||
result =
|
result =
|
||||||
_drawningBulldozer.MoveTransport(DirectionType1.Up);
|
_drawningBulldozerProstoy.MoveTransport(DirectionType.Up);
|
||||||
break;
|
break;
|
||||||
case "buttonDown":
|
case "buttonDown":
|
||||||
result =
|
result =
|
||||||
_drawningBulldozer.MoveTransport(DirectionType1.Down);
|
_drawningBulldozerProstoy.MoveTransport(DirectionType.Down);
|
||||||
break;
|
break;
|
||||||
case "buttonLeft":
|
case "buttonLeft":
|
||||||
result =
|
result =
|
||||||
_drawningBulldozer.MoveTransport(DirectionType1.Left);
|
_drawningBulldozerProstoy.MoveTransport(DirectionType.Left);
|
||||||
break;
|
break;
|
||||||
case "buttonRight":
|
case "buttonRight":
|
||||||
result =
|
result =
|
||||||
_drawningBulldozer.MoveTransport(DirectionType1.Right);
|
_drawningBulldozerProstoy.MoveTransport(DirectionType.Right);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (result)
|
if (result)
|
||||||
@ -94,6 +122,6 @@ namespace ProjectBulldozer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user