import java.awt.*; // Класс, отвечающий за прорисовку и перемещение объекта-сущности public class DrawningTracktor { private EntityTracktor Tracktor; // Класс-сущность public EntityTracktor getTracktor(){ return Tracktor; } private float _startPosX; // Левая координата отрисовки трактора private float _startPosY; // Верхняя кооридната отрисовки трактора private Integer _pictureWidth = null; // Ширина окна отрисовки private Integer _pictureHeight = null; // Высота окна отрисовки private final int _tracktorWidth = 110; // Ширина отрисовки трактора private final int _tracktorHeight = 87; // Высота отрисовки трактора // Инициализация свойств public void Init(int speed, float weight, Color bodyColor) { Tracktor = new EntityTracktor(); Tracktor.Init(speed, weight, bodyColor); } // Установка позиции Трактора public void SetPosition(int x, int y, int width, int height) { if (x + _tracktorWidth > width || x < 0 || y + _tracktorHeight > height || y < 0) { return; } _startPosX = x; _startPosY = y; _pictureWidth = width; _pictureHeight = height; } // Изменение направления перемещения public void MoveTransport(Direction direction) { if (_pictureWidth == null || _pictureHeight == null) { return; } switch (direction) { // вправо case Right: if (_startPosX + _tracktorWidth + Tracktor.getStep() < _pictureWidth) { _startPosX += Tracktor.getStep(); } break; //влево case Left: if (_startPosX - Tracktor.getStep() > 0) { _startPosX -= Tracktor.getStep(); } break; //вверх case Up: if (_startPosY - Tracktor.getStep() > 0) { _startPosY -= Tracktor.getStep(); } break; //вниз case Down: if (_startPosY + _tracktorHeight + Tracktor.getStep() < _pictureHeight) { _startPosY += Tracktor.getStep(); } break; } } // Отрисовка Трактора public void DrawTransport(Graphics g) { if (_startPosX < 0 || _startPosY < 0 || _pictureHeight == null || _pictureWidth == null) { return; } Color penColor = Color.BLACK; // корпус Color br = Tracktor!=null ? Tracktor.getBodyColor() : Color.GRAY ; g.setColor(br); g.fillRect((int)_startPosX + 10, (int)_startPosY + 30, 90, 25); g.setColor(penColor); g.drawRect((int)_startPosX + 10, (int)_startPosY + 30, 90, 25); // окно g.setColor(Color.CYAN); g.fillRect((int)_startPosX + 65, (int)_startPosY + 1, 30, 29); g.setColor(penColor); g.drawRect((int)_startPosX + 65, (int)_startPosY + 1, 30, 29); // труба g.setColor(Color.RED); g.fillRect((int)_startPosX + 30, (int)_startPosY + 10, 10, 20); g.setColor(penColor); g.drawRect((int)_startPosX + 30, (int)_startPosY + 10, 10, 20); // гусеница g.setColor(Color.DARK_GRAY); g.fillOval((int)_startPosX + 1, (int)_startPosY + 57, 20, 20); g.setColor(penColor); g.drawOval((int)_startPosX + 1, (int)_startPosY + 57, 20, 20); g.setColor(Color.DARK_GRAY); g.fillOval((int)_startPosX + 1, (int)_startPosY + 65, 20, 20); g.setColor(penColor); g.drawOval((int)_startPosX + 1, (int)_startPosY + 65, 20, 20); g.setColor(Color.DARK_GRAY); g.fillOval((int)_startPosX + 90, (int)_startPosY + 57, 20, 20); g.setColor(penColor); g.drawOval((int)_startPosX + 90, (int)_startPosY + 57, 20, 20); g.setColor(Color.DARK_GRAY); g.fillOval((int)_startPosX + 90, (int)_startPosY + 65, 20, 20); g.setColor(penColor); g.drawOval((int)_startPosX + 90, (int)_startPosY + 65, 20, 20); g.setColor(Color.DARK_GRAY); g.fillRect((int)_startPosX + 10, (int)_startPosY + 57, 90, 30); g.fillRect((int)_startPosX + 1, (int)_startPosY + 65, 110, 10); g.setColor(penColor); g.drawLine((int)_startPosX + 10, (int)_startPosY + 57, (int)_startPosX + 100, (int)_startPosY + 57); g.drawLine((int)_startPosX + 10, (int)_startPosY + 86, (int)_startPosX + 100, (int)_startPosY + 86); g.drawLine((int)_startPosX + 1, (int)_startPosY + 65, (int)_startPosX + 1, (int)_startPosY + 75); g.drawLine((int)_startPosX + 110, (int)_startPosY + 65, (int)_startPosX + 110, (int)_startPosY + 75); // Крупные катки g.setColor(Color.LIGHT_GRAY); g.fillOval((int)_startPosX + 5, (int)_startPosY + 60, 22, 22); g.setColor(penColor); g.drawOval((int)_startPosX + 5, (int)_startPosY + 60, 22, 22); g.setColor(Color.LIGHT_GRAY); g.fillOval((int)_startPosX + 83, (int)_startPosY + 60, 22, 22); g.setColor(penColor); g.drawOval((int)_startPosX + 83, (int)_startPosY + 60, 22, 22); // Средние катки g.setColor(Color.LIGHT_GRAY); g.fillOval((int)_startPosX + 33, (int)_startPosY + 73, 10, 10); g.setColor(penColor); g.drawOval((int)_startPosX + 33, (int)_startPosY + 73, 10, 10); g.setColor(Color.LIGHT_GRAY); g.fillOval((int)_startPosX + 50, (int)_startPosY + 73, 10, 10); g.setColor(penColor); g.drawOval((int)_startPosX + 50, (int)_startPosY + 73, 10, 10); g.setColor(Color.LIGHT_GRAY); g.fillOval((int)_startPosX + 68, (int)_startPosY + 73, 10, 10); g.setColor(penColor); g.drawOval((int)_startPosX + 68, (int)_startPosY + 73, 10, 10); // Малые катки g.setColor(Color.LIGHT_GRAY); g.fillOval((int)_startPosX + 43, (int)_startPosY + 58, 6, 6); g.setColor(penColor); g.drawOval((int)_startPosX + 43, (int)_startPosY + 58, 6, 6); g.setColor(Color.LIGHT_GRAY); g.fillOval((int)_startPosX + 61, (int)_startPosY + 58, 6, 6); g.setColor(penColor); g.drawOval((int)_startPosX + 61, (int)_startPosY + 58, 6, 6); // Центры крупных катков g.setColor(Color.BLACK); g.fillOval((int)_startPosX + 13, (int)_startPosY + 68, 6, 6); g.fillOval((int)_startPosX + 91, (int)_startPosY + 68, 6, 6); } // Смена границ формы отрисовки public void ChangeBorders(int width, int height) { _pictureWidth = width; _pictureHeight = height; if (_pictureWidth <= _tracktorWidth || _pictureHeight <= _tracktorHeight) { _pictureWidth = null; _pictureHeight = null; return; } if (_startPosX + _tracktorWidth > _pictureWidth) { _startPosX = _pictureWidth - _tracktorWidth; } if (_startPosY + _tracktorHeight > _pictureHeight) { _startPosY = _pictureHeight - _tracktorHeight; } } }