package Trolleybus; import java.awt.*; import java.util.Random; public class DrawingBus { public EntityBus EntityBus; public EntityBus getEntityBus() {return EntityBus;} private void setEntityBus(EntityBus entityBus) {EntityBus = entityBus;} public IDrawingDoors Doors; // Ширина окна private int _pictureWidth; // Высота окна private int _pictureHeight; // Левая координата прорисовки автобуса protected int _startPosX; // Верхняя координата прорисовки автобуса protected int _startPosY; // Ширина прорисовки автобуса protected int _busWidth = 150; // Высота прорисовки автобуса protected int _busHeight = 95; public int GetPosX() { return _startPosX; } public int GetPosY() { return _startPosY; } public int GetWidth() { return _busWidth; } public int GetHeight() { return _busHeight; } public DrawingBus(int speed, double weight, Color bodyColor, int width, int height) { if (width < _busWidth || height < _busHeight) { return; } _startPosX = 0; _startPosY = 0; _pictureWidth = width; _pictureHeight = height; EntityBus = new EntityBus(speed, weight, bodyColor); Random random = new Random(); //Форма дверей int shape = random.nextInt(1,4); switch (shape) { case 1: Doors = new DrawingDoors(); break; case 2: Doors = new DrawingOvalDoors(); break; case 3: Doors = new DrawingTriangleDoors(); break; } //Количество дверей Doors.SetCntOfDoors(random.nextInt(3, 6)); } protected DrawingBus(int speed, double weight, Color bodyColor, int width, int height, int busWidth, int busHeight) { if (width <= _busWidth || height <= _busHeight) { return; } _startPosX = 0; _startPosY = 0; _pictureWidth = width; _pictureHeight = height; _busWidth = busWidth; _busHeight = busHeight; EntityBus = new EntityBus(speed, weight, bodyColor); Random random = new Random(); //Форма дверей int shape = random.nextInt(1,4); switch (shape) { case 1: Doors = new DrawingDoors(); break; case 2: Doors = new DrawingOvalDoors(); break; case 3: Doors = new DrawingTriangleDoors(); break; } //Количество дверей Doors.SetCntOfDoors(random.nextInt(3, 6)); } //Конструктор для усложнённой 3 public DrawingBus(EntityBus bus, IDrawingDoors doors, int width, int height) { if (width < _busWidth || height < _busHeight) { return; } _startPosX = 0; _startPosY = 0; _pictureWidth = width; _pictureHeight = height; EntityBus = bus; Doors = doors; } public void SetPosition(int x, int y){ _startPosX = Math.min(Math.max(x, 0), _pictureWidth - _busWidth); _startPosY = Math.min(Math.max(y, 0), _pictureHeight - _busHeight); } public boolean CanMove(DirectionType direction) { if (EntityBus == null) return false; boolean can = false; switch (direction) { case Left: can = _startPosX - EntityBus.Step >= 0; break; case Right: can = _startPosX + EntityBus.Step + _busWidth < _pictureWidth; break; case Down: can = _startPosY + EntityBus.Step + _busHeight < _pictureHeight; break; case Up: can = _startPosY - EntityBus.Step >= 0; break; }; return can; } public void MoveTransport(DirectionType direction){ if (!CanMove(direction) || EntityBus == null) { return; } switch (direction) { case Left: if (_startPosX - EntityBus.Step >= 0) { _startPosX -= (int) EntityBus.Step; } break; case Up: if (_startPosY - EntityBus.Step >= 0) { _startPosY -= (int) EntityBus.Step; } break; case Right: if (_startPosX + EntityBus.Step + _busWidth <= _pictureWidth) { _startPosX += (int) EntityBus.Step; } break; case Down: if (_startPosY + EntityBus.Step + _busHeight <= _pictureHeight) { _startPosY += (int) EntityBus.Step; } break; } } public void DrawTransport(Graphics g) { if (EntityBus == null) { return; } Graphics2D g2d = (Graphics2D)g; //Корпус g2d.setColor(EntityBus.getBodyColor()); g2d.drawLine(_startPosX, _startPosY + 30, _startPosX, _startPosY + 80); g2d.drawLine(_startPosX, _startPosY + 80, _startPosX + 20, _startPosY + 80); g2d.drawLine(_startPosX + 45, _startPosY + 80, _startPosX + 105, _startPosY + 80); g2d.drawLine(_startPosX + 130, _startPosY + 80, _startPosX + 150, _startPosY + 80); g2d.drawLine(_startPosX + 150, _startPosY + 80, _startPosX + 150, _startPosY + 30); g2d.drawLine(_startPosX + 150, _startPosY + 30, _startPosX, _startPosY + 30); //Колёса g2d.setColor(Color.BLACK); g2d.drawOval(_startPosX + 20, _startPosY + 70, 25, 25); g2d.drawOval(_startPosX + 105, _startPosY + 70, 25, 25); //Двери Doors.DrawDoors(g2d, EntityBus.getBodyColor(), _startPosX, _startPosY); } public IMoveableObject GetMoveableObject(){ return new DrawingObjectBus(this); } }