Готовая 2 лабораторная (Усложненная)

This commit is contained in:
Илья 2023-10-26 22:50:09 +04:00
parent ed022a2dd6
commit c84d016721
20 changed files with 1135 additions and 408 deletions

View File

@ -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);
}
}
}

View 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);
}
}

View 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);
}
}
}

View File

@ -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);
}
}

View 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;
}
}

View 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;
}
}

View File

@ -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;
}
}

View 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);
}
}

View 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);
}
}

View 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);
}
}

View 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);
}

View File

@ -1,4 +1,4 @@
package projectMonorail; package projectMonorail.Extras;
public enum WheelNumber { public enum WheelNumber {
Two, Two,

View 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;
}
}

View File

@ -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);
}
}

View 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);
}

View 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();
}
}
}
}

View 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();
}
}
}
}

View 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;
}
}

View File

@ -0,0 +1,9 @@
package projectMonorail.MovementStrategy;
public enum Status {
NotInit,
InProgress,
Finish
}

View File

@ -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);
} }
} }