import java.awt.*; import java.util.Random; import javax.swing.*; public class DrawningLocomotive { JPanel LocomotivePanel; private EntityLocomotive EntityLocomotive; private int pictureWidth; private int pictureHeight; private int startPosX; private int startPosY; private final int vehicleWidth = 170; private final int vehicleHeight = 110; private DrawningWheels DrawningWheels; protected int wheelSz; public EntityLocomotive EntityLocomotive(){ return EntityLocomotive; } public boolean Init(int speed, double weight, int width, int height, int wheelNum, Color colorBody, Color colorWindow, Color colorRoga, JPanel locomotivePanel) { if (width <= vehicleWidth || height <= vehicleHeight) { return false; } startPosX = 0; startPosY = 0; locomotivePanel.setSize(width, height); LocomotivePanel = locomotivePanel; locomotivePanel.paint(LocomotivePanel.getGraphics()); pictureWidth = width; pictureHeight = height; EntityLocomotive = new EntityLocomotive(); EntityLocomotive.Init(speed, weight, wheelNum, colorBody, colorWindow, colorRoga, LocomotivePanel.getBackground()); DrawningWheels = new DrawningWheels(); DrawningWheels.Init(vehicleWidth, vehicleHeight,startPosX,startPosY,Color.BLACK,Color.WHITE,locomotivePanel); Random rand = new Random(); DrawningWheels.ChangeWheelsNumb(rand.nextInt(8)+2); return true; } public void SetPosition(int x, int y) { if (EntityLocomotive == null) return; startPosX = x; startPosY = y; if (x + vehicleWidth >= pictureWidth || y + vehicleHeight >= pictureHeight) { startPosX = 1; startPosY = 1; } } public void MoveTransport(DirectionType direction) { if (EntityLocomotive == null) return; LocomotivePanel.paint(LocomotivePanel.getGraphics()); switch (direction) { case Left: if (startPosX - EntityLocomotive.Step() >= 0) startPosX -= (int)EntityLocomotive.Step(); else startPosX = 0; break; case Up: if (startPosY - EntityLocomotive.Step() >= 0) startPosY -= (int)EntityLocomotive.Step(); else startPosY = 0; break; case Right: if (startPosX + EntityLocomotive.Step() + vehicleWidth < pictureWidth) startPosX += (int)EntityLocomotive.Step(); else startPosX = pictureWidth - vehicleWidth; break; case Down: if (startPosY + EntityLocomotive.Step() + vehicleHeight < pictureHeight) startPosY += (int)EntityLocomotive.Step(); else startPosY = pictureHeight - vehicleHeight; break; } DrawningWheels.StartPosX = startPosX; DrawningWheels.StartPosY = startPosY; } public void DrawLoco() { if (EntityLocomotive == null) return; Graphics2D g = (Graphics2D)LocomotivePanel.getGraphics(); Color colorBody = EntityLocomotive.ColorBody(); Color colorWindow = EntityLocomotive.ColorWindow(); Color colorFillBody = EntityLocomotive.ColorFillBody(); Color colorRoga = EntityLocomotive.ColorRoga(); // Body g.setColor(colorBody); g.drawRect(startPosX, startPosY + vehicleHeight - 50, vehicleWidth - 10, vehicleHeight - 80); int[] xUpBodyPoints = { startPosX, startPosX + 10, startPosX + 150, startPosX + 160 }; int[] yUpBodyPoints = { startPosY + 60, startPosY + 30, startPosY + 30, startPosY + 60 }; g.drawPolygon(xUpBodyPoints, yUpBodyPoints, xUpBodyPoints.length); // Roga g.setColor(colorRoga); g.drawLine(startPosX + vehicleWidth / 2, startPosY + 30, startPosX + vehicleWidth / 2 + 10, startPosY + 15); g.drawLine(startPosX + vehicleWidth / 2 + 10, startPosY + 15, startPosX + vehicleWidth / 2, startPosY); // Door g.setColor(colorBody); g.drawRect(startPosX + vehicleWidth / 2 - 15, startPosY + 45, vehicleWidth / 10, vehicleHeight / 2 - 10); g.setColor(colorFillBody); g.fillRect(startPosX + vehicleWidth / 2 - 14, startPosY + 46, vehicleWidth / 10 - 1, vehicleHeight / 2 - 12); // Windows g.setColor(colorWindow); int xWindow = startPosX + 15; int yWindow = startPosY + 37; for (int i = 0; i < 2; i++) { g.drawRect(xWindow, yWindow, 15, 15); xWindow += 25; } xWindow += 35; for (int i = 0; i < 2; i++) { g.drawRect(xWindow, yWindow, 15, 15); xWindow += 25; } // Battery g.setColor(colorBody); int[] xbatteryPoints = {startPosX + vehicleWidth - 10, startPosX + vehicleWidth, startPosX + vehicleWidth, startPosX + vehicleWidth - 10}; int[] yBatteryPoints = { startPosY + vehicleHeight - 25, startPosY + vehicleHeight - 20, startPosY + vehicleHeight - 55, startPosY + vehicleHeight - 50 }; g.fillPolygon(xbatteryPoints, yBatteryPoints, xbatteryPoints.length); DrawningWheels.DrawWheels(); } }