import java.awt.*; import java.util.Random; public class DrawingModernMonorail { private EntityModernMonorail _entityMonorail; private DrawingWheels _wheels; private Integer _pictureWidth = null; private Integer _pictureHeight = null; private int _startPositionX; private int _startPositionY; private int _drawningMonorailWidth = 160; private final int _drawningMonorailHeight = 55; public EntityModernMonorail getMonorail() {return _entityMonorail;} public DrawingWheels getWheels() {return _wheels;} public void Initialization(int speed, float weight, Color bodyColor, Color additionalColor, boolean monorailTrack, boolean cabin) { _entityMonorail = new EntityModernMonorail(); _entityMonorail.Initialization(speed, weight, bodyColor, additionalColor, monorailTrack, cabin); _wheels = new DrawingWheels(); Random rnd = new Random(); _wheels.SetCountWheels(2 + rnd.nextInt(0, 3)); } public boolean SetPictureSize(int width, int height) { if (_drawningMonorailWidth > width || _drawningMonorailHeight > height) return false; if (_startPositionX >= 0 && _startPositionY >= 0) { if (_startPositionX + _drawningMonorailWidth > width) { _startPositionX = width - _drawningMonorailWidth; } if (_startPositionY + _drawningMonorailHeight > height) { _startPositionY = height - _drawningMonorailHeight; } } _pictureWidth = width; _pictureHeight = height; return true; } public void SetPosition(int x, int y, int width, int height) { if (_pictureHeight == null || _pictureWidth == null) return; if (x + _drawningMonorailWidth > _pictureWidth || x < 0) { _startPositionX = (int)Math.random() * (_pictureWidth - _drawningMonorailWidth); } else { _startPositionX = x; } if (y + _drawningMonorailHeight > _pictureHeight || y < 0) { _startPositionY = (int)Math.random() * (_pictureHeight - _drawningMonorailHeight); } else { _startPositionY = y; } } public boolean MoveTransport(DirectionType direction) { if (_pictureWidth == null || _pictureHeight == null) return false; switch (direction) { case Right: if (_startPositionX + _drawningMonorailWidth + _entityMonorail.Step < _pictureWidth) { _startPositionX += _entityMonorail.Step; } return true; case Left: if (_startPositionX - _entityMonorail.Step >= 0) { _startPositionX -= _entityMonorail.Step; } return true; case Up: if (_startPositionY - _entityMonorail.Step >= 0) { _startPositionY -= _entityMonorail.Step; } return true; case Down: if (_startPositionY + _drawningMonorailHeight + _entityMonorail.Step < _pictureHeight) { _startPositionY += _entityMonorail.Step; } return true; default: return false; } } public void DrawTransport(Graphics g) { if (_startPositionX < 0 || _startPositionY < 0 || _pictureHeight== null || _pictureWidth== null) return; Graphics2D g2 = (Graphics2D) g; g.setColor(_entityMonorail.getBodyColor()); //Кузов монорельса g.drawLine(_startPositionX + 8, _startPositionY + 10, _startPositionX + 13, _startPositionY); g.drawLine(_startPositionX + 13, _startPositionY, _startPositionX + 80, _startPositionY); g.drawLine(_startPositionX + 80, _startPositionY, _startPositionX + 80, _startPositionY + 25); g.drawLine(_startPositionX + 80, _startPositionY + 25, _startPositionX + 8, _startPositionY + 25); g.drawLine(_startPositionX + 8, _startPositionY + 25, _startPositionX + 8, _startPositionY + 10); g.drawLine(_startPositionX + 8, _startPositionY + 10, _startPositionX + 30, _startPositionY + 10); g.drawLine(_startPositionX + 39, _startPositionY + 10, _startPositionX + 80, _startPositionY + 10); //Дверь g.drawRect(_startPositionX + 30, _startPositionY + 5, 9, 15); //Окна g.setColor(_entityMonorail.getAdditionalColor()); g.drawRect(_startPositionX + 14, _startPositionY + 2, 5, 6); g.drawRect(_startPositionX + 21, _startPositionY + 2, 5, 6); g.drawRect(_startPositionX + 70, _startPositionY + 2, 5, 6); //Связка монорельса g.setColor(_entityMonorail.getBodyColor()); g.fillRect(_startPositionX + 80, _startPositionY + 2, 7, 22); //Нижняя часть монорельса int xPoly_LeftSide[] = {_startPositionX, _startPositionX + 8, _startPositionX + 72, _startPositionX + 36, _startPositionX + 36, _startPositionX + 15, _startPositionX + 15, _startPositionX}; int yPoly_LeftSide[] = {_startPositionY + 30, _startPositionY + 25, _startPositionY + 25, _startPositionY + 25, _startPositionY + 32, _startPositionY + 32, _startPositionY + 35, _startPositionY + 32}; g.fillPolygon(xPoly_LeftSide, yPoly_LeftSide, xPoly_LeftSide.length); int xPoly_RightSide[] = {_startPositionX + 86, _startPositionX + 80, _startPositionX + 50, _startPositionX + 50, _startPositionX + 69, _startPositionX + 79, _startPositionX + 86}; int yPoly_RightSide[] = {_startPositionY + 30, _startPositionY + 25, _startPositionY + 25, _startPositionY + 32, _startPositionY + 32, _startPositionY + 35, _startPositionY + 32}; g.fillPolygon(xPoly_RightSide, yPoly_RightSide, xPoly_RightSide.length); g.fillRect(_startPositionX + 8, _startPositionY + 25, 70, 3); if (_entityMonorail.getMonorailTrack()) { if (_entityMonorail.getCabin()) { g.fillRect(_startPositionX, _startPositionY + 35, 170, 5); } else { g.fillRect(_startPositionX, _startPositionY + 35, 86, 5); } } //Колеса int[] coordinatesX = new int[_wheels.getCountWheels()]; coordinatesX[0] = _startPositionX + 10; coordinatesX[1] = _startPositionX + 65; if (coordinatesX.length == 4) { coordinatesX[2] = _startPositionX + 25; coordinatesX[3] = _startPositionX + 50; } else if (coordinatesX.length == 3) { Random rnd = new Random(); if (rnd.nextInt(0, 2) == 1) { coordinatesX[2] = _startPositionX + 25; } else { coordinatesX[2] = _startPositionX + 50; } } _wheels.DrawWheels(g2, coordinatesX, _startPositionY + 30, _entityMonorail.getAdditionalColor()); if (_entityMonorail.getCabin()) { int offset = 170; //Кузов монорельса g.drawLine(_startPositionX - 8 + offset, _startPositionY + 10, _startPositionX - 13 + offset, _startPositionY); g.drawLine(_startPositionX - 13 + offset, _startPositionY, _startPositionX - 80 + offset, _startPositionY); g.drawLine(_startPositionX - 80 + offset, _startPositionY, _startPositionX - 80 + offset, _startPositionY + 25); g.drawLine(_startPositionX - 80 + offset, _startPositionY + 25, _startPositionX - 8 + offset, _startPositionY + 25); g.drawLine(_startPositionX - 8 + offset, _startPositionY + 25, _startPositionX - 8 + offset, _startPositionY + 10); g.drawLine(_startPositionX - 8 + offset, _startPositionY + 10, _startPositionX - 30 + offset, _startPositionY + 10); g.drawLine(_startPositionX - 39 + offset, _startPositionY + 10, _startPositionX - 80 + offset, _startPositionY + 10); //Дверь g.drawRect(_startPositionX - 39 + offset, _startPositionY + 5, 9, 15); //Окна g.setColor(_entityMonorail.getAdditionalColor()); g.drawRect(_startPositionX - 20 + offset, _startPositionY + 2, 5, 6); g.drawRect(_startPositionX - 27 + offset, _startPositionY + 2, 5, 6); g.drawRect(_startPositionX - 76 + offset, _startPositionY + 2, 5, 6); //Связка монорельса g.setColor(_entityMonorail.getBodyColor()); g.fillRect(_startPositionX - 87 + offset, _startPositionY + 2, 7, 22); //Нижняя часть монорельса xPoly_LeftSide = new int[]{_startPositionX + offset, _startPositionX - 8 + offset, _startPositionX - 72 + offset, _startPositionX - 36 + offset, _startPositionX - 36 + offset, _startPositionX - 15 + offset, _startPositionX - 15 + offset, _startPositionX + offset}; yPoly_LeftSide = new int[] {_startPositionY + 30, _startPositionY + 25, _startPositionY + 25, _startPositionY + 25, _startPositionY + 32, _startPositionY + 32, _startPositionY + 35, _startPositionY + 32}; g.fillPolygon(xPoly_LeftSide, yPoly_LeftSide, xPoly_LeftSide.length); xPoly_RightSide = new int[]{_startPositionX - 86 + offset, _startPositionX - 80 + offset, _startPositionX - 50 + offset, _startPositionX - 50 + offset, _startPositionX - 69 + offset, _startPositionX - 79 + offset, _startPositionX - 86 + offset}; yPoly_RightSide = new int[] {_startPositionY + 30, _startPositionY + 25, _startPositionY+ 25, _startPositionY + 32, _startPositionY + 32 , _startPositionY + 35, _startPositionY + 32}; g.fillPolygon(xPoly_RightSide, yPoly_RightSide, xPoly_RightSide.length); g.fillRect(_startPositionX - 80 + offset, _startPositionY + 25, 70, 3); //Колеса coordinatesX = new int[_wheels.getCountWheels()]; coordinatesX[0] = _startPositionX - 20 + offset; coordinatesX[1] = _startPositionX - 75 + offset; if (coordinatesX.length == 4) { coordinatesX[2] = _startPositionX - 35 + offset; coordinatesX[3] = _startPositionX - 60 + offset; } else if (coordinatesX.length == 3) { Random rnd = new Random(); if (rnd.nextInt(0, 2) == 1) { coordinatesX[2] = _startPositionX - 35 + offset; } else { coordinatesX[2] = _startPositionX - 60 + offset; } } _wheels.DrawWheels(g2, coordinatesX, _startPositionY + 30, _entityMonorail.getAdditionalColor()); } } }