Готовая 2 лабораторная (Усложненная)
This commit is contained in:
parent
ed022a2dd6
commit
c84d016721
@ -1,230 +0,0 @@
|
|||||||
package projectMonorail;
|
|
||||||
|
|
||||||
import java.awt.*;
|
|
||||||
|
|
||||||
public class DrawingMonorail {
|
|
||||||
|
|
||||||
private EntityMonorail entityMonorail;
|
|
||||||
|
|
||||||
public EntityMonorail getEntityMonorail() {
|
|
||||||
return entityMonorail;
|
|
||||||
}
|
|
||||||
|
|
||||||
private DrawingWheels drawingWheels;
|
|
||||||
|
|
||||||
private int pictureWidth;
|
|
||||||
|
|
||||||
private int pictureHeight;
|
|
||||||
|
|
||||||
private int startPosX;
|
|
||||||
|
|
||||||
private int startPosY;
|
|
||||||
|
|
||||||
private int monorailWidth = 117;
|
|
||||||
|
|
||||||
private int monorailHeight = 56;
|
|
||||||
|
|
||||||
public boolean Init(int speed, double weight, Color mainColor, Color additionalColor, boolean magneticRail,
|
|
||||||
boolean extraCabin, int width, int height, int wheelNumber) {
|
|
||||||
if (extraCabin) {
|
|
||||||
monorailWidth = 183;
|
|
||||||
}
|
|
||||||
if (magneticRail) {
|
|
||||||
monorailWidth = 186;
|
|
||||||
monorailHeight = 92;
|
|
||||||
}
|
|
||||||
if (width < monorailWidth || height < monorailHeight) { return false; }
|
|
||||||
pictureWidth = width;
|
|
||||||
pictureHeight = height;
|
|
||||||
entityMonorail = new EntityMonorail();
|
|
||||||
entityMonorail.Init(speed, weight, mainColor, additionalColor,
|
|
||||||
magneticRail, extraCabin);
|
|
||||||
drawingWheels = new DrawingWheels();
|
|
||||||
drawingWheels.setWheelNumber(wheelNumber);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetPosition(int x, int y) {
|
|
||||||
if (x < 0 || x + monorailWidth > pictureWidth) { x = 0; }
|
|
||||||
if (y < 0 || y + monorailHeight > pictureHeight) { y = 0; }
|
|
||||||
|
|
||||||
startPosX = x;
|
|
||||||
startPosY = y;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void MoveTransport(DirectionType direction) {
|
|
||||||
if (entityMonorail == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (direction) {
|
|
||||||
//влево
|
|
||||||
case Left:
|
|
||||||
if (startPosX - entityMonorail.getStep() > 0)
|
|
||||||
{
|
|
||||||
startPosX -= (int)entityMonorail.getStep();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
//вверх
|
|
||||||
case Up:
|
|
||||||
if (startPosY - entityMonorail.getStep() > 0)
|
|
||||||
{
|
|
||||||
startPosY -= (int)entityMonorail.getStep();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
//вправо
|
|
||||||
case Right:
|
|
||||||
if (startPosX + monorailWidth + entityMonorail.getStep() < pictureWidth)
|
|
||||||
{
|
|
||||||
startPosX += (int)entityMonorail.getStep();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
//вниз
|
|
||||||
case Down:
|
|
||||||
if (startPosY + monorailHeight + entityMonorail.getStep() < pictureHeight)
|
|
||||||
{
|
|
||||||
startPosY += (int)entityMonorail.getStep();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void DrawTransport(Graphics2D g2d)
|
|
||||||
{
|
|
||||||
if (entityMonorail == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color mainColor = entityMonorail.getMainColor();
|
|
||||||
Color additionalColor = entityMonorail.getAdditionalColor();
|
|
||||||
BasicStroke standardWidth = new BasicStroke(1);
|
|
||||||
BasicStroke largerWidth = new BasicStroke(2);
|
|
||||||
|
|
||||||
//надстройка
|
|
||||||
g2d.setStroke(largerWidth);
|
|
||||||
g2d.setColor(mainColor);
|
|
||||||
g2d.fillRect( startPosX + 55, startPosY , 25, 15);
|
|
||||||
|
|
||||||
g2d.setColor(Color.BLACK);
|
|
||||||
g2d.drawRect(startPosX + 55, startPosY , 25, 15);
|
|
||||||
|
|
||||||
//корпус локомотива
|
|
||||||
Polygon locoPolygon = new Polygon();
|
|
||||||
locoPolygon.addPoint(startPosX + 29, startPosY + 15);
|
|
||||||
locoPolygon.addPoint(startPosX + 112, startPosY + 15);
|
|
||||||
locoPolygon.addPoint(startPosX + 112, startPosY + 46);
|
|
||||||
locoPolygon.addPoint(startPosX + 25, startPosY + 46);
|
|
||||||
locoPolygon.addPoint(startPosX + 25, startPosY + 31);
|
|
||||||
|
|
||||||
g2d.setColor(mainColor);
|
|
||||||
g2d.fillPolygon(locoPolygon);
|
|
||||||
|
|
||||||
g2d.setColor(Color.BLACK);
|
|
||||||
g2d.drawPolygon(locoPolygon);
|
|
||||||
|
|
||||||
g2d.setStroke(standardWidth);
|
|
||||||
g2d.setColor(Color.BLUE);
|
|
||||||
g2d.drawLine( startPosX + 25, startPosY + 31, startPosX + 112, startPosY + 31);
|
|
||||||
|
|
||||||
//дверь локомотива
|
|
||||||
g2d.setColor(Color.GRAY);
|
|
||||||
g2d.fillRect( startPosX + 54, startPosY + 21, 7, 20);
|
|
||||||
|
|
||||||
g2d.setStroke(largerWidth);
|
|
||||||
g2d.setColor(Color.BLACK);
|
|
||||||
g2d.drawRect(startPosX + 54, startPosY + 21, 7, 20);
|
|
||||||
|
|
||||||
//окна локомотива
|
|
||||||
g2d.setColor(Color.BLUE);
|
|
||||||
|
|
||||||
g2d.fillRect( startPosX + 32, startPosY + 18, 6, 9);
|
|
||||||
g2d.fillRect( startPosX + 44, startPosY + 18, 6, 9);
|
|
||||||
g2d.fillRect( startPosX + 103, startPosY + 18, 6, 9);
|
|
||||||
|
|
||||||
g2d.setColor(Color.BLACK);
|
|
||||||
|
|
||||||
g2d.drawRect( startPosX + 32, startPosY + 18, 6, 9);
|
|
||||||
g2d.drawRect( startPosX + 44, startPosY + 18, 6, 9);
|
|
||||||
g2d.drawRect( startPosX + 103, startPosY + 18, 6, 9);
|
|
||||||
|
|
||||||
//колеса и тележка локомотива
|
|
||||||
g2d.fillRect( startPosX + 23, startPosY + 47, 33, 6);
|
|
||||||
g2d.fillRect( startPosX + 76, startPosY + 47, 30, 6);
|
|
||||||
g2d.drawRect( startPosX + 23, startPosY + 47, 33, 6);
|
|
||||||
g2d.drawRect( startPosX + 76, startPosY + 47, 30, 6);
|
|
||||||
|
|
||||||
drawingWheels.drawWheels(g2d, Color.WHITE, startPosX, startPosY);
|
|
||||||
|
|
||||||
Polygon bogiePolygon = new Polygon();
|
|
||||||
bogiePolygon.addPoint(startPosX + 26, startPosY + 46);
|
|
||||||
bogiePolygon.addPoint(startPosX + 24, startPosY + 54);
|
|
||||||
bogiePolygon.addPoint(startPosX + 12, startPosY + 54);
|
|
||||||
bogiePolygon.addPoint(startPosX + 8, startPosY + 51);
|
|
||||||
bogiePolygon.addPoint(startPosX + 12, startPosY + 48);
|
|
||||||
bogiePolygon.addPoint(startPosX + 18, startPosY + 46);
|
|
||||||
|
|
||||||
g2d.fillPolygon(bogiePolygon);
|
|
||||||
|
|
||||||
//соединение между кабинами
|
|
||||||
g2d.drawRect( startPosX + 112, startPosY + 18, 5, 28);
|
|
||||||
g2d.fillRect( startPosX + 112, startPosY + 18, 5, 28);
|
|
||||||
|
|
||||||
//магнитная рельса
|
|
||||||
if (entityMonorail.getMagneticRail()) {
|
|
||||||
g2d.drawRect( startPosX + 2, startPosY + 58, 184, 18);
|
|
||||||
g2d.setColor(Color.GRAY);
|
|
||||||
g2d.fillRect( startPosX + 2, startPosY + 58, 184, 18);
|
|
||||||
for (int i = 0; i < 4; i++)
|
|
||||||
{
|
|
||||||
g2d.setColor(Color.BLACK);
|
|
||||||
g2d.drawRect( startPosX + 35 + 35 * i, startPosY + 77, 8, 15);
|
|
||||||
g2d.setColor(Color.GRAY);
|
|
||||||
g2d.fillRect( startPosX + 35 + 35 * i, startPosY + 77, 8, 15);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//дополнительная кабина
|
|
||||||
if (entityMonorail.getExtraCabin()) {
|
|
||||||
//корпус дополнительной кабины
|
|
||||||
g2d.setColor(mainColor);
|
|
||||||
g2d.fillRect( startPosX + 118, startPosY + 15, 65, 31);
|
|
||||||
g2d.setColor(Color.BLACK);
|
|
||||||
g2d.drawRect( startPosX + 118, startPosY + 15, 65, 31);
|
|
||||||
|
|
||||||
g2d.setStroke(standardWidth);
|
|
||||||
g2d.setColor(Color.BLUE);
|
|
||||||
g2d.drawLine( startPosX + 118, startPosY + 31, startPosX + 183, startPosY + 31);
|
|
||||||
|
|
||||||
//дверь дополнительной кабины
|
|
||||||
g2d.setColor(additionalColor);
|
|
||||||
g2d.fillRect( startPosX + 146, startPosY + 21, 7, 20);
|
|
||||||
|
|
||||||
g2d.setStroke(largerWidth);
|
|
||||||
g2d.setColor(Color.BLACK);
|
|
||||||
g2d.drawRect(startPosX + 146, startPosY + 21, 7, 20);
|
|
||||||
|
|
||||||
//окна дополнительной кабины
|
|
||||||
g2d.setColor(Color.BLUE);
|
|
||||||
g2d.fillRect( startPosX + 130, startPosY + 18, 6, 9);
|
|
||||||
g2d.fillRect( startPosX + 169, startPosY + 18, 6, 9);
|
|
||||||
|
|
||||||
g2d.setColor(Color.BLACK);
|
|
||||||
g2d.drawRect( startPosX + 130, startPosY + 18, 6, 9);
|
|
||||||
g2d.drawRect( startPosX + 169, startPosY + 18, 6, 9);
|
|
||||||
|
|
||||||
//колеса и тележка дополнительной кабины
|
|
||||||
g2d.fillRect( startPosX + 126, startPosY + 47, 15, 6);
|
|
||||||
g2d.fillRect( startPosX + 159, startPosY + 47, 15, 6);
|
|
||||||
g2d.drawRect( startPosX + 126, startPosY + 47, 15, 6);
|
|
||||||
g2d.drawRect( startPosX + 159, startPosY + 47, 15, 6);
|
|
||||||
|
|
||||||
g2d.setColor(Color.WHITE);
|
|
||||||
g2d.fillOval( startPosX + 128, startPosY + 47, 10, 9);
|
|
||||||
g2d.fillOval( startPosX + 161, startPosY + 47, 10, 9);
|
|
||||||
|
|
||||||
g2d.setColor(Color.BLACK);
|
|
||||||
g2d.drawOval( startPosX + 128, startPosY + 47, 10, 9);
|
|
||||||
g2d.drawOval( startPosX + 161, startPosY + 47, 10, 9);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
219
src/projectMonorail/DrawingObjects/DrawingLocomotive.java
Normal file
219
src/projectMonorail/DrawingObjects/DrawingLocomotive.java
Normal file
@ -0,0 +1,219 @@
|
|||||||
|
package projectMonorail.DrawingObjects;
|
||||||
|
|
||||||
|
import projectMonorail.DirectionType;
|
||||||
|
import projectMonorail.Entities.*;
|
||||||
|
import projectMonorail.Extras.*;
|
||||||
|
import projectMonorail.MovementStrategy.MoveToBorder;
|
||||||
|
import projectMonorail.MovementStrategy.MoveToCenter;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
public class DrawingLocomotive {
|
||||||
|
|
||||||
|
private EntityLocomotive entityLocomotive;
|
||||||
|
|
||||||
|
public EntityLocomotive getEntityLocomotive() {
|
||||||
|
return entityLocomotive;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setEntityLocomotive(EntityLocomotive entityLocomotive) {
|
||||||
|
this.entityLocomotive = entityLocomotive;
|
||||||
|
}
|
||||||
|
|
||||||
|
private IDrawingWheels drawingWheels;
|
||||||
|
|
||||||
|
private int pictureWidth;
|
||||||
|
|
||||||
|
private int pictureHeight;
|
||||||
|
|
||||||
|
protected int startPosX;
|
||||||
|
|
||||||
|
protected int startPosY;
|
||||||
|
|
||||||
|
protected int locomotiveWidth = 117;
|
||||||
|
|
||||||
|
protected int locomotiveHeight = 56;
|
||||||
|
|
||||||
|
public int getPosX() {
|
||||||
|
return startPosX;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getPosY() {
|
||||||
|
return startPosY;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getWidth() {
|
||||||
|
return locomotiveWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getHeight() {
|
||||||
|
return locomotiveHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DrawingLocomotive(int speed, double weight, Color mainColor, int width, int height, int wheelNumber) {
|
||||||
|
if (width < locomotiveWidth || height < locomotiveHeight) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
pictureWidth = width;
|
||||||
|
pictureHeight = height;
|
||||||
|
entityLocomotive = new EntityLocomotive(speed, weight, mainColor);
|
||||||
|
Random rand = new Random();
|
||||||
|
drawingWheels = switch (rand.nextInt(0, 3)) {
|
||||||
|
case 0 -> new DrawingNormalWheels();
|
||||||
|
case 1 -> new DrawingSquarePatternWheels();
|
||||||
|
case 2 -> new DrawingVintageWheels();
|
||||||
|
default -> new DrawingNormalWheels();
|
||||||
|
};
|
||||||
|
drawingWheels.setWheelNumber(wheelNumber);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected DrawingLocomotive(int speed, double weight, Color mainColor,
|
||||||
|
int width, int height, int locoWidth, int locoHeight, int wheelNumber) {
|
||||||
|
if (width < locoWidth || height < locoHeight) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
pictureWidth = width;
|
||||||
|
pictureHeight = height;
|
||||||
|
locomotiveWidth = locoWidth;
|
||||||
|
locomotiveHeight = locoHeight;
|
||||||
|
entityLocomotive = new EntityLocomotive(speed, weight, mainColor);
|
||||||
|
Random rand = new Random();
|
||||||
|
drawingWheels = switch (rand.nextInt(0, 3)) {
|
||||||
|
case 0 -> new DrawingNormalWheels();
|
||||||
|
case 1 -> new DrawingSquarePatternWheels();
|
||||||
|
case 2 -> new DrawingVintageWheels();
|
||||||
|
default -> new DrawingNormalWheels();
|
||||||
|
};
|
||||||
|
drawingWheels.setWheelNumber(wheelNumber);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPosition(int x, int y) {
|
||||||
|
if (x < 0 || x + locomotiveWidth > pictureWidth) {
|
||||||
|
x = 0;
|
||||||
|
}
|
||||||
|
if (y < 0 || y + locomotiveHeight > pictureHeight) {
|
||||||
|
y = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
startPosX = x;
|
||||||
|
startPosY = y;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean canMove(DirectionType direction) {
|
||||||
|
if (entityLocomotive == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return switch (direction) {
|
||||||
|
case Left -> startPosX - entityLocomotive.getStep() > 0;
|
||||||
|
case Up -> startPosY - entityLocomotive.getStep() > 0;
|
||||||
|
case Right -> startPosX + locomotiveWidth + entityLocomotive.getStep() < pictureWidth;
|
||||||
|
case Down -> startPosY + locomotiveHeight + entityLocomotive.getStep() < pictureHeight;
|
||||||
|
default -> false;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public void moveTransport(DirectionType direction) {
|
||||||
|
if (!canMove(direction) || entityLocomotive == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (direction) {
|
||||||
|
case Left:
|
||||||
|
startPosX -= (int) entityLocomotive.getStep();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Up:
|
||||||
|
startPosY -= (int) entityLocomotive.getStep();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Right:
|
||||||
|
startPosX += (int) entityLocomotive.getStep();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Down:
|
||||||
|
startPosY += (int) entityLocomotive.getStep();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void drawTransport(Graphics2D g2d) {
|
||||||
|
if (entityLocomotive == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Color mainColor = entityLocomotive.getMainColor();
|
||||||
|
BasicStroke standardWidth = new BasicStroke(1);
|
||||||
|
BasicStroke largerWidth = new BasicStroke(2);
|
||||||
|
|
||||||
|
//надстройка
|
||||||
|
g2d.setStroke(largerWidth);
|
||||||
|
g2d.setColor(mainColor);
|
||||||
|
g2d.fillRect(startPosX + 55, startPosY, 25, 15);
|
||||||
|
|
||||||
|
g2d.setColor(Color.BLACK);
|
||||||
|
g2d.drawRect(startPosX + 55, startPosY, 25, 15);
|
||||||
|
|
||||||
|
//корпус локомотива
|
||||||
|
Polygon locoPolygon = new Polygon();
|
||||||
|
locoPolygon.addPoint(startPosX + 29, startPosY + 15);
|
||||||
|
locoPolygon.addPoint(startPosX + 112, startPosY + 15);
|
||||||
|
locoPolygon.addPoint(startPosX + 112, startPosY + 46);
|
||||||
|
locoPolygon.addPoint(startPosX + 25, startPosY + 46);
|
||||||
|
locoPolygon.addPoint(startPosX + 25, startPosY + 31);
|
||||||
|
|
||||||
|
g2d.setColor(mainColor);
|
||||||
|
g2d.fillPolygon(locoPolygon);
|
||||||
|
|
||||||
|
g2d.setColor(Color.BLACK);
|
||||||
|
g2d.drawPolygon(locoPolygon);
|
||||||
|
|
||||||
|
g2d.setStroke(standardWidth);
|
||||||
|
g2d.setColor(Color.BLUE);
|
||||||
|
g2d.drawLine(startPosX + 25, startPosY + 31, startPosX + 112, startPosY + 31);
|
||||||
|
|
||||||
|
//дверь локомотива
|
||||||
|
g2d.setColor(Color.GRAY);
|
||||||
|
g2d.fillRect(startPosX + 54, startPosY + 21, 7, 20);
|
||||||
|
|
||||||
|
g2d.setStroke(largerWidth);
|
||||||
|
g2d.setColor(Color.BLACK);
|
||||||
|
g2d.drawRect(startPosX + 54, startPosY + 21, 7, 20);
|
||||||
|
|
||||||
|
//окна локомотива
|
||||||
|
g2d.setColor(Color.BLUE);
|
||||||
|
|
||||||
|
g2d.fillRect(startPosX + 32, startPosY + 18, 6, 9);
|
||||||
|
g2d.fillRect(startPosX + 44, startPosY + 18, 6, 9);
|
||||||
|
g2d.fillRect(startPosX + 103, startPosY + 18, 6, 9);
|
||||||
|
|
||||||
|
g2d.setColor(Color.BLACK);
|
||||||
|
|
||||||
|
g2d.drawRect(startPosX + 32, startPosY + 18, 6, 9);
|
||||||
|
g2d.drawRect(startPosX + 44, startPosY + 18, 6, 9);
|
||||||
|
g2d.drawRect(startPosX + 103, startPosY + 18, 6, 9);
|
||||||
|
|
||||||
|
//колеса и тележка локомотива
|
||||||
|
g2d.fillRect(startPosX + 23, startPosY + 47, 33, 6);
|
||||||
|
g2d.fillRect(startPosX + 76, startPosY + 47, 30, 6);
|
||||||
|
g2d.drawRect(startPosX + 23, startPosY + 47, 33, 6);
|
||||||
|
g2d.drawRect(startPosX + 76, startPosY + 47, 30, 6);
|
||||||
|
|
||||||
|
drawingWheels.drawWheels(g2d, Color.WHITE, startPosX, startPosY);
|
||||||
|
|
||||||
|
Polygon bogiePolygon = new Polygon();
|
||||||
|
bogiePolygon.addPoint(startPosX + 26, startPosY + 46);
|
||||||
|
bogiePolygon.addPoint(startPosX + 24, startPosY + 54);
|
||||||
|
bogiePolygon.addPoint(startPosX + 12, startPosY + 54);
|
||||||
|
bogiePolygon.addPoint(startPosX + 8, startPosY + 51);
|
||||||
|
bogiePolygon.addPoint(startPosX + 12, startPosY + 48);
|
||||||
|
bogiePolygon.addPoint(startPosX + 18, startPosY + 46);
|
||||||
|
|
||||||
|
g2d.fillPolygon(bogiePolygon);
|
||||||
|
|
||||||
|
//соединение между кабинами
|
||||||
|
g2d.drawRect(startPosX + 112, startPosY + 18, 5, 28);
|
||||||
|
g2d.fillRect(startPosX + 112, startPosY + 18, 5, 28);
|
||||||
|
}
|
||||||
|
}
|
99
src/projectMonorail/DrawingObjects/DrawingMonorail.java
Normal file
99
src/projectMonorail/DrawingObjects/DrawingMonorail.java
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
package projectMonorail.DrawingObjects;
|
||||||
|
|
||||||
|
import projectMonorail.Entities.*;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
|
||||||
|
public class DrawingMonorail extends DrawingLocomotive {
|
||||||
|
|
||||||
|
public DrawingMonorail(int speed, double weight, Color mainColor, Color additionalColor,
|
||||||
|
boolean magneticRail, boolean extraCabin, int width, int height, int wheelNumber) {
|
||||||
|
super(speed, weight, mainColor, width, height, 186, 92, wheelNumber);
|
||||||
|
|
||||||
|
if (!magneticRail && !extraCabin) {
|
||||||
|
locomotiveWidth = 117;
|
||||||
|
locomotiveHeight = 56;
|
||||||
|
}
|
||||||
|
if (!magneticRail && extraCabin) {
|
||||||
|
locomotiveWidth = 183;
|
||||||
|
locomotiveHeight = 56;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (getEntityLocomotive() != null) {
|
||||||
|
setEntityLocomotive(new EntityMonorail(speed, weight, mainColor,
|
||||||
|
additionalColor, magneticRail, extraCabin));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void drawTransport(Graphics2D g2d) {
|
||||||
|
if (!(getEntityLocomotive() instanceof EntityMonorail monorail)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
super.drawTransport(g2d);
|
||||||
|
|
||||||
|
Color mainColor = monorail.getMainColor();
|
||||||
|
Color additionalColor = monorail.getAdditionalColor();
|
||||||
|
BasicStroke standardWidth = new BasicStroke(1);
|
||||||
|
BasicStroke largerWidth = new BasicStroke(2);
|
||||||
|
|
||||||
|
//магнитная рельса
|
||||||
|
if (monorail.getMagneticRail()) {
|
||||||
|
g2d.drawRect(startPosX + 2, startPosY + 58, 184, 18);
|
||||||
|
g2d.setColor(Color.GRAY);
|
||||||
|
g2d.fillRect(startPosX + 2, startPosY + 58, 184, 18);
|
||||||
|
for (int i = 0; i < 4; i++) {
|
||||||
|
g2d.setColor(Color.BLACK);
|
||||||
|
g2d.drawRect(startPosX + 35 + 35 * i, startPosY + 77, 8, 15);
|
||||||
|
g2d.setColor(Color.GRAY);
|
||||||
|
g2d.fillRect(startPosX + 35 + 35 * i, startPosY + 77, 8, 15);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//дополнительная кабина
|
||||||
|
if (monorail.getExtraCabin()) {
|
||||||
|
//корпус дополнительной кабины
|
||||||
|
g2d.setColor(mainColor);
|
||||||
|
g2d.fillRect(startPosX + 118, startPosY + 15, 65, 31);
|
||||||
|
g2d.setColor(Color.BLACK);
|
||||||
|
g2d.drawRect(startPosX + 118, startPosY + 15, 65, 31);
|
||||||
|
|
||||||
|
g2d.setStroke(standardWidth);
|
||||||
|
g2d.setColor(Color.BLUE);
|
||||||
|
g2d.drawLine(startPosX + 118, startPosY + 31, startPosX + 183, startPosY + 31);
|
||||||
|
|
||||||
|
//дверь дополнительной кабины
|
||||||
|
g2d.setColor(additionalColor);
|
||||||
|
g2d.fillRect(startPosX + 146, startPosY + 21, 7, 20);
|
||||||
|
|
||||||
|
g2d.setStroke(largerWidth);
|
||||||
|
g2d.setColor(Color.BLACK);
|
||||||
|
g2d.drawRect(startPosX + 146, startPosY + 21, 7, 20);
|
||||||
|
|
||||||
|
//окна дополнительной кабины
|
||||||
|
g2d.setColor(Color.BLUE);
|
||||||
|
g2d.fillRect(startPosX + 130, startPosY + 18, 6, 9);
|
||||||
|
g2d.fillRect(startPosX + 169, startPosY + 18, 6, 9);
|
||||||
|
|
||||||
|
g2d.setColor(Color.BLACK);
|
||||||
|
g2d.drawRect(startPosX + 130, startPosY + 18, 6, 9);
|
||||||
|
g2d.drawRect(startPosX + 169, startPosY + 18, 6, 9);
|
||||||
|
|
||||||
|
//колеса и тележка дополнительной кабины
|
||||||
|
g2d.fillRect(startPosX + 126, startPosY + 47, 15, 6);
|
||||||
|
g2d.fillRect(startPosX + 159, startPosY + 47, 15, 6);
|
||||||
|
g2d.drawRect(startPosX + 126, startPosY + 47, 15, 6);
|
||||||
|
g2d.drawRect(startPosX + 159, startPosY + 47, 15, 6);
|
||||||
|
|
||||||
|
g2d.setColor(Color.WHITE);
|
||||||
|
g2d.fillOval(startPosX + 128, startPosY + 47, 10, 9);
|
||||||
|
g2d.fillOval(startPosX + 161, startPosY + 47, 10, 9);
|
||||||
|
|
||||||
|
g2d.setColor(Color.BLACK);
|
||||||
|
g2d.drawOval(startPosX + 128, startPosY + 47, 10, 9);
|
||||||
|
g2d.drawOval(startPosX + 161, startPosY + 47, 10, 9);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,97 +0,0 @@
|
|||||||
package projectMonorail;
|
|
||||||
|
|
||||||
import java.awt.*;
|
|
||||||
|
|
||||||
public class DrawingWheels {
|
|
||||||
|
|
||||||
private WheelNumber wheelNumber;
|
|
||||||
|
|
||||||
public void setWheelNumber(int number) {
|
|
||||||
switch (number) {
|
|
||||||
case 2:
|
|
||||||
wheelNumber = wheelNumber.Two;
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
wheelNumber = wheelNumber.Three;
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
wheelNumber = wheelNumber.Four;
|
|
||||||
break;
|
|
||||||
default: wheelNumber = wheelNumber.Two;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void drawWheels(Graphics2D g2d, Color color, int startPosX, int startPosY) {
|
|
||||||
switch (wheelNumber) {
|
|
||||||
case Two:
|
|
||||||
drawTwoWheels(g2d, color, startPosX, startPosY);
|
|
||||||
break;
|
|
||||||
case Three:
|
|
||||||
drawThreeWheels(g2d, color, startPosX, startPosY);
|
|
||||||
break;
|
|
||||||
case Four:
|
|
||||||
drawFourWheels(g2d, color, startPosX, startPosY);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void drawTwoWheels(Graphics2D g2d, Color color, int startPosX, int startPosY) {
|
|
||||||
g2d.setColor(color);
|
|
||||||
|
|
||||||
g2d.fillOval( startPosX + 25, startPosY + 47, 10, 9);
|
|
||||||
g2d.fillOval( startPosX + 45, startPosY + 47, 10, 9);
|
|
||||||
g2d.fillOval( startPosX + 75, startPosY + 47, 10, 9);
|
|
||||||
g2d.fillOval( startPosX + 95, startPosY + 47, 10, 9);
|
|
||||||
|
|
||||||
g2d.setColor(Color.BLACK);
|
|
||||||
|
|
||||||
g2d.drawOval( startPosX + 25, startPosY + 47, 10, 9);
|
|
||||||
g2d.drawOval( startPosX + 45, startPosY + 47, 10, 9);
|
|
||||||
g2d.drawOval( startPosX + 75, startPosY + 47, 10, 9);
|
|
||||||
g2d.drawOval( startPosX + 95, startPosY + 47, 10, 9);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void drawThreeWheels(Graphics2D g2d, Color color, int startPosX, int startPosY) {
|
|
||||||
g2d.setColor(color);
|
|
||||||
|
|
||||||
g2d.fillOval( startPosX + 25, startPosY + 47, 8, 9);
|
|
||||||
g2d.fillOval( startPosX + 36, startPosY + 47, 8, 9);
|
|
||||||
g2d.fillOval( startPosX + 47, startPosY + 47, 8, 9);
|
|
||||||
g2d.fillOval( startPosX + 76, startPosY + 47, 8, 9);
|
|
||||||
g2d.fillOval( startPosX + 87, startPosY + 47, 8, 9);
|
|
||||||
g2d.fillOval( startPosX + 98, startPosY + 47, 8, 9);
|
|
||||||
|
|
||||||
g2d.setColor(Color.BLACK);
|
|
||||||
|
|
||||||
g2d.drawOval( startPosX + 25, startPosY + 47, 8, 9);
|
|
||||||
g2d.drawOval( startPosX + 36, startPosY + 47, 8, 9);
|
|
||||||
g2d.drawOval( startPosX + 47, startPosY + 47, 8, 9);
|
|
||||||
g2d.drawOval( startPosX + 76, startPosY + 47, 8, 9);
|
|
||||||
g2d.drawOval( startPosX + 87, startPosY + 47, 8, 9);
|
|
||||||
g2d.drawOval( startPosX + 98, startPosY + 47, 8, 9);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void drawFourWheels(Graphics2D g2d, Color color, int startPosX, int startPosY) {
|
|
||||||
g2d.setColor(color);
|
|
||||||
|
|
||||||
g2d.fillOval( startPosX + 25, startPosY + 47, 6, 9);
|
|
||||||
g2d.fillOval( startPosX + 33, startPosY + 47, 6, 9);
|
|
||||||
g2d.fillOval( startPosX + 41, startPosY + 47, 6, 9);
|
|
||||||
g2d.fillOval( startPosX + 49, startPosY + 47, 6, 9);
|
|
||||||
g2d.fillOval( startPosX + 75, startPosY + 47, 6, 9);
|
|
||||||
g2d.fillOval( startPosX + 83, startPosY + 47, 6, 9);
|
|
||||||
g2d.fillOval( startPosX + 91, startPosY + 47, 6, 9);
|
|
||||||
g2d.fillOval( startPosX + 99, startPosY + 47, 6, 9);
|
|
||||||
|
|
||||||
g2d.setColor(Color.BLACK);
|
|
||||||
|
|
||||||
g2d.drawOval( startPosX + 25, startPosY + 47, 6, 9);
|
|
||||||
g2d.drawOval( startPosX + 33, startPosY + 47, 6, 9);
|
|
||||||
g2d.drawOval( startPosX + 41, startPosY + 47, 6, 9);
|
|
||||||
g2d.drawOval( startPosX + 49, startPosY + 47, 6, 9);
|
|
||||||
g2d.drawOval( startPosX + 76, startPosY + 47, 6, 9);
|
|
||||||
g2d.drawOval( startPosX + 84, startPosY + 47, 6, 9);
|
|
||||||
g2d.drawOval( startPosX + 92, startPosY + 47, 6, 9);
|
|
||||||
g2d.drawOval( startPosX + 100, startPosY + 47, 6, 9);
|
|
||||||
}
|
|
||||||
}
|
|
34
src/projectMonorail/Entities/EntityLocomotive.java
Normal file
34
src/projectMonorail/Entities/EntityLocomotive.java
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
package projectMonorail.Entities;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
|
||||||
|
public class EntityLocomotive {
|
||||||
|
|
||||||
|
private int speed;
|
||||||
|
|
||||||
|
public int getSpeed() {
|
||||||
|
return speed;
|
||||||
|
}
|
||||||
|
|
||||||
|
private double weight;
|
||||||
|
|
||||||
|
public double getWeight() {
|
||||||
|
return weight;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Color mainColor;
|
||||||
|
|
||||||
|
public Color getMainColor() {
|
||||||
|
return mainColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getStep() {
|
||||||
|
return (double) speed * 100 / weight;
|
||||||
|
}
|
||||||
|
|
||||||
|
public EntityLocomotive(int speed, double weight, Color mainColor) {
|
||||||
|
this.speed = speed;
|
||||||
|
this.weight = weight;
|
||||||
|
this.mainColor = mainColor;
|
||||||
|
}
|
||||||
|
}
|
32
src/projectMonorail/Entities/EntityMonorail.java
Normal file
32
src/projectMonorail/Entities/EntityMonorail.java
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
package projectMonorail.Entities;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
|
||||||
|
public class EntityMonorail extends EntityLocomotive {
|
||||||
|
|
||||||
|
private Color additionalColor;
|
||||||
|
|
||||||
|
public Color getAdditionalColor() {
|
||||||
|
return additionalColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean magneticRail;
|
||||||
|
|
||||||
|
public boolean getMagneticRail() {
|
||||||
|
return magneticRail;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean extraCabin;
|
||||||
|
|
||||||
|
public boolean getExtraCabin() {
|
||||||
|
return extraCabin;
|
||||||
|
}
|
||||||
|
|
||||||
|
public EntityMonorail(int speed, double weight, Color mainColor, Color
|
||||||
|
additionalColor, boolean magneticRail, boolean extraCabin) {
|
||||||
|
super(speed, weight, mainColor);
|
||||||
|
this.additionalColor = additionalColor;
|
||||||
|
this.magneticRail = magneticRail;
|
||||||
|
this.extraCabin = extraCabin;
|
||||||
|
}
|
||||||
|
}
|
@ -1,55 +0,0 @@
|
|||||||
package projectMonorail;
|
|
||||||
|
|
||||||
import java.awt.*;
|
|
||||||
|
|
||||||
public class EntityMonorail {
|
|
||||||
|
|
||||||
private int speed;
|
|
||||||
|
|
||||||
public int getSpeed() {
|
|
||||||
return speed;
|
|
||||||
}
|
|
||||||
|
|
||||||
private double weight;
|
|
||||||
|
|
||||||
public double getWeight() {
|
|
||||||
return weight;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Color mainColor;
|
|
||||||
|
|
||||||
public Color getMainColor() {
|
|
||||||
return mainColor;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Color additionalColor;
|
|
||||||
|
|
||||||
public Color getAdditionalColor() {
|
|
||||||
return additionalColor;
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean magneticRail;
|
|
||||||
|
|
||||||
public boolean getMagneticRail() {
|
|
||||||
return magneticRail;
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean extraCabin;
|
|
||||||
|
|
||||||
public boolean getExtraCabin() {
|
|
||||||
return extraCabin;
|
|
||||||
}
|
|
||||||
|
|
||||||
public double getStep() {
|
|
||||||
return (double)speed * 100 / weight;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Init(int speed, double weight, Color mainColor , Color additionalColor , boolean magneticRail, boolean extraCabin) {
|
|
||||||
this.speed = speed;
|
|
||||||
this.weight = weight;
|
|
||||||
this.mainColor = mainColor;
|
|
||||||
this.additionalColor = additionalColor;
|
|
||||||
this.magneticRail = magneticRail;
|
|
||||||
this.extraCabin = extraCabin;
|
|
||||||
}
|
|
||||||
}
|
|
105
src/projectMonorail/Extras/DrawingNormalWheels.java
Normal file
105
src/projectMonorail/Extras/DrawingNormalWheels.java
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
package projectMonorail.Extras;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
|
||||||
|
public class DrawingNormalWheels implements IDrawingWheels {
|
||||||
|
|
||||||
|
private WheelNumber wheelNumber;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WheelNumber getWheelNumber() {
|
||||||
|
return wheelNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setWheelNumber(int number) {
|
||||||
|
switch (number) {
|
||||||
|
case 2:
|
||||||
|
wheelNumber = wheelNumber.Two;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
wheelNumber = wheelNumber.Three;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
wheelNumber = wheelNumber.Four;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
wheelNumber = wheelNumber.Two;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void drawWheels(Graphics2D g2d, Color color, int startPosX, int startPosY) {
|
||||||
|
switch (wheelNumber) {
|
||||||
|
case Two:
|
||||||
|
drawTwoWheels(g2d, color, startPosX, startPosY);
|
||||||
|
break;
|
||||||
|
case Three:
|
||||||
|
drawThreeWheels(g2d, color, startPosX, startPosY);
|
||||||
|
break;
|
||||||
|
case Four:
|
||||||
|
drawFourWheels(g2d, color, startPosX, startPosY);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void drawTwoWheels(Graphics2D g2d, Color color, int startPosX, int startPosY) {
|
||||||
|
g2d.setColor(color);
|
||||||
|
|
||||||
|
g2d.fillOval(startPosX + 25, startPosY + 47, 10, 9);
|
||||||
|
g2d.fillOval(startPosX + 45, startPosY + 47, 10, 9);
|
||||||
|
g2d.fillOval(startPosX + 75, startPosY + 47, 10, 9);
|
||||||
|
g2d.fillOval(startPosX + 95, startPosY + 47, 10, 9);
|
||||||
|
|
||||||
|
g2d.setColor(Color.BLACK);
|
||||||
|
|
||||||
|
g2d.drawOval(startPosX + 25, startPosY + 47, 10, 9);
|
||||||
|
g2d.drawOval(startPosX + 45, startPosY + 47, 10, 9);
|
||||||
|
g2d.drawOval(startPosX + 75, startPosY + 47, 10, 9);
|
||||||
|
g2d.drawOval(startPosX + 95, startPosY + 47, 10, 9);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void drawThreeWheels(Graphics2D g2d, Color color, int startPosX, int startPosY) {
|
||||||
|
g2d.setColor(color);
|
||||||
|
|
||||||
|
g2d.fillOval(startPosX + 25, startPosY + 47, 8, 9);
|
||||||
|
g2d.fillOval(startPosX + 36, startPosY + 47, 8, 9);
|
||||||
|
g2d.fillOval(startPosX + 47, startPosY + 47, 8, 9);
|
||||||
|
g2d.fillOval(startPosX + 76, startPosY + 47, 8, 9);
|
||||||
|
g2d.fillOval(startPosX + 87, startPosY + 47, 8, 9);
|
||||||
|
g2d.fillOval(startPosX + 98, startPosY + 47, 8, 9);
|
||||||
|
|
||||||
|
g2d.setColor(Color.BLACK);
|
||||||
|
|
||||||
|
g2d.drawOval(startPosX + 25, startPosY + 47, 8, 9);
|
||||||
|
g2d.drawOval(startPosX + 36, startPosY + 47, 8, 9);
|
||||||
|
g2d.drawOval(startPosX + 47, startPosY + 47, 8, 9);
|
||||||
|
g2d.drawOval(startPosX + 76, startPosY + 47, 8, 9);
|
||||||
|
g2d.drawOval(startPosX + 87, startPosY + 47, 8, 9);
|
||||||
|
g2d.drawOval(startPosX + 98, startPosY + 47, 8, 9);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void drawFourWheels(Graphics2D g2d, Color color, int startPosX, int startPosY) {
|
||||||
|
g2d.setColor(color);
|
||||||
|
|
||||||
|
g2d.fillOval(startPosX + 25, startPosY + 47, 6, 9);
|
||||||
|
g2d.fillOval(startPosX + 33, startPosY + 47, 6, 9);
|
||||||
|
g2d.fillOval(startPosX + 41, startPosY + 47, 6, 9);
|
||||||
|
g2d.fillOval(startPosX + 49, startPosY + 47, 6, 9);
|
||||||
|
g2d.fillOval(startPosX + 75, startPosY + 47, 6, 9);
|
||||||
|
g2d.fillOval(startPosX + 83, startPosY + 47, 6, 9);
|
||||||
|
g2d.fillOval(startPosX + 91, startPosY + 47, 6, 9);
|
||||||
|
g2d.fillOval(startPosX + 99, startPosY + 47, 6, 9);
|
||||||
|
|
||||||
|
g2d.setColor(Color.BLACK);
|
||||||
|
|
||||||
|
g2d.drawOval(startPosX + 25, startPosY + 47, 6, 9);
|
||||||
|
g2d.drawOval(startPosX + 33, startPosY + 47, 6, 9);
|
||||||
|
g2d.drawOval(startPosX + 41, startPosY + 47, 6, 9);
|
||||||
|
g2d.drawOval(startPosX + 49, startPosY + 47, 6, 9);
|
||||||
|
g2d.drawOval(startPosX + 76, startPosY + 47, 6, 9);
|
||||||
|
g2d.drawOval(startPosX + 84, startPosY + 47, 6, 9);
|
||||||
|
g2d.drawOval(startPosX + 92, startPosY + 47, 6, 9);
|
||||||
|
g2d.drawOval(startPosX + 100, startPosY + 47, 6, 9);
|
||||||
|
}
|
||||||
|
}
|
114
src/projectMonorail/Extras/DrawingSquarePatternWheels.java
Normal file
114
src/projectMonorail/Extras/DrawingSquarePatternWheels.java
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
package projectMonorail.Extras;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
|
||||||
|
public class DrawingSquarePatternWheels implements IDrawingWheels {
|
||||||
|
|
||||||
|
private WheelNumber wheelNumber;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WheelNumber getWheelNumber() {
|
||||||
|
return wheelNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setWheelNumber(int number) {
|
||||||
|
switch (number) {
|
||||||
|
case 2:
|
||||||
|
wheelNumber = wheelNumber.Two;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
wheelNumber = wheelNumber.Three;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
wheelNumber = wheelNumber.Four;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
wheelNumber = wheelNumber.Two;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void drawWheels(Graphics2D g2d, Color color, int startPosX, int startPosY) {
|
||||||
|
switch (wheelNumber) {
|
||||||
|
case Two:
|
||||||
|
drawTwoWheels(g2d, color, startPosX, startPosY);
|
||||||
|
break;
|
||||||
|
case Three:
|
||||||
|
drawThreeWheels(g2d, color, startPosX, startPosY);
|
||||||
|
break;
|
||||||
|
case Four:
|
||||||
|
drawFourWheels(g2d, color, startPosX, startPosY);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void drawTwoWheels(Graphics2D g2d, Color color, int startPosX, int startPosY) {
|
||||||
|
g2d.setColor(color);
|
||||||
|
|
||||||
|
g2d.fillOval(startPosX + 25, startPosY + 47, 10, 9);
|
||||||
|
g2d.fillOval(startPosX + 45, startPosY + 47, 10, 9);
|
||||||
|
g2d.fillOval(startPosX + 75, startPosY + 47, 10, 9);
|
||||||
|
g2d.fillOval(startPosX + 95, startPosY + 47, 10, 9);
|
||||||
|
|
||||||
|
g2d.setColor(Color.BLACK);
|
||||||
|
|
||||||
|
drawWheel(g2d, startPosX, startPosY, 25, 47, 10, 9);
|
||||||
|
drawWheel(g2d, startPosX, startPosY, 45, 47, 10, 9);
|
||||||
|
drawWheel(g2d, startPosX, startPosY, 75, 47, 10, 9);
|
||||||
|
drawWheel(g2d, startPosX, startPosY, 95, 47, 10, 9);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void drawThreeWheels(Graphics2D g2d, Color color, int startPosX, int startPosY) {
|
||||||
|
g2d.setColor(color);
|
||||||
|
|
||||||
|
g2d.fillOval(startPosX + 25, startPosY + 47, 8, 9);
|
||||||
|
g2d.fillOval(startPosX + 36, startPosY + 47, 8, 9);
|
||||||
|
g2d.fillOval(startPosX + 47, startPosY + 47, 8, 9);
|
||||||
|
g2d.fillOval(startPosX + 76, startPosY + 47, 8, 9);
|
||||||
|
g2d.fillOval(startPosX + 87, startPosY + 47, 8, 9);
|
||||||
|
g2d.fillOval(startPosX + 98, startPosY + 47, 8, 9);
|
||||||
|
|
||||||
|
g2d.setColor(Color.BLACK);
|
||||||
|
|
||||||
|
drawWheel(g2d, startPosX, startPosY, 25, 47, 8, 9);
|
||||||
|
drawWheel(g2d, startPosX, startPosY, 36, 47, 8, 9);
|
||||||
|
drawWheel(g2d, startPosX, startPosY, 47, 47, 8, 9);
|
||||||
|
drawWheel(g2d, startPosX, startPosY, 76, 47, 8, 9);
|
||||||
|
drawWheel(g2d, startPosX, startPosY, 87, 47, 8, 9);
|
||||||
|
drawWheel(g2d, startPosX, startPosY, 98, 47, 8, 9);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void drawFourWheels(Graphics2D g2d, Color color, int startPosX, int startPosY) {
|
||||||
|
g2d.setColor(color);
|
||||||
|
|
||||||
|
g2d.fillOval(startPosX + 25, startPosY + 47, 6, 9);
|
||||||
|
g2d.fillOval(startPosX + 33, startPosY + 47, 6, 9);
|
||||||
|
g2d.fillOval(startPosX + 41, startPosY + 47, 6, 9);
|
||||||
|
g2d.fillOval(startPosX + 49, startPosY + 47, 6, 9);
|
||||||
|
g2d.fillOval(startPosX + 75, startPosY + 47, 6, 9);
|
||||||
|
g2d.fillOval(startPosX + 83, startPosY + 47, 6, 9);
|
||||||
|
g2d.fillOval(startPosX + 91, startPosY + 47, 6, 9);
|
||||||
|
g2d.fillOval(startPosX + 99, startPosY + 47, 6, 9);
|
||||||
|
|
||||||
|
g2d.setColor(Color.BLACK);
|
||||||
|
|
||||||
|
drawWheel(g2d, startPosX, startPosY, 25, 47, 6, 9);
|
||||||
|
drawWheel(g2d, startPosX, startPosY, 33, 47, 6, 9);
|
||||||
|
drawWheel(g2d, startPosX, startPosY, 41, 47, 6, 9);
|
||||||
|
drawWheel(g2d, startPosX, startPosY, 49, 47, 6, 9);
|
||||||
|
drawWheel(g2d, startPosX, startPosY, 75, 47, 6, 9);
|
||||||
|
drawWheel(g2d, startPosX, startPosY, 83, 47, 6, 9);
|
||||||
|
drawWheel(g2d, startPosX, startPosY, 91, 47, 6, 9);
|
||||||
|
drawWheel(g2d, startPosX, startPosY, 99, 47, 6, 9);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void drawWheel(Graphics2D g2d, int startPosX, int startPosY, int xChange, int yChange, int width, int height) {
|
||||||
|
g2d.drawOval(startPosX + xChange, startPosY + yChange, width, height);
|
||||||
|
|
||||||
|
g2d.setColor(Color.RED);
|
||||||
|
g2d.fillRect((int)(startPosX + xChange + width * 0.335), startPosY + yChange + height/3, width/2, height/2);
|
||||||
|
|
||||||
|
g2d.setColor(Color.BLACK);
|
||||||
|
}
|
||||||
|
}
|
117
src/projectMonorail/Extras/DrawingVintageWheels.java
Normal file
117
src/projectMonorail/Extras/DrawingVintageWheels.java
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
package projectMonorail.Extras;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
|
||||||
|
public class DrawingVintageWheels implements IDrawingWheels {
|
||||||
|
|
||||||
|
private WheelNumber wheelNumber;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WheelNumber getWheelNumber() {
|
||||||
|
return wheelNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setWheelNumber(int number) {
|
||||||
|
switch (number) {
|
||||||
|
case 2:
|
||||||
|
wheelNumber = wheelNumber.Two;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
wheelNumber = wheelNumber.Three;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
wheelNumber = wheelNumber.Four;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
wheelNumber = wheelNumber.Two;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void drawWheels(Graphics2D g2d, Color color, int startPosX, int startPosY) {
|
||||||
|
switch (wheelNumber) {
|
||||||
|
case Two:
|
||||||
|
drawTwoWheels(g2d, color, startPosX, startPosY);
|
||||||
|
break;
|
||||||
|
case Three:
|
||||||
|
drawThreeWheels(g2d, color, startPosX, startPosY);
|
||||||
|
break;
|
||||||
|
case Four:
|
||||||
|
drawFourWheels(g2d, color, startPosX, startPosY);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void drawTwoWheels(Graphics2D g2d, Color color, int startPosX, int startPosY) {
|
||||||
|
g2d.setColor(color);
|
||||||
|
|
||||||
|
g2d.fillOval(startPosX + 25, startPosY + 47, 10, 9);
|
||||||
|
g2d.fillOval(startPosX + 45, startPosY + 47, 10, 9);
|
||||||
|
g2d.fillOval(startPosX + 75, startPosY + 47, 10, 9);
|
||||||
|
g2d.fillOval(startPosX + 95, startPosY + 47, 10, 9);
|
||||||
|
|
||||||
|
g2d.setColor(Color.BLACK);
|
||||||
|
|
||||||
|
drawWheel(g2d, startPosX, startPosY, 25, 47, 10, 9);
|
||||||
|
drawWheel(g2d, startPosX, startPosY, 45, 47, 10, 9);
|
||||||
|
drawWheel(g2d, startPosX, startPosY, 75, 47, 10, 9);
|
||||||
|
drawWheel(g2d, startPosX, startPosY, 95, 47, 10, 9);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void drawThreeWheels(Graphics2D g2d, Color color, int startPosX, int startPosY) {
|
||||||
|
g2d.setColor(color);
|
||||||
|
|
||||||
|
g2d.fillOval(startPosX + 25, startPosY + 47, 8, 9);
|
||||||
|
g2d.fillOval(startPosX + 36, startPosY + 47, 8, 9);
|
||||||
|
g2d.fillOval(startPosX + 47, startPosY + 47, 8, 9);
|
||||||
|
g2d.fillOval(startPosX + 76, startPosY + 47, 8, 9);
|
||||||
|
g2d.fillOval(startPosX + 87, startPosY + 47, 8, 9);
|
||||||
|
g2d.fillOval(startPosX + 98, startPosY + 47, 8, 9);
|
||||||
|
|
||||||
|
g2d.setColor(Color.BLACK);
|
||||||
|
|
||||||
|
drawWheel(g2d, startPosX, startPosY, 25, 47, 8, 9);
|
||||||
|
drawWheel(g2d, startPosX, startPosY, 36, 47, 8, 9);
|
||||||
|
drawWheel(g2d, startPosX, startPosY, 47, 47, 8, 9);
|
||||||
|
drawWheel(g2d, startPosX, startPosY, 76, 47, 8, 9);
|
||||||
|
drawWheel(g2d, startPosX, startPosY, 87, 47, 8, 9);
|
||||||
|
drawWheel(g2d, startPosX, startPosY, 98, 47, 8, 9);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void drawFourWheels(Graphics2D g2d, Color color, int startPosX, int startPosY) {
|
||||||
|
g2d.setColor(color);
|
||||||
|
|
||||||
|
g2d.fillOval(startPosX + 25, startPosY + 47, 6, 9);
|
||||||
|
g2d.fillOval(startPosX + 33, startPosY + 47, 6, 9);
|
||||||
|
g2d.fillOval(startPosX + 41, startPosY + 47, 6, 9);
|
||||||
|
g2d.fillOval(startPosX + 49, startPosY + 47, 6, 9);
|
||||||
|
g2d.fillOval(startPosX + 75, startPosY + 47, 6, 9);
|
||||||
|
g2d.fillOval(startPosX + 83, startPosY + 47, 6, 9);
|
||||||
|
g2d.fillOval(startPosX + 91, startPosY + 47, 6, 9);
|
||||||
|
g2d.fillOval(startPosX + 99, startPosY + 47, 6, 9);
|
||||||
|
|
||||||
|
g2d.setColor(Color.BLACK);
|
||||||
|
|
||||||
|
drawWheel(g2d, startPosX, startPosY, 25, 47, 6, 9);
|
||||||
|
drawWheel(g2d, startPosX, startPosY, 33, 47, 6, 9);
|
||||||
|
drawWheel(g2d, startPosX, startPosY, 41, 47, 6, 9);
|
||||||
|
drawWheel(g2d, startPosX, startPosY, 49, 47, 6, 9);
|
||||||
|
drawWheel(g2d, startPosX, startPosY, 75, 47, 6, 9);
|
||||||
|
drawWheel(g2d, startPosX, startPosY, 83, 47, 6, 9);
|
||||||
|
drawWheel(g2d, startPosX, startPosY, 91, 47, 6, 9);
|
||||||
|
drawWheel(g2d, startPosX, startPosY, 99, 47, 6, 9);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void drawWheel(Graphics2D g2d, int startPosX, int startPosY, int xChange, int yChange, int width, int height) {
|
||||||
|
g2d.setStroke(new BasicStroke(1));
|
||||||
|
g2d.drawOval(startPosX + xChange, startPosY + yChange, width, height);
|
||||||
|
|
||||||
|
g2d.drawLine(startPosX + xChange + width/2, startPosY + yChange, startPosX + xChange + width/2, startPosY + yChange + height);
|
||||||
|
g2d.drawLine(startPosX + xChange, startPosY + yChange + height/2, startPosX + xChange + width, startPosY + yChange + height/2);
|
||||||
|
g2d.drawLine(startPosX + xChange + width/8, startPosY + yChange + height/8,
|
||||||
|
startPosX + xChange + width * 7/8, startPosY + yChange + height * 7/8);
|
||||||
|
g2d.drawLine(startPosX + xChange + width * 7/8, startPosY + yChange + height/8,
|
||||||
|
startPosX + xChange + width/8, startPosY + yChange + height * 7/8);
|
||||||
|
}
|
||||||
|
}
|
11
src/projectMonorail/Extras/IDrawingWheels.java
Normal file
11
src/projectMonorail/Extras/IDrawingWheels.java
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
package projectMonorail.Extras;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
|
||||||
|
public interface IDrawingWheels {
|
||||||
|
void setWheelNumber(int number);
|
||||||
|
|
||||||
|
WheelNumber getWheelNumber();
|
||||||
|
|
||||||
|
void drawWheels(Graphics2D g2d, Color color, int startPosX, int startPosY);
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package projectMonorail;
|
package projectMonorail.Extras;
|
||||||
|
|
||||||
public enum WheelNumber {
|
public enum WheelNumber {
|
||||||
Two,
|
Two,
|
99
src/projectMonorail/MovementStrategy/AbstractStrategy.java
Normal file
99
src/projectMonorail/MovementStrategy/AbstractStrategy.java
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
package projectMonorail.MovementStrategy;
|
||||||
|
|
||||||
|
import projectMonorail.DirectionType;
|
||||||
|
|
||||||
|
public abstract class AbstractStrategy {
|
||||||
|
|
||||||
|
private IMoveableObject moveableObject;
|
||||||
|
|
||||||
|
private Status state = Status.NotInit;
|
||||||
|
|
||||||
|
private int fieldWidth;
|
||||||
|
|
||||||
|
protected int getFieldWidth() {
|
||||||
|
return fieldWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
private int fieldHeight;
|
||||||
|
|
||||||
|
protected int getFieldHeight() {
|
||||||
|
return fieldHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Status getStatus() {
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setData(IMoveableObject moveableObject, int width, int height) {
|
||||||
|
if (moveableObject == null) {
|
||||||
|
state = Status.NotInit;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
state = Status.InProgress;
|
||||||
|
this.moveableObject = moveableObject;
|
||||||
|
fieldWidth = width;
|
||||||
|
fieldHeight = height;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void makeStep() {
|
||||||
|
if (state != Status.InProgress) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (isTargetDestination()) {
|
||||||
|
state = Status.Finish;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
moveToTarget();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected boolean moveLeft() {
|
||||||
|
return moveTo(DirectionType.Left);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected boolean moveRight() {
|
||||||
|
return moveTo(DirectionType.Right);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected boolean moveUp() {
|
||||||
|
return moveTo(DirectionType.Up);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected boolean moveDown() {
|
||||||
|
return moveTo(DirectionType.Down);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected ObjectParameters getObjectParameters() {
|
||||||
|
if (moveableObject == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return moveableObject.getObjectsPosition();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Integer getStep() {
|
||||||
|
if (state != Status.InProgress) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (moveableObject == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return moveableObject.getStep();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract void moveToTarget();
|
||||||
|
|
||||||
|
protected abstract boolean isTargetDestination();
|
||||||
|
|
||||||
|
private boolean moveTo(DirectionType directionType) {
|
||||||
|
if (state != Status.InProgress) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (moveableObject == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (moveableObject.checkCanMove(directionType)) {
|
||||||
|
moveableObject.moveObject(directionType);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
package projectMonorail.MovementStrategy;
|
||||||
|
|
||||||
|
|
||||||
|
import projectMonorail.DirectionType;
|
||||||
|
import projectMonorail.DrawingObjects.DrawingLocomotive;
|
||||||
|
|
||||||
|
public class DrawingObjectLocomotive implements IMoveableObject {
|
||||||
|
|
||||||
|
private DrawingLocomotive drawingLocomotive = null;
|
||||||
|
|
||||||
|
public DrawingObjectLocomotive(DrawingLocomotive drawingLocomotive) {
|
||||||
|
this.drawingLocomotive = drawingLocomotive;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ObjectParameters getObjectsPosition() {
|
||||||
|
if (drawingLocomotive == null || drawingLocomotive.getEntityLocomotive() == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return new ObjectParameters(drawingLocomotive.getPosX(), drawingLocomotive.getPosY(),
|
||||||
|
drawingLocomotive.getWidth(), drawingLocomotive.getHeight());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getStep() {
|
||||||
|
if (drawingLocomotive == null)
|
||||||
|
return 0;
|
||||||
|
return (int) ((drawingLocomotive.getEntityLocomotive() != null) ? drawingLocomotive.getEntityLocomotive().getStep() : 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean checkCanMove(DirectionType direction) {
|
||||||
|
if (drawingLocomotive == null)
|
||||||
|
return false;
|
||||||
|
return drawingLocomotive.canMove(direction);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void moveObject(DirectionType direction) {
|
||||||
|
if (drawingLocomotive != null)
|
||||||
|
drawingLocomotive.moveTransport(direction);
|
||||||
|
}
|
||||||
|
}
|
14
src/projectMonorail/MovementStrategy/IMoveableObject.java
Normal file
14
src/projectMonorail/MovementStrategy/IMoveableObject.java
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
package projectMonorail.MovementStrategy;
|
||||||
|
|
||||||
|
import projectMonorail.DirectionType;
|
||||||
|
|
||||||
|
public interface IMoveableObject {
|
||||||
|
|
||||||
|
ObjectParameters getObjectsPosition();
|
||||||
|
|
||||||
|
int getStep();
|
||||||
|
|
||||||
|
boolean checkCanMove(DirectionType direction);
|
||||||
|
|
||||||
|
void moveObject(DirectionType direction);
|
||||||
|
}
|
36
src/projectMonorail/MovementStrategy/MoveToBorder.java
Normal file
36
src/projectMonorail/MovementStrategy/MoveToBorder.java
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
package projectMonorail.MovementStrategy;
|
||||||
|
|
||||||
|
public class MoveToBorder extends AbstractStrategy {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean isTargetDestination() {
|
||||||
|
var objParams = getObjectParameters();
|
||||||
|
if (objParams == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return objParams.rightBorder() <= getFieldWidth() &&
|
||||||
|
objParams.rightBorder() + getStep() >= getFieldWidth() &&
|
||||||
|
objParams.downBorder() <= getFieldHeight() &&
|
||||||
|
objParams.downBorder() + getStep() >= getFieldHeight();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void moveToTarget() {
|
||||||
|
var objParams = getObjectParameters();
|
||||||
|
if (objParams == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var diffX = objParams.objectMiddleHorizontal() - getFieldWidth();
|
||||||
|
if (Math.abs(diffX) > getStep()) {
|
||||||
|
if (diffX < 0) {
|
||||||
|
moveRight();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var diffY = objParams.objectMiddleVertical() - getFieldHeight();
|
||||||
|
if (Math.abs(diffY) > getStep()) {
|
||||||
|
if (diffY < 0) {
|
||||||
|
moveDown();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
40
src/projectMonorail/MovementStrategy/MoveToCenter.java
Normal file
40
src/projectMonorail/MovementStrategy/MoveToCenter.java
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
package projectMonorail.MovementStrategy;
|
||||||
|
|
||||||
|
public class MoveToCenter extends AbstractStrategy {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean isTargetDestination() {
|
||||||
|
var objParams = getObjectParameters();
|
||||||
|
if (objParams == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return objParams.objectMiddleHorizontal() <= getFieldWidth() / 2 &&
|
||||||
|
objParams.objectMiddleHorizontal() + getStep() >= getFieldWidth() / 2 &&
|
||||||
|
objParams.objectMiddleVertical() <= getFieldHeight() / 2 &&
|
||||||
|
objParams.objectMiddleVertical() + getStep() >= getFieldHeight() / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void moveToTarget() {
|
||||||
|
var objParams = getObjectParameters();
|
||||||
|
if (objParams == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var diffX = objParams.objectMiddleHorizontal() - getFieldWidth() / 2;
|
||||||
|
if (Math.abs(diffX) > getStep()) {
|
||||||
|
if (diffX > 0) {
|
||||||
|
moveLeft();
|
||||||
|
} else {
|
||||||
|
moveRight();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var diffY = objParams.objectMiddleVertical() - getFieldHeight() / 2;
|
||||||
|
if (Math.abs(diffY) > getStep()) {
|
||||||
|
if (diffY > 0) {
|
||||||
|
moveUp();
|
||||||
|
} else {
|
||||||
|
moveDown();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
43
src/projectMonorail/MovementStrategy/ObjectParameters.java
Normal file
43
src/projectMonorail/MovementStrategy/ObjectParameters.java
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
package projectMonorail.MovementStrategy;
|
||||||
|
|
||||||
|
public class ObjectParameters {
|
||||||
|
|
||||||
|
private final int x;
|
||||||
|
|
||||||
|
private final int y;
|
||||||
|
|
||||||
|
private final int width;
|
||||||
|
|
||||||
|
private final int height;
|
||||||
|
|
||||||
|
public int leftBorder() {
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int topBorder() {
|
||||||
|
return y;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int rightBorder() {
|
||||||
|
return x + width;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int downBorder() {
|
||||||
|
return y + height;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int objectMiddleHorizontal() {
|
||||||
|
return x + width / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int objectMiddleVertical() {
|
||||||
|
return y + height / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ObjectParameters(int x, int y, int width, int height) {
|
||||||
|
this.x = x;
|
||||||
|
this.y = y;
|
||||||
|
this.width = width;
|
||||||
|
this.height = height;
|
||||||
|
}
|
||||||
|
}
|
9
src/projectMonorail/MovementStrategy/Status.java
Normal file
9
src/projectMonorail/MovementStrategy/Status.java
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
package projectMonorail.MovementStrategy;
|
||||||
|
|
||||||
|
public enum Status {
|
||||||
|
NotInit,
|
||||||
|
|
||||||
|
InProgress,
|
||||||
|
|
||||||
|
Finish
|
||||||
|
}
|
@ -1,5 +1,8 @@
|
|||||||
package projectMonorail;
|
package projectMonorail;
|
||||||
|
|
||||||
|
import projectMonorail.DrawingObjects.*;
|
||||||
|
import projectMonorail.MovementStrategy.*;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
@ -7,7 +10,9 @@ import java.util.Random;
|
|||||||
|
|
||||||
public class PictureBox extends JPanel {
|
public class PictureBox extends JPanel {
|
||||||
|
|
||||||
private DrawingMonorail drawingMonorail;
|
private DrawingLocomotive drawingLocomotive;
|
||||||
|
|
||||||
|
private AbstractStrategy abstractStrategy;
|
||||||
|
|
||||||
private JButton buttonLeft;
|
private JButton buttonLeft;
|
||||||
|
|
||||||
@ -17,13 +22,23 @@ public class PictureBox extends JPanel {
|
|||||||
|
|
||||||
private JButton buttonDown;
|
private JButton buttonDown;
|
||||||
|
|
||||||
|
private JButton buttonCreateLocomotive;
|
||||||
|
|
||||||
private JButton buttonCreateMonorail;
|
private JButton buttonCreateMonorail;
|
||||||
|
|
||||||
|
private JButton buttonStep;
|
||||||
|
|
||||||
|
private JComboBox comboBoxStrategy;
|
||||||
|
|
||||||
private JPanel buttonsPanel;
|
private JPanel buttonsPanel;
|
||||||
|
|
||||||
private JPanel buttonsMovePanel;
|
private JPanel buttonsMovePanel;
|
||||||
|
|
||||||
private JPanel paddingPanel;
|
private JPanel movePaddingPanel;
|
||||||
|
|
||||||
|
private JPanel strategyPaddingPanel;
|
||||||
|
|
||||||
|
private JPanel strategyPanel;
|
||||||
|
|
||||||
public PictureBox() {
|
public PictureBox() {
|
||||||
setLayout(new BorderLayout());
|
setLayout(new BorderLayout());
|
||||||
@ -32,29 +47,44 @@ public class PictureBox extends JPanel {
|
|||||||
buttonsPanel.setLayout(new BoxLayout(buttonsPanel, BoxLayout.X_AXIS));
|
buttonsPanel.setLayout(new BoxLayout(buttonsPanel, BoxLayout.X_AXIS));
|
||||||
buttonsPanel.setOpaque(false);
|
buttonsPanel.setOpaque(false);
|
||||||
|
|
||||||
buttonCreateMonorail = new JButton("Create");
|
buttonCreateLocomotive = new JButton("Create locomotive");
|
||||||
|
buttonCreateLocomotive.setFocusable(false);
|
||||||
|
buttonCreateLocomotive.setFont(new Font("Segoe UI", Font.PLAIN, 12));
|
||||||
|
buttonCreateLocomotive.setBackground(Color.LIGHT_GRAY);
|
||||||
|
buttonCreateLocomotive.setMaximumSize(new Dimension(140, 42));
|
||||||
|
|
||||||
|
buttonCreateLocomotive.addActionListener(e -> {
|
||||||
|
Random random = new Random();
|
||||||
|
drawingLocomotive = new DrawingLocomotive(random.nextInt(200, 300),
|
||||||
|
random.nextInt(1000, 3000),
|
||||||
|
new Color(random.nextInt(0, 256), random.nextInt(0, 256),
|
||||||
|
random.nextInt(0, 256)),
|
||||||
|
this.getWidth(), this.getHeight(), random.nextInt(2, 5));
|
||||||
|
drawingLocomotive.setPosition(random.nextInt(10, 100), random.nextInt(10, 100));
|
||||||
|
repaint();
|
||||||
|
});
|
||||||
|
|
||||||
|
buttonCreateMonorail = new JButton("Create monorail");
|
||||||
buttonCreateMonorail.setFocusable(false);
|
buttonCreateMonorail.setFocusable(false);
|
||||||
buttonCreateMonorail.setFont(new Font("Segoe UI", Font.PLAIN, 12));
|
buttonCreateMonorail.setFont(new Font("Segoe UI", Font.PLAIN, 12));
|
||||||
buttonCreateMonorail.setBackground(Color.LIGHT_GRAY);
|
buttonCreateMonorail.setBackground(Color.LIGHT_GRAY);
|
||||||
buttonCreateMonorail.setPreferredSize(new Dimension(75, 23));
|
buttonCreateMonorail.setMaximumSize(new Dimension(140, 42));
|
||||||
|
|
||||||
buttonCreateMonorail.addActionListener (e -> {
|
buttonCreateMonorail.addActionListener(e -> {
|
||||||
Random random = new Random();
|
Random random = new Random();
|
||||||
drawingMonorail = new DrawingMonorail();
|
drawingLocomotive = new DrawingMonorail(random.nextInt(200, 300),
|
||||||
drawingMonorail.Init(random.nextInt(200, 300),
|
|
||||||
random.nextInt(1000, 3000),
|
random.nextInt(1000, 3000),
|
||||||
new Color(random.nextInt(0, 256), random.nextInt(0, 256),
|
new Color(random.nextInt(0, 256), random.nextInt(0, 256),
|
||||||
random.nextInt(0, 256)),
|
random.nextInt(0, 256)),
|
||||||
new Color(random.nextInt(0, 256), random.nextInt(0, 256),
|
new Color(random.nextInt(0, 256), random.nextInt(0, 256),
|
||||||
random.nextInt(0, 256)),
|
random.nextInt(0, 256)),
|
||||||
random.nextBoolean(), random.nextBoolean(), this.getWidth(), this.getHeight(), random.nextInt(2, 5));
|
random.nextBoolean(), random.nextBoolean(), this.getWidth(), this.getHeight(), random.nextInt(2, 5));
|
||||||
drawingMonorail.SetPosition(random.nextInt(10, 100), random.nextInt(10, 100));
|
drawingLocomotive.setPosition(random.nextInt(10, 100), random.nextInt(10, 100));
|
||||||
repaint();
|
repaint();
|
||||||
});
|
});
|
||||||
|
|
||||||
ActionListener buttonMoveListener = e -> {
|
ActionListener buttonMoveListener = e -> {
|
||||||
if (drawingMonorail == null)
|
if (drawingLocomotive == null) {
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -62,16 +92,16 @@ public class PictureBox extends JPanel {
|
|||||||
|
|
||||||
switch (buttonName) {
|
switch (buttonName) {
|
||||||
case ("buttonUp"):
|
case ("buttonUp"):
|
||||||
drawingMonorail.MoveTransport(DirectionType.Up);
|
drawingLocomotive.moveTransport(DirectionType.Up);
|
||||||
break;
|
break;
|
||||||
case ("buttonDown"):
|
case ("buttonDown"):
|
||||||
drawingMonorail.MoveTransport(DirectionType.Down);
|
drawingLocomotive.moveTransport(DirectionType.Down);
|
||||||
break;
|
break;
|
||||||
case ("buttonLeft"):
|
case ("buttonLeft"):
|
||||||
drawingMonorail.MoveTransport(DirectionType.Left);
|
drawingLocomotive.moveTransport(DirectionType.Left);
|
||||||
break;
|
break;
|
||||||
case ("buttonRight"):
|
case ("buttonRight"):
|
||||||
drawingMonorail.MoveTransport(DirectionType.Right);
|
drawingLocomotive.moveTransport(DirectionType.Right);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
repaint();
|
repaint();
|
||||||
@ -110,7 +140,7 @@ public class PictureBox extends JPanel {
|
|||||||
buttonsMovePanel.setOpaque(false);
|
buttonsMovePanel.setOpaque(false);
|
||||||
|
|
||||||
GridBagConstraints constrains = new GridBagConstraints();
|
GridBagConstraints constrains = new GridBagConstraints();
|
||||||
constrains.insets = new Insets(5,5,5,5);
|
constrains.insets = new Insets(5, 5, 5, 5);
|
||||||
constrains.gridx = 0;
|
constrains.gridx = 0;
|
||||||
constrains.gridy = 0;
|
constrains.gridy = 0;
|
||||||
|
|
||||||
@ -141,30 +171,94 @@ public class PictureBox extends JPanel {
|
|||||||
|
|
||||||
buttonsMovePanel.add(buttonRight, constrains);
|
buttonsMovePanel.add(buttonRight, constrains);
|
||||||
|
|
||||||
paddingPanel = new JPanel();
|
movePaddingPanel = new JPanel();
|
||||||
paddingPanel.setLayout(new BoxLayout(paddingPanel, BoxLayout.Y_AXIS));
|
movePaddingPanel.setLayout(new BoxLayout(movePaddingPanel, BoxLayout.Y_AXIS));
|
||||||
paddingPanel.setOpaque(false);
|
movePaddingPanel.setOpaque(false);
|
||||||
|
|
||||||
paddingPanel.add(buttonsMovePanel);
|
movePaddingPanel.add(buttonsMovePanel);
|
||||||
paddingPanel.add(Box.createVerticalStrut(15));
|
movePaddingPanel.add(Box.createVerticalStrut(22));
|
||||||
|
|
||||||
buttonsPanel.add(Box.createHorizontalStrut(20));
|
buttonsPanel.add(Box.createHorizontalStrut(12));
|
||||||
buttonsPanel.add(buttonCreateMonorail);
|
buttonsPanel.add(buttonCreateMonorail);
|
||||||
buttonsPanel.add(Box.createHorizontalStrut(650));
|
buttonsPanel.add(Box.createHorizontalStrut(16));
|
||||||
buttonsPanel.add(paddingPanel);
|
buttonsPanel.add(buttonCreateLocomotive);
|
||||||
|
buttonsPanel.add(Box.createHorizontalStrut(460));
|
||||||
|
buttonsPanel.add(movePaddingPanel);
|
||||||
|
|
||||||
add(buttonsPanel, BorderLayout.SOUTH);
|
add(buttonsPanel, BorderLayout.SOUTH);
|
||||||
|
|
||||||
|
strategyPaddingPanel = new JPanel();
|
||||||
|
strategyPaddingPanel.setLayout(new BoxLayout(strategyPaddingPanel, BoxLayout.X_AXIS));
|
||||||
|
strategyPaddingPanel.setOpaque(false);
|
||||||
|
|
||||||
|
String[] items = {
|
||||||
|
"Form center",
|
||||||
|
"Form border"
|
||||||
|
};
|
||||||
|
comboBoxStrategy = new JComboBox(items);
|
||||||
|
comboBoxStrategy.setMaximumSize(new Dimension(150, 23));
|
||||||
|
|
||||||
|
buttonStep = new JButton("Step");
|
||||||
|
buttonStep.setFocusable(false);
|
||||||
|
buttonStep.setFont(new Font("Segoe UI", Font.PLAIN, 12));
|
||||||
|
buttonStep.setBackground(Color.LIGHT_GRAY);
|
||||||
|
buttonStep.setMaximumSize(new Dimension(75, 28));
|
||||||
|
|
||||||
|
buttonStep.addActionListener(e -> {
|
||||||
|
if (drawingLocomotive == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (comboBoxStrategy.isEnabled()) {
|
||||||
|
abstractStrategy = switch (comboBoxStrategy.getSelectedIndex()) {
|
||||||
|
case 0 -> new MoveToCenter();
|
||||||
|
case 1 -> new MoveToBorder();
|
||||||
|
default -> null;
|
||||||
|
};
|
||||||
|
if (abstractStrategy == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
abstractStrategy.setData(new DrawingObjectLocomotive(drawingLocomotive), this.getWidth(), this.getHeight());
|
||||||
|
}
|
||||||
|
if (abstractStrategy == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
comboBoxStrategy.setEnabled(false);
|
||||||
|
abstractStrategy.makeStep();
|
||||||
|
repaint();
|
||||||
|
if (abstractStrategy.getStatus() == Status.Finish)
|
||||||
|
{
|
||||||
|
comboBoxStrategy.setEnabled(true);
|
||||||
|
abstractStrategy = null;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
strategyPanel = new JPanel();
|
||||||
|
strategyPanel.setLayout(new BoxLayout(strategyPanel, BoxLayout.Y_AXIS));
|
||||||
|
strategyPanel.setOpaque(false);
|
||||||
|
|
||||||
|
strategyPanel.add(Box.createVerticalStrut(10));
|
||||||
|
strategyPanel.add(comboBoxStrategy);
|
||||||
|
strategyPanel.add(Box.createVerticalStrut(15));
|
||||||
|
strategyPanel.add(buttonStep);
|
||||||
|
|
||||||
|
strategyPaddingPanel.add(Box.createHorizontalStrut(735));
|
||||||
|
strategyPaddingPanel.add(strategyPanel);
|
||||||
|
|
||||||
|
add(strategyPaddingPanel, BorderLayout.NORTH);
|
||||||
|
|
||||||
setPreferredSize(new Dimension(900, 500));
|
setPreferredSize(new Dimension(900, 500));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void paintComponent(Graphics g) {
|
protected void paintComponent(Graphics g) {
|
||||||
if (drawingMonorail == null) {
|
if (drawingLocomotive == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
super.paintComponent(g);
|
super.paintComponent(g);
|
||||||
Graphics2D g2d = (Graphics2D) g;
|
Graphics2D g2d = (Graphics2D) g;
|
||||||
drawingMonorail.DrawTransport(g2d);
|
drawingLocomotive.drawTransport(g2d);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user