204 lines
8.6 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectAirFighter
{
/// <summary>
/// Класс, отвечающий за прорисовку и перемещение объекта-сущности
/// </summary>
public class DrawningAirFighter
{
/// <summary>
/// Класс-сущность
/// </summary>
public EntityAirFighter? EntityAirFighter { 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 _airWidth = 120;
/// <summary>
/// Высота прорисовки автомобиля
/// </summary>
private readonly int _airHeight = 105;
/// <summary>
/// Инициализация свойств
/// </summary>
/// <param name="speed">Скорость</param>
/// <param name="weight">Вес истребителя</param>
/// <param name="bodyColor">Основной цвет</param>
/// <param name="additionalColor">Дополнительный цвет</param>
/// <param name="additionalWings">Дополнительные крылья</param>
/// <param name="rocket">Ракеты</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 additionalWings, bool rocket, int width, int height)
{
if (width < _airWidth)
{
return false;
}
if (height < _airHeight)
{
return false;
}
_pictureWidth = width;
_pictureHeight = height;
EntityAirFighter = new EntityAirFighter();
EntityAirFighter.Init(speed, weight, bodyColor, additionalColor,
additionalWings, rocket);
return true;
}
/// <summary>
/// Установка позиции
/// </summary>
/// <param name="x">Координата X</param>
/// <param name="y">Координата Y</param>
public void SetPosition(int x, int y)
{
if (x < 0)
{
x = 0;
}
else if (x > _pictureWidth)
{
x = _pictureWidth;
}
if (y < 0)
{
y = 0;
}
else if (y > _pictureHeight)
{
y = _pictureHeight;
}
_startPosX = x;
_startPosY = y;
}
/// <summary>
/// Изменение направления перемещения
/// </summary>
/// <param name="direction">Направление</param>
public void MoveTransport(DirectionType direction)
{
if (EntityAirFighter == null)
{
return;
}
switch (direction)
{
//влево
case DirectionType.Left:
if (_startPosX - EntityAirFighter.Step > 0)
{
_startPosX -= (int)EntityAirFighter.Step;
}
break;
//вверх
case DirectionType.Up:
if (_startPosY - EntityAirFighter.Step > 0)
{
_startPosY -= (int)EntityAirFighter.Step;
}
break;
// вправо
case DirectionType.Right:
if (_startPosX + _airWidth + EntityAirFighter.Step < _pictureWidth)
{
_startPosX += (int)EntityAirFighter.Step;
}
break;
//вниз
case DirectionType.Down:
if (_startPosY + _airHeight + EntityAirFighter.Step < _pictureHeight)
{
_startPosY += (int)EntityAirFighter.Step;
}
break;
}
}
/// <summary>
/// Прорисовка объекта
/// </summary>
/// <param name="g"></param>
public void DrawTransport(Graphics g)
{
if (EntityAirFighter == null) return;
Pen pen = new(Color.Black);
Brush additionalBrush = new SolidBrush(EntityAirFighter.AdditionalColor);
// корпус
g.FillRectangle(additionalBrush, _startPosX + 40 - 20, _startPosY + 49, 100, 15);
g.DrawLine(pen, _startPosX + 40 - 20, _startPosY + 49, _startPosX + 25 - 20, _startPosY + 54);
g.DrawLine(pen, _startPosX + 25 - 20, _startPosY + 55, _startPosX + 40 - 20, _startPosY + 63);
g.DrawRectangle(pen, _startPosX + 40 - 20, _startPosY + 49, 100, 14);
// крылья
Brush brRed = new SolidBrush(Color.Red);
g.DrawLine(pen, _startPosX + 45 - 20, _startPosY + 49, _startPosX + 45 - 20, _startPosY + 12);
g.DrawLine(pen, _startPosX + 45 - 20, _startPosY + 12, _startPosX + 50 - 20, _startPosY + 12);
g.DrawLine(pen, _startPosX + 50 - 20, _startPosY + 12, _startPosX + 65 - 20, _startPosY + 49);
g.DrawLine(pen, _startPosX + 45 - 20, _startPosY + 64, _startPosX + 45 - 20, _startPosY + 101);
g.DrawLine(pen, _startPosX + 45 - 20, _startPosY + 101, _startPosX + 50 - 20, _startPosY + 101);
g.DrawLine(pen, _startPosX + 50 - 20, _startPosY + 101, _startPosX + 65 - 20, _startPosY + 64);
// малые крылья
g.DrawLine(pen, _startPosX + 127 - 20, _startPosY + 49, _startPosX + 127 - 20, _startPosY + 40);
g.DrawLine(pen, _startPosX + 127 - 20, _startPosY + 40, _startPosX + 140 - 20, _startPosY + 30);
g.DrawLine(pen, _startPosX + 140 - 20, _startPosY + 30, _startPosX + 140 - 20, _startPosY + 49);
g.DrawLine(pen, _startPosX + 127 - 20, _startPosY + 64, _startPosX + 127 - 20, _startPosY + 73);
g.DrawLine(pen, _startPosX + 127 - 20, _startPosY + 73, _startPosX + 140 - 20, _startPosY + 83);
g.DrawLine(pen, _startPosX + 140 - 20, _startPosY + 83, _startPosX + 140 - 20, _startPosY + 64);
// ракеты
if (EntityAirFighter.Rocket)
{
g.DrawLine(pen, _startPosX + 45 - 20, _startPosY + 9, _startPosX + 37 - 20, _startPosY + 14);
g.DrawLine(pen, _startPosX + 45 - 20, _startPosY + 19, _startPosX + 37 - 20, _startPosY + 14);
g.FillRectangle(additionalBrush, _startPosX + 45 - 20, _startPosY + 10, 20, 10);
g.DrawRectangle(pen, _startPosX + 45 - 20, _startPosY + 10, 19, 9);
g.DrawLine(pen, _startPosX + 45 - 20, _startPosY + 94, _startPosX + 37 - 20, _startPosY + 99);
g.DrawLine(pen, _startPosX + 45 - 20, _startPosY + 104, _startPosX + 37 - 20, _startPosY + 99);
g.FillRectangle(additionalBrush, _startPosX + 45 - 20, _startPosY + 95, 20, 10);
g.DrawRectangle(pen, _startPosX + 45 - 20, _startPosY + 95, 19, 9);
}
// доп крылья
if (EntityAirFighter.AdditionalWings)
{
g.DrawLine(pen, _startPosX + 107 - 20, _startPosY + 49, _startPosX + 127 - 20, _startPosY + 35);
g.DrawLine(pen, _startPosX + 127 - 20, _startPosY + 35, _startPosX + 127 - 20, _startPosY + 49);
g.DrawLine(pen, _startPosX + 107 - 20, _startPosY + 63, _startPosX + 127 - 20, _startPosY + 77);
g.DrawLine(pen, _startPosX + 127 - 20, _startPosY + 77, _startPosX + 127 - 20, _startPosY + 63);
}
}
}
}