PIbd-22-Stroev-V.M.-Monorai.../DrawningMonorail.java

184 lines
6.8 KiB
Java
Raw Permalink Normal View History

2023-11-22 14:51:08 +04:00
import java.awt.*;
import javax.swing.JPanel;
import java.util.Random;
public class DrawningMonorail extends JPanel {
private Entity entity;
private int pictureWidth;
private int pictureHeight;
private int _countWheels;
private int _startPosX;
private int _startPosY ;
private int relWidth = 150;
private final int relHeight = 46;
Random rd = new Random();
2023-12-06 10:09:34 +04:00
private DrawingWheels _drawingWheels;
2023-11-22 14:51:08 +04:00
public boolean init(int wheelCount ,int speed, double weight, Color bodyColor, Color additionalColor,
boolean monorails, boolean secondCabin, int width, int height) {
if (0 + relWidth >= width || 0 + relHeight >= height) {
return false;
}
_countWheels = wheelCount;
pictureWidth = width;
pictureHeight = height;
entity = new Entity();
entity.init(wheelCount, speed, weight, bodyColor, additionalColor, monorails, secondCabin);
2023-12-06 10:09:34 +04:00
_drawingWheels = new DrawingWheels(entity.getBodyColor(), _countWheels);
2023-11-22 14:51:08 +04:00
return true;
}
public void setPosition(int x, int y) {
_startPosX = x;
_startPosY = y;
}
public void moveTransport(Direction dr) {
if (entity == null) {
return;
}
switch (dr) {
case LEFT:
if (_startPosX - entity.getStep() > 0) {
_startPosX -= entity.getStep();
}
break;
case RIGHT:
if (_startPosX + entity.getStep() < pictureWidth - relWidth) {
_startPosX += entity.getStep();
}
break;
case UP:
if (_startPosY - entity.getStep() > 0) {
_startPosY -= entity.getStep();
}
break;
case DOWN:
if (_startPosY + entity.getStep() < pictureHeight - relHeight) {
_startPosY += entity.getStep();
}
break;
}
}
public void drawMonorail(Graphics g) {
if (entity == null) {
return;
}
relWidth = 150;
//Колёса
g.setColor(Color.BLACK);
g.drawRect(_startPosX + 22, _startPosY + 36, 40, 8);
g.drawRect(_startPosX+82, _startPosY + 36, 40, 8);
g.drawOval(_startPosX + 3, _startPosY + 37, 30, 8);
g.drawOval(_startPosX + 110, _startPosY + 37, 29, 8);
g.fillRect(_startPosX + 22, _startPosY + 36, 40, 8);
g.fillRect(_startPosX + 82, _startPosY + 36, 40, 8);
g.fillOval( _startPosX + 3, _startPosY + 37, 30, 8);
g.fillOval( _startPosX + 110, _startPosY + 37, 29, 8);
2023-12-06 10:09:34 +04:00
_drawingWheels.Draw(g, _startPosX, _startPosY);
2023-11-22 14:51:08 +04:00
//Кабина
g.setColor(entity.getBodyColor());
g.fillRect(_startPosX + 10, _startPosY + 20, 120, 16);
g.setColor(Color.BLACK);
g.drawRect(_startPosX + 10, _startPosY + 20, 120, 16);
int[] xp1 = new int[]{_startPosX+10,_startPosX+130,_startPosX+130,_startPosX+13};
int[] yp1 = new int[]{_startPosY + 20,_startPosY + 20,_startPosY + 5,_startPosY + 5};
Polygon pol1 = new Polygon(xp1, yp1, yp1.length);
g.setColor(entity.getBodyColor());
g.fillPolygon(pol1);
g.setColor(Color.BLACK);
g.drawPolygon(pol1);
//Дверь
g.setColor(Color.WHITE);
g.fillRect(_startPosX + 49, _startPosY + 9, 12, 22);
g.setColor(Color.BLACK);
g.drawRect(_startPosX + 49, _startPosY + 9, 12, 22);
//Окна и прочее
g.setColor(Color.CYAN);
g.drawRect(_startPosX + 20, _startPosY + 8, 10, 10);
g.drawRect(_startPosX + 35, _startPosY + 8, 10, 10);
g.drawRect(_startPosX + 117, _startPosY + 8, 10, 10);
g.setColor(Color.BLACK);
g.drawRect(_startPosX + 130, _startPosY + 10, 2, 22);
g.fillRect(_startPosX + 130, _startPosY + 10, 2, 22);
//Магнитная рельса
if(entity.getMonorails())
{
g.drawRect(_startPosX, _startPosY + 50, 140, 10);
g.fillRect(_startPosX, _startPosY + 50, 140, 10);
g.setColor(Color.WHITE);
g.fillRect(_startPosX + 5, _startPosY + 53, 130, 5);
}
if (entity.getSecondCabin())
{
relWidth = 290;
//низ
g.setColor(Color.BLACK);
g.drawRect(_startPosX + 162, _startPosY + 36, 40, 8);
g.drawRect(_startPosX + 222, _startPosY + 36, 40, 8);
g.drawOval(_startPosX + 143, _startPosY + 37, 30, 8);
g.drawOval(_startPosX + 250, _startPosY + 37, 29, 8);
g.setColor(Color.BLACK);
g.fillRect(_startPosX + 162, _startPosY + 36, 40, 8);
g.fillRect(_startPosX + 222, _startPosY + 36, 40, 8);
g.fillOval(_startPosX + 143, _startPosY + 37, 30, 8);
g.fillOval(_startPosX + 250, _startPosY + 37, 29, 8);
2023-12-06 10:09:34 +04:00
_drawingWheels.Draw(g, _startPosX + 140, _startPosY);
2023-11-22 14:51:08 +04:00
if (entity.getMonorails())
{
g.setColor(Color.BLACK);
g.drawRect(_startPosX + 140, _startPosY + 50, 145, 10);
g.fillRect(_startPosX + 140, _startPosY + 50, 145, 10);
g.setColor(Color.WHITE);
g.fillRect(_startPosX + 135, _startPosY + 53, 145, 5);
}
//Кабина
g.setColor(Color.BLACK);
g.drawRect(_startPosX + 150, _startPosY + 20, 120, 16);
g.fillRect(_startPosX + 150, _startPosY + 20, 120, 16);
int[] xp2 = new int[]{_startPosX + 150,_startPosX + 270,_startPosX + 267,_startPosX + 150};
int[] yp2 = new int[] {_startPosY + 20, _startPosY + 20, _startPosY + 5, _startPosY + 6};
Polygon pol2 = new Polygon(xp2, yp2, yp2.length);
g.setColor(entity.getAdditionalColor());
g.fillPolygon(pol2);
g.setColor(Color.BLACK);
g.drawPolygon(pol2);
//дверь
g.setColor(Color.WHITE);
g.fillRect(_startPosX + 189, _startPosY + 9, 12, 22);
g.setColor(Color.BLACK);
g.drawRect(_startPosX + 189, _startPosY + 9, 12, 22);
//Окна и прочее
g.setColor(Color.CYAN);
g.drawRect(_startPosX + 160, _startPosY + 8, 10, 10);
g.drawRect(_startPosX + 175, _startPosY + 8, 10, 10);
g.drawRect(_startPosX + 257, _startPosY + 8, 10, 10);
g.setColor(Color.BLACK);
g.drawRect(_startPosX + 270, _startPosY + 10, 2, 22);
g.fillRect(_startPosX + 270, _startPosY + 10, 2, 22);
}
}
}