import java.awt.*; import java.awt.Color; import java.util.Random; public class DrawingPlane { public EntityPlane Airbus; //класс-сущность public DrawingAirplaneWindow _airplaneWindow; //для дополнительной отрисовки private float _startPosX; //левая координата отрисовки private float _startPosY; //верхняя координата отрисовки private Integer _pictureWidth = null; //ширина окна отрисовки private Integer _pictureHeight = null; //высота окна отрисовки protected final int _airbusWidth = 50; //ширина отрисовки самолёта protected final int _airbusHeight = 16; //высота отрисовки самолёта //инициализаци свойств public void Initial(int speed, float weight, Color corpusColor) { Airbus = new EntityPlane(); Airbus.Initial(speed, weight, corpusColor); _airplaneWindow = new DrawingAirplaneWindow(); SetAddEnum(); } //установка кол-ва иллюминаторов public void SetAddEnum() { Random rnd = new Random(); int countWindow = rnd.nextInt(1, 4); _airplaneWindow.SetAddEnum(countWindow); } public EntityPlane GetPlane() { return Airbus; } //установка координат позиции самолёта public void SetPosition(int x, int y, int width, int height) { if (x < 0 || y < 0 || width <= x + _airbusWidth || height <= y + _airbusHeight) { _pictureHeight = null; _pictureWidth = null; return; } _startPosX = x; _startPosY = y; _pictureWidth = width; _pictureHeight = height; } //изменение направления движения public void MoveTransport(Direction direction) { if (GetPlane() == null) { return; } switch (direction) { case Right: //вправо if (_startPosX + _airbusWidth + Airbus.GetStep() < _pictureWidth) { _startPosX += Airbus.GetStep(); } break; case Left: //влево if (_startPosX - _airbusWidth - Airbus.GetStep() > 0) { _startPosX -= Airbus.GetStep(); } break; case Up: //вверх if (_startPosY - _airbusHeight - Airbus.GetStep() > 0) { _startPosY -= Airbus.GetStep(); } break; case Down: //вниз if (_startPosY + _airbusHeight + Airbus.GetStep() < _pictureHeight) { _startPosY += Airbus.GetStep(); } break; } } public void DrawTransport(Graphics g) { if (_startPosX < 0 || _startPosY < 0 || _pictureHeight == null || _pictureWidth == null) { return; } if(GetPlane() == null){ return; } Graphics2D g2d = (Graphics2D)g; g2d.setColor(Color.WHITE); g2d.fillRect(0, 0, _pictureWidth, _pictureHeight); //заливает фигуру g2d.setPaint(Color.BLACK); //крыло g2d.fillRect((int)_startPosX + 10, (int)_startPosY + 15, 20, 2); g2d.fillRect((int)_startPosX + 12, (int)_startPosY + 17, 16, 2); //заднее поперечное крыло g2d.fillOval((int)_startPosX - 3, (int)_startPosY + 7, 10, 5); //задние шасси g2d.fillRect((int)_startPosX + 10, (int)_startPosY + 21, 2, 2); g2d.fillRect((int)_startPosX + 12, (int)_startPosY + 23, 4, 4); g2d.fillRect((int)_startPosX + 8, (int)_startPosY + 23, 2, 4); //переднее шасси g2d.fillRect((int)_startPosX + 35, (int)_startPosY + 21, 2, 2); g2d.fillRect((int)_startPosX + 35, (int)_startPosY + 23, 4, 4); g2d.setColor(Color.BLACK); //рисует контур //корпус g2d.drawRect((int)_startPosX, (int)_startPosY + 10, 40, 10); //хвостовое крыло g2d.drawLine((int)_startPosX, (int)_startPosY + 10, (int)_startPosX, (int)_startPosY); g2d.drawLine((int)_startPosX, (int)_startPosY, (int)_startPosX + 10, (int)_startPosY + 10); //нос самолёта g2d.drawLine((int)_startPosX + 40, (int)_startPosY + 15, (int)_startPosX + 50, (int)_startPosY + 16); g2d.drawLine((int)_startPosX + 40, (int)_startPosY + 10, (int)_startPosX + 47, (int)_startPosY + 15); g2d.drawLine((int)_startPosX + 40, (int)_startPosY + 20, (int)_startPosX + 50, (int)_startPosY + 15); //отрисовка иллюминаторов _airplaneWindow.DrawAirplaneWindow(Airbus.GetColor(), g, _startPosX, _startPosY); } //смена границ формы отрисовки public void ChangeBorders(int width, int height) { _pictureWidth = width; _pictureHeight = height; if (_pictureWidth <= _airbusWidth || _pictureHeight <= _airbusHeight) { _pictureWidth = null; _pictureHeight = null; return; } if (_startPosX + _airbusWidth > _pictureWidth) { _startPosX = _pictureWidth - _airbusWidth; } if (_startPosY + _airbusHeight > _pictureHeight) { _startPosY = _pictureHeight - _airbusHeight; } } }