184 lines
6.8 KiB
Java
184 lines
6.8 KiB
Java
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();
|
|
private DrawingWheels _drawingWheels;
|
|
|
|
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);
|
|
_drawingWheels = new DrawingWheels(entity.getBodyColor(), _countWheels);
|
|
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);
|
|
_drawingWheels.Draw(g, _startPosX, _startPosY);
|
|
|
|
//Кабина
|
|
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);
|
|
|
|
_drawingWheels.Draw(g, _startPosX + 140, _startPosY);
|
|
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);
|
|
}
|
|
}
|
|
} |