106 lines
5.2 KiB
C#
106 lines
5.2 KiB
C#
using Battleship.Entities;
|
||
|
||
namespace Battleship.Drawings;
|
||
/// <summary>
|
||
/// Класс, отвечающий за отрисовку и перемещение объекта-сущности
|
||
/// </summary>
|
||
public class DrawingBattleship : DrawingWarship
|
||
{
|
||
/// <summary>
|
||
/// Конструктор
|
||
/// </summary>
|
||
/// <param name="speed">Скорость</param>
|
||
/// <param name="weight">Вес</param>
|
||
/// <param name="bodyColor">Основной цвет</param>
|
||
/// <param name="additionalColor">Дополнительный цвет</param>
|
||
/// <param name="bodyDeck">Признак наличия палубы</param>
|
||
/// <param name="compartment">Признак наличия отсека для ракет</param>
|
||
/// <param name="tower">Признак наличия башни</param>
|
||
public DrawingBattleship(int speed, double weight, Color bodyColor, Color additionalColor, bool bodyDeck, bool compartment, bool tower) : base(129, 80)
|
||
{
|
||
EntityWarship = new EntityBattleship(speed, weight, bodyColor, compartment, tower, bodyDeck, additionalColor);
|
||
}
|
||
|
||
public override void DrawTransport(Graphics g)
|
||
{
|
||
if (EntityWarship == null || EntityWarship is not EntityBattleship battleship || !_startPosX.HasValue || !_startPosY.HasValue)
|
||
{
|
||
return;
|
||
}
|
||
|
||
Pen pen = new(Color.Black);
|
||
Brush additionalBrush = new SolidBrush(battleship.AdditionalColor);
|
||
|
||
//отсек для ракет
|
||
if (battleship.BodyDeck)
|
||
{
|
||
//заливка линкора
|
||
Brush br = new SolidBrush(EntityWarship.BodyColor);
|
||
g.FillRectangle(br, _startPosX.Value + 10, _startPosY.Value, 80, 40);
|
||
//границы линкора
|
||
g.DrawRectangle(pen, _startPosX.Value + 10, _startPosY.Value, 80, 40); //ширина высота (сама палуба)
|
||
|
||
//заливка двигателей (2 фигни сзади)
|
||
Brush brBlack = new SolidBrush(Color.Black);
|
||
g.FillRectangle(brBlack, _startPosX.Value + 5, _startPosY.Value + 7, 5, 10); //верхний
|
||
g.FillRectangle(brBlack, _startPosX.Value + 5, _startPosY.Value + 22, 5, 10); //нижний
|
||
//границы двигателей
|
||
g.DrawRectangle(pen, _startPosX.Value + 5, _startPosY.Value + 7, 5, 10); //двигатель верхний
|
||
g.DrawRectangle(pen, _startPosX.Value + 5, _startPosY.Value + 22, 5, 10); //двигатель нижний
|
||
|
||
//прямоугольник левый на палубе (горизонтальный)
|
||
Brush brLightSteelBlue = new SolidBrush(Color.LightSteelBlue);
|
||
g.FillRectangle(brLightSteelBlue, _startPosX.Value + 32, _startPosY.Value + 13, 21, 12);
|
||
g.DrawRectangle(pen, _startPosX.Value + 32, _startPosY.Value + 13, 21, 12);
|
||
|
||
//прямоугольник правый на палубе (вертикальный)
|
||
Brush brGray = new SolidBrush(Color.Gray);
|
||
g.FillRectangle(brGray, _startPosX.Value + 53, _startPosY.Value + 7, 16, 24);
|
||
g.DrawRectangle(pen, _startPosX.Value + 53, _startPosY.Value + 7, 16, 24);
|
||
|
||
//линии для треугольника
|
||
Point[] pointsNOS =
|
||
{
|
||
new Point(_startPosX.Value + 90, _startPosY.Value),
|
||
new Point(_startPosX.Value + 120, _startPosY.Value + 20),
|
||
new Point(_startPosX.Value + 90, _startPosY.Value + 40),
|
||
|
||
};
|
||
g.DrawPolygon(pen, pointsNOS);
|
||
g.FillPolygon(br, pointsNOS);
|
||
|
||
//заливка круга
|
||
Brush brLightSlateGray = new SolidBrush(Color.LightSlateGray);
|
||
g.FillEllipse(brLightSlateGray, _startPosX.Value + 78, _startPosY.Value + 12, 15, 15);
|
||
//круг на палубе
|
||
g.DrawEllipse(pen, _startPosX.Value + 78, _startPosY.Value + 12, 15, 15);
|
||
}
|
||
|
||
base.DrawTransport(g);
|
||
|
||
//башня
|
||
if (battleship.Tower)
|
||
{
|
||
//заливка башни
|
||
g.FillEllipse(additionalBrush, _startPosX.Value + 98, _startPosY.Value + 15, 10, 10);
|
||
g.FillRectangle(additionalBrush, _startPosX.Value + 107, _startPosY.Value + 17, 30, 5);
|
||
|
||
//границы башни
|
||
g.DrawEllipse(pen, _startPosX.Value + 98, _startPosY.Value + 15, 10, 10);
|
||
g.DrawRectangle(pen, _startPosX.Value + 107, _startPosY.Value + 17, 30, 5);
|
||
}
|
||
|
||
//отсек
|
||
if (battleship.Compartment)
|
||
{
|
||
g.FillRectangle(additionalBrush, _startPosX.Value + 15, _startPosY.Value + 5, 27, 5); //верхний отсек для ракет
|
||
g.FillRectangle(additionalBrush, _startPosX.Value + 15, _startPosY.Value + 28, 27, 5); //нижний отсек для ракет
|
||
|
||
//границы отсеков
|
||
g.DrawRectangle(pen, _startPosX.Value + 15, _startPosY.Value + 5, 27, 5); //верхний отсек
|
||
g.DrawRectangle(pen, _startPosX.Value + 15, _startPosY.Value + 28, 27, 5); //нижний отсек
|
||
}
|
||
}
|
||
|
||
}
|