50 % works
This commit is contained in:
parent
4d1ad4893f
commit
72d382a1e3
@ -0,0 +1,31 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace PIbd_23_Ivanov_V.N._DoubleDeckerBus._Base
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Направление перемещения
|
||||||
|
/// </summary>
|
||||||
|
public enum DirectionType
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Вверх
|
||||||
|
/// </summary>
|
||||||
|
Up = 1,
|
||||||
|
/// <summary>
|
||||||
|
/// Вниз
|
||||||
|
/// </summary>
|
||||||
|
Down = 2,
|
||||||
|
/// <summary>
|
||||||
|
/// Влево
|
||||||
|
/// </summary>
|
||||||
|
Left = 3,
|
||||||
|
/// <summary>
|
||||||
|
/// Вправо
|
||||||
|
/// </summary>
|
||||||
|
Right = 4
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,168 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace PIbd_23_Ivanov_V.N._DoubleDeckerBus._Base
|
||||||
|
{
|
||||||
|
internal class DrawningDoubleDeckerBus
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Класс-сущность
|
||||||
|
/// </summary>
|
||||||
|
public EntityDoubleDeckerBus? EntityDoubleDeckerBus { 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 _busWidth = 100;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Высота прорисовки автобуса
|
||||||
|
/// </summary>
|
||||||
|
private readonly int _busHeight = 50;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Инициализация свойств
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="speed">Скорость</param>
|
||||||
|
/// <param name="weight">Вес</param>
|
||||||
|
/// <param name="bodyColor">Цвет кузова</param>
|
||||||
|
/// <param name="additionalColor">Дополнительный цвет</param>
|
||||||
|
/// <param name="secondFloor">Признак наличия второго этажа</param>
|
||||||
|
/// <param name="ladder">Признак наличия лестницы на второй этаж</param>
|
||||||
|
/// <param name="roadLine">Признак наличия дорожной полосы</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 secondFloor, bool ladder, bool roadLine, int width, int height)
|
||||||
|
{
|
||||||
|
_pictureWidth = width;
|
||||||
|
_pictureHeight = height;
|
||||||
|
if (_pictureHeight < _busHeight || _pictureWidth < _busWidth)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
EntityDoubleDeckerBus = new EntityDoubleDeckerBus();
|
||||||
|
EntityDoubleDeckerBus.Init(speed, weight, bodyColor, additionalColor,
|
||||||
|
secondFloor, ladder, roadLine);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Установка позиции
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="x">Координата X</param>
|
||||||
|
/// <param name="y">Координата Y</param>
|
||||||
|
public void SetPosition(int x, int y)
|
||||||
|
{
|
||||||
|
_startPosX = Math.Min(x, _pictureWidth - _busWidth);
|
||||||
|
_startPosY = Math.Min(y, _pictureHeight - _busHeight);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Изменение направления перемещения
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="direction">Направление</param>
|
||||||
|
public void MoveTransport(DirectionType direction)
|
||||||
|
{
|
||||||
|
if (EntityDoubleDeckerBus == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
switch (direction)
|
||||||
|
{
|
||||||
|
//влево
|
||||||
|
case DirectionType.Left:
|
||||||
|
if (_startPosX - EntityDoubleDeckerBus.Step > 0)
|
||||||
|
{
|
||||||
|
_startPosX -= (int)EntityDoubleDeckerBus.Step;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
//вверх
|
||||||
|
case DirectionType.Up:
|
||||||
|
if (_startPosY - EntityDoubleDeckerBus.Step > 0)
|
||||||
|
{
|
||||||
|
_startPosY -= (int)EntityDoubleDeckerBus.Step;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
// вправо
|
||||||
|
case DirectionType.Right:
|
||||||
|
if (_startPosX + _busWidth + EntityDoubleDeckerBus.Step < _pictureWidth)
|
||||||
|
{
|
||||||
|
_startPosX += (int)EntityDoubleDeckerBus.Step;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
//вниз
|
||||||
|
case DirectionType.Down:
|
||||||
|
if (_startPosY + _busHeight + EntityDoubleDeckerBus.Step < _pictureHeight)
|
||||||
|
{
|
||||||
|
_startPosY += (int)EntityDoubleDeckerBus.Step;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Прорисовка объекта
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="g"></param>
|
||||||
|
public void DrawTransport(Graphics g)
|
||||||
|
{
|
||||||
|
if (EntityDoubleDeckerBus == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Pen pen = new(Color.Black);
|
||||||
|
|
||||||
|
//границы автобсуса
|
||||||
|
g.DrawRectangle(pen, _startPosX - 1, _startPosY + 11, 100, 30);
|
||||||
|
Brush brBodyColor = new SolidBrush(EntityDoubleDeckerBus.BodyColor);
|
||||||
|
g.FillRectangle(brBodyColor, _startPosX, _startPosY + 10, 100, 30);
|
||||||
|
|
||||||
|
//Дверь
|
||||||
|
g.DrawRectangle(pen, _startPosX + 30, _startPosY + 20, 10, 20);
|
||||||
|
Brush brBlack = new SolidBrush(Color.Black);
|
||||||
|
g.FillRectangle(brBlack, _startPosX + 30, _startPosY + 20, 10, 20);
|
||||||
|
|
||||||
|
//Колеса
|
||||||
|
g.DrawEllipse(pen, _startPosX + 7, _startPosY + 35, 10, 10);
|
||||||
|
g.DrawEllipse(pen, _startPosX + 77, _startPosY + 35, 10, 10);
|
||||||
|
g.FillEllipse(brBlack, _startPosX + 7, _startPosY + 35, 10, 10);
|
||||||
|
g.FillEllipse(brBlack, _startPosX + 77, _startPosY + 35, 10, 10);
|
||||||
|
|
||||||
|
//окна
|
||||||
|
Brush brBlue = new SolidBrush(Color.Blue);
|
||||||
|
g.FillEllipse(brBlue, _startPosX + 10, _startPosY + 15, 10, 15);
|
||||||
|
g.FillEllipse(brBlue, _startPosX + 50, _startPosY + 15, 10, 15);
|
||||||
|
g.FillEllipse(brBlue, _startPosX + 70, _startPosY + 15, 10, 15);
|
||||||
|
g.FillEllipse(brBlue, _startPosX + 90, _startPosY + 15, 10, 15);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,68 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace PIbd_23_Ivanov_V.N._DoubleDeckerBus._Base
|
||||||
|
{
|
||||||
|
public class EntityDoubleDeckerBus
|
||||||
|
{
|
||||||
|
/// <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 SecondFloor { get; private set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Признак (опция) наличия лестницы на второй этаж
|
||||||
|
/// </summary>
|
||||||
|
public bool Ladder { get; private set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Признак (опция) наличия гоночной полосы
|
||||||
|
/// </summary>
|
||||||
|
public bool RoadLine { 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="secondFloor">Признак наличия второго этажа</param>
|
||||||
|
/// <param name="ladder">Признак наличия лестницы на второй этаж</param>
|
||||||
|
/// <param name="roadLine">Признак наличия дорожной полосы</param>
|
||||||
|
|
||||||
|
public void Init(int speed, double weight, Color bodyColor, Color
|
||||||
|
additionalColor, bool secondFloor, bool ladder, bool roadLine)
|
||||||
|
{
|
||||||
|
Speed = speed;
|
||||||
|
Weight = weight;
|
||||||
|
BodyColor = bodyColor;
|
||||||
|
AdditionalColor = additionalColor;
|
||||||
|
SecondFloor = secondFloor;
|
||||||
|
Ladder = ladder;
|
||||||
|
RoadLine = roadLine;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user