2 лабораторная
This commit is contained in:
parent
c8a89e6c86
commit
23b457e9c1
119
src/AbstractStrategy.java
Normal file
119
src/AbstractStrategy.java
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
public abstract class AbstractStrategy
|
||||||
|
{
|
||||||
|
// Перемещаемый объект
|
||||||
|
private IMoveableObject _moveableObject;
|
||||||
|
// Статус перемещения
|
||||||
|
private Status _state = Status.NotInit;
|
||||||
|
// Ширина поля
|
||||||
|
protected int FieldWidth;
|
||||||
|
protected int GetFieldWidth()
|
||||||
|
{
|
||||||
|
return FieldWidth;
|
||||||
|
}
|
||||||
|
private void SetFieldWidth(int fieldWidth) {
|
||||||
|
FieldWidth = fieldWidth;
|
||||||
|
}
|
||||||
|
// Высота поля
|
||||||
|
protected int FieldHeight ;
|
||||||
|
protected int GetFieldHeigth()
|
||||||
|
{
|
||||||
|
return FieldHeight;
|
||||||
|
}
|
||||||
|
private void SetFieldHeigth(int fieldHeight) {
|
||||||
|
FieldHeight = fieldHeight;
|
||||||
|
}
|
||||||
|
// Статус перемещения
|
||||||
|
public Status GetStatus() { return _state; }
|
||||||
|
/// Установка данных
|
||||||
|
/// <param name="moveableObject">Перемещаемый объект</param>
|
||||||
|
/// <param name="width">Ширина поля</param>
|
||||||
|
/// <param name="height">Высота поля</param>
|
||||||
|
public void SetData(IMoveableObject moveableObject, int width, int height)
|
||||||
|
{
|
||||||
|
if (moveableObject == null)
|
||||||
|
{
|
||||||
|
_state = Status.NotInit;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_state = Status.InProgress;
|
||||||
|
_moveableObject = moveableObject;
|
||||||
|
FieldWidth = width;
|
||||||
|
FieldHeight = height;
|
||||||
|
}
|
||||||
|
// Шаг перемещения
|
||||||
|
public void MakeStep()
|
||||||
|
{
|
||||||
|
if (_state != Status.InProgress)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (IsTargetDestinaion())
|
||||||
|
{
|
||||||
|
_state = Status.Finish;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
MoveToTarget();
|
||||||
|
}
|
||||||
|
// Перемещение влево
|
||||||
|
/// <returns>Результат перемещения (true - удалось переместиться, false -неудача)</returns>
|
||||||
|
protected boolean MoveLeft() {return MoveTo(DirectionType.Left);}
|
||||||
|
// Перемещение вправо false - неудача)</returns>
|
||||||
|
protected boolean MoveRight() {return MoveTo(DirectionType.Right);}
|
||||||
|
/// <summary>
|
||||||
|
/// Перемещение вверх
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>Результат перемещения (true - удалось переместиться, false - неудача)</returns>
|
||||||
|
protected boolean MoveUp(){return MoveTo(DirectionType.Up);}
|
||||||
|
/// <summary>
|
||||||
|
/// Перемещение вниз
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>Результат перемещения (true - удалось переместиться,false - неудача)</returns>
|
||||||
|
protected boolean MoveDown() {return MoveTo(DirectionType.Down);}
|
||||||
|
/// <summary>
|
||||||
|
/// Параметры объекта
|
||||||
|
/// </summary>
|
||||||
|
protected ObjectParameters GetObjectParameters()
|
||||||
|
{
|
||||||
|
return _moveableObject.GetObjectPosition();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Шаг объекта
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
protected Integer GetStep()
|
||||||
|
{
|
||||||
|
if (_state != Status.InProgress)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return _moveableObject.GetStep();
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Перемещение к цели
|
||||||
|
/// </summary>
|
||||||
|
protected abstract void MoveToTarget();
|
||||||
|
/// <summary>
|
||||||
|
/// Достигнута ли цель
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
protected abstract boolean IsTargetDestinaion();
|
||||||
|
/// <summary>
|
||||||
|
/// Попытка перемещения в требуемом направлении
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="directionType">Направление</param>
|
||||||
|
/// <returns>Результат попытки (true - удалось переместиться, false - неудача)</returns>
|
||||||
|
private boolean MoveTo(DirectionType directionType)
|
||||||
|
{
|
||||||
|
if (_state != Status.InProgress)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (_moveableObject.CheckCanMove(directionType))
|
||||||
|
{
|
||||||
|
_moveableObject.MoveObject(directionType);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
@ -1,31 +1,41 @@
|
|||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
|
|
||||||
public class DrawingCrane
|
public class DrawingCrane
|
||||||
{
|
{
|
||||||
private EntityCrane entityCrane;
|
protected EntityCrane entityCrane;
|
||||||
private DrawingWheel drawingWheel;
|
public EntityCrane GetEntityCrane(){return entityCrane;}
|
||||||
|
protected void SetEntityCrane(EntityCrane entityCraneTemp){entityCrane=entityCraneTemp;}
|
||||||
|
private IWheel drawingWheel;
|
||||||
private int _pictureWidth;
|
private int _pictureWidth;
|
||||||
private int _pictureHeight;
|
private int _pictureHeight;
|
||||||
|
|
||||||
private int _startPositionX;
|
protected int _startPositionX;
|
||||||
private int _startPositionY;
|
protected int _startPositionY;
|
||||||
|
|
||||||
private final int _craneWidth = 200;
|
private final int _craneWidth = 200;
|
||||||
|
|
||||||
private final int _craneHeight = 150;
|
private final int _craneHeight = 150;
|
||||||
public void Init(int speed, double weight, boolean counterWeight, boolean crane, Color bodyColor, Color additionalColor, int width, int height,int wheelCount)
|
public int GetPosX() {return _startPositionX;}
|
||||||
|
public int GetPosY() {return _startPositionY;}
|
||||||
|
public int GetWidth() {return _craneWidth;}
|
||||||
|
public int GetHeight() {return _craneHeight;}
|
||||||
|
|
||||||
|
|
||||||
|
protected DrawingCrane(int speed, double weight, Color bodyColor, int width, int height, int WheelCount, int wheelMode)
|
||||||
{
|
{
|
||||||
if ((_craneWidth > width) || (_craneHeight > height)) return;
|
|
||||||
_pictureHeight = height;
|
_pictureHeight = height;
|
||||||
_pictureWidth = width;
|
_pictureWidth = width;
|
||||||
entityCrane = new EntityCrane();
|
int mode = wheelMode % 3;
|
||||||
entityCrane.Init(speed, weight, counterWeight,crane, bodyColor, additionalColor);
|
entityCrane = new EntityCrane(speed, weight, bodyColor);
|
||||||
drawingWheel = new DrawingWheel();
|
switch (mode)
|
||||||
drawingWheel.SetWheelCounter(wheelCount);
|
{
|
||||||
|
case 0 -> {drawingWheel = new DrawingWheelOval();}
|
||||||
|
case 1 -> {drawingWheel = new DrawingWheelDouble();}
|
||||||
|
case 2 -> {drawingWheel = new DrawingWheelRectangle();}
|
||||||
|
}
|
||||||
|
|
||||||
|
drawingWheel.SetWheelCounter(WheelCount);
|
||||||
|
|
||||||
}
|
}
|
||||||
public void SetPosition(int x, int y)
|
public void SetPosition(int x, int y)
|
||||||
{
|
{
|
||||||
|
|
||||||
if(x+_craneWidth>_pictureWidth)
|
if(x+_craneWidth>_pictureWidth)
|
||||||
{
|
{
|
||||||
while(x + _craneWidth > _pictureWidth)
|
while(x + _craneWidth > _pictureWidth)
|
||||||
@ -49,39 +59,56 @@ public class DrawingCrane
|
|||||||
if (entityCrane == null) return;
|
if (entityCrane == null) return;
|
||||||
switch (direction) {
|
switch (direction) {
|
||||||
case Left -> {
|
case Left -> {
|
||||||
|
|
||||||
if (_startPositionX - entityCrane.Step > 0) {
|
if (_startPositionX - entityCrane.Step > 0) {
|
||||||
_startPositionX -= (int) entityCrane.Step;
|
_startPositionX -= (int) entityCrane.Step;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case Right->{
|
case Right->{
|
||||||
|
|
||||||
if (_startPositionX + entityCrane.Step + _craneWidth < _pictureWidth) {
|
if (_startPositionX + entityCrane.Step + _craneWidth < _pictureWidth) {
|
||||||
_startPositionX += (int) entityCrane.Step;
|
_startPositionX += (int) entityCrane.Step;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case Up-> {
|
case Up-> {
|
||||||
|
|
||||||
if (_startPositionY - entityCrane.Step > 0) {
|
if (_startPositionY - entityCrane.Step > 0) {
|
||||||
_startPositionY -= (int) entityCrane.Step;
|
_startPositionY -= (int) entityCrane.Step;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
case Down ->{
|
case Down ->{
|
||||||
if (_startPositionY + entityCrane.Step + _craneHeight < _pictureHeight) {
|
if (_startPositionY + entityCrane.Step + _craneHeight < _pictureHeight) {
|
||||||
|
|
||||||
_startPositionY += (int) entityCrane.Step;
|
_startPositionY += (int) entityCrane.Step;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
public boolean CanMove(DirectionType direction)
|
||||||
|
{
|
||||||
|
if (entityCrane == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
switch(direction)
|
||||||
|
{
|
||||||
|
//влево
|
||||||
|
case Left -> {
|
||||||
|
return _startPositionX - entityCrane.Step > 0;}
|
||||||
|
//вверх
|
||||||
|
case Up -> {
|
||||||
|
return _startPositionY - entityCrane.Step > 0;}
|
||||||
|
// вправо
|
||||||
|
case Right -> {
|
||||||
|
return _startPositionX + entityCrane.Step - _craneWidth < _pictureWidth;}
|
||||||
|
//вниз
|
||||||
|
case Down -> {
|
||||||
|
return _startPositionY + entityCrane.Step - _craneHeight < _pictureHeight;}
|
||||||
|
default ->{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
public void DrawTransport(Graphics g) {
|
public void DrawTransport(Graphics g) {
|
||||||
var g2d = (Graphics2D)g;
|
var g2d = (Graphics2D)g;
|
||||||
if (entityCrane == null) return;
|
if (entityCrane == null) return;
|
||||||
// Гусеницы
|
// Гусеницы
|
||||||
|
|
||||||
g2d.drawLine( _startPositionX + 5, _startPositionY + 110, _startPositionX + 195, _startPositionY + 110);
|
g2d.drawLine( _startPositionX + 5, _startPositionY + 110, _startPositionX + 195, _startPositionY + 110);
|
||||||
g2d.drawLine( _startPositionX, _startPositionY + 115, _startPositionX, _startPositionY + 145);
|
g2d.drawLine( _startPositionX, _startPositionY + 115, _startPositionX, _startPositionY + 145);
|
||||||
g2d.drawLine( _startPositionX + 5, _startPositionY + 150, _startPositionX + 195, _startPositionY + 150);
|
g2d.drawLine( _startPositionX + 5, _startPositionY + 150, _startPositionX + 195, _startPositionY + 150);
|
||||||
@ -100,16 +127,5 @@ public class DrawingCrane
|
|||||||
//кабинка и выхлоп
|
//кабинка и выхлоп
|
||||||
g2d.drawRect( _startPositionX + 60, _startPositionY + 10, 20, 55);
|
g2d.drawRect( _startPositionX + 60, _startPositionY + 10, 20, 55);
|
||||||
g2d.drawRect( _startPositionX + 110, _startPositionY, 75, 65);
|
g2d.drawRect( _startPositionX + 110, _startPositionY, 75, 65);
|
||||||
if (entityCrane.getCounterWeight()) {
|
|
||||||
g2d.setColor(entityCrane.getAdditionalColor());
|
|
||||||
g2d.drawRect( _startPositionX + 185, _startPositionY + 20, 15, 45);
|
|
||||||
|
|
||||||
}
|
|
||||||
if (entityCrane.getCrane()) {
|
|
||||||
g2d.drawRect( _startPositionX + 20, _startPositionY, 30, 65);
|
|
||||||
g2d.drawRect( _startPositionX, _startPositionY, 20, 30);
|
|
||||||
g2d.fillRect( _startPositionX + 20, _startPositionY, 30, 65);
|
|
||||||
g2d.fillRect( _startPositionX, _startPositionY, 20, 30);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
31
src/DrawingHoistingCrane.java
Normal file
31
src/DrawingHoistingCrane.java
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
import java.awt.*;
|
||||||
|
public class DrawingHoistingCrane extends DrawingCrane {
|
||||||
|
public DrawingHoistingCrane(int speed, double weight, Color bodyColor, Color additionalColor, boolean counterWeight, boolean crane,int width, int height, int WheelCount, int wheelMode)
|
||||||
|
{
|
||||||
|
super(speed, weight, bodyColor, width, height, WheelCount,wheelMode);
|
||||||
|
if (entityCrane != null)
|
||||||
|
{
|
||||||
|
entityCrane = new EntityHoistingCrane(speed, weight, bodyColor, additionalColor, counterWeight, crane);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void DrawTransport(Graphics g) {
|
||||||
|
if (!(entityCrane instanceof EntityHoistingCrane)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
super.DrawTransport(g);
|
||||||
|
if (((EntityHoistingCrane) entityCrane).getCounterWeight()) {
|
||||||
|
g.setColor(((EntityHoistingCrane) entityCrane).getAdditionalColor());
|
||||||
|
g.drawRect(_startPositionX + 185, _startPositionY + 20, 15, 45);
|
||||||
|
|
||||||
|
}
|
||||||
|
if (((EntityHoistingCrane) entityCrane).getCrane()) {
|
||||||
|
g.drawRect(_startPositionX + 20, _startPositionY, 30, 65);
|
||||||
|
g.drawRect(_startPositionX, _startPositionY, 20, 30);
|
||||||
|
g.setColor(((EntityHoistingCrane) entityCrane).getAdditionalColor());
|
||||||
|
g.fillRect(_startPositionX + 20, _startPositionY, 30, 65);
|
||||||
|
g.fillRect(_startPositionX, _startPositionY, 20, 30);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
31
src/DrawingWheelDouble.java
Normal file
31
src/DrawingWheelDouble.java
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
import java.awt.*;
|
||||||
|
|
||||||
|
public class DrawingWheelDouble implements IWheel{
|
||||||
|
private WheelCounter wheelCounter;
|
||||||
|
public void SetWheelCounter(int count)
|
||||||
|
{
|
||||||
|
if (count % 3 == 0)
|
||||||
|
wheelCounter = WheelCounter.SIX;
|
||||||
|
else if (count % 3 == 1)
|
||||||
|
wheelCounter = WheelCounter.FOUR;
|
||||||
|
else if (count % 3 == 2)
|
||||||
|
wheelCounter = WheelCounter.FIVE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DrawWheels(int _startPositionX, int _startPositionY, Graphics2D g2d)
|
||||||
|
{
|
||||||
|
g2d.drawOval( _startPositionX + 2, _startPositionY + 112, 36, 36);
|
||||||
|
g2d.drawOval( _startPositionX + 7, _startPositionY + 117, 25, 25);
|
||||||
|
g2d.drawOval( _startPositionX + 160, _startPositionY + 112, 36, 36);
|
||||||
|
g2d.drawOval( _startPositionX + 165, _startPositionY + 117, 25, 25);
|
||||||
|
g2d.drawOval( _startPositionX + 74, _startPositionY + 112, 10, 10);
|
||||||
|
g2d.drawOval( _startPositionX + 76, _startPositionY + 114, 6, 6);
|
||||||
|
g2d.drawOval( _startPositionX + 111, _startPositionY + 112, 10, 10);
|
||||||
|
g2d.drawOval( _startPositionX + 113, _startPositionY + 114, 6, 6);
|
||||||
|
switch (wheelCounter)
|
||||||
|
{
|
||||||
|
case FIVE -> {g2d.drawOval( _startPositionX + 133, _startPositionY + 128, 20, 20);g2d.drawOval( _startPositionX + 136, _startPositionY + 131, 14, 14);}
|
||||||
|
case SIX -> {g2d.drawOval( _startPositionX + 45, _startPositionY + 128, 20, 20);g2d.drawOval( _startPositionX + 48, _startPositionY + 131, 14, 14);g2d.drawOval( _startPositionX + 136, _startPositionY + 131, 14, 14); g2d.drawOval( _startPositionX + 133, _startPositionY + 128, 20, 20);}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,6 @@
|
|||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
|
|
||||||
public class DrawingWheel {
|
public class DrawingWheelOval implements IWheel {
|
||||||
private WheelCounter wheelCounter;
|
private WheelCounter wheelCounter;
|
||||||
public void SetWheelCounter(int count)
|
public void SetWheelCounter(int count)
|
||||||
{
|
{
|
32
src/DrawingWheelRectangle.java
Normal file
32
src/DrawingWheelRectangle.java
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
import java.awt.*;
|
||||||
|
|
||||||
|
public class DrawingWheelRectangle implements IWheel {
|
||||||
|
private WheelCounter wheelCounter;
|
||||||
|
public WheelCounter getWheelCount()
|
||||||
|
{
|
||||||
|
return wheelCounter;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetWheelCounter(int count)
|
||||||
|
{
|
||||||
|
if (count % 3 == 0)
|
||||||
|
wheelCounter = WheelCounter.SIX;
|
||||||
|
else if (count % 3 == 1)
|
||||||
|
wheelCounter = WheelCounter.FOUR;
|
||||||
|
else if (count % 3 == 2)
|
||||||
|
wheelCounter = WheelCounter.FIVE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DrawWheels(int _startPositionX, int _startPositionY, Graphics2D g2d)
|
||||||
|
{
|
||||||
|
g2d.drawRect( _startPositionX + 2, _startPositionY + 112, 36, 36);
|
||||||
|
g2d.drawRect( _startPositionX + 160, _startPositionY + 112, 36, 36);
|
||||||
|
g2d.drawRect( _startPositionX + 74, _startPositionY + 112, 10, 10);
|
||||||
|
g2d.drawRect( _startPositionX + 111, _startPositionY + 112, 10, 10);
|
||||||
|
switch (wheelCounter)
|
||||||
|
{
|
||||||
|
case FIVE -> {g2d.drawRect( _startPositionX + 133, _startPositionY + 128, 20, 20);}
|
||||||
|
case SIX -> {g2d.drawRect( _startPositionX + 45, _startPositionY + 128, 20, 20); g2d.drawRect( _startPositionX + 133, _startPositionY + 128, 20, 20);}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
29
src/DrawningObjectCrane.java
Normal file
29
src/DrawningObjectCrane.java
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
public class DrawningObjectCrane implements IMoveableObject {
|
||||||
|
private final DrawingCrane _drawingCrane;
|
||||||
|
public DrawningObjectCrane(DrawingCrane drawingCrane)
|
||||||
|
{
|
||||||
|
_drawingCrane = drawingCrane;
|
||||||
|
}
|
||||||
|
public ObjectParameters GetObjectPosition()
|
||||||
|
{
|
||||||
|
if (_drawingCrane == null || _drawingCrane.entityCrane == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return new ObjectParameters(_drawingCrane.GetPosX(), _drawingCrane.GetPosY(), _drawingCrane.GetWidth(), _drawingCrane.GetHeight());
|
||||||
|
|
||||||
|
}
|
||||||
|
public int GetStep() {
|
||||||
|
int step = (int) (_drawingCrane.entityCrane.Step);
|
||||||
|
if (step != 0)
|
||||||
|
return step;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
public boolean CheckCanMove(DirectionType direction) {
|
||||||
|
boolean canMove = _drawingCrane.CanMove(direction);
|
||||||
|
if(canMove)
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
public void MoveObject(DirectionType direction) { _drawingCrane.MoveCrane(direction);}
|
||||||
|
}
|
@ -6,8 +6,6 @@ public class EntityCrane
|
|||||||
private int Speed ;
|
private int Speed ;
|
||||||
public int getSpeed() {return Speed;}
|
public int getSpeed() {return Speed;}
|
||||||
private void setSpeed(int value) {Speed = value;}
|
private void setSpeed(int value) {Speed = value;}
|
||||||
|
|
||||||
|
|
||||||
//вес
|
//вес
|
||||||
private double Weight ;
|
private double Weight ;
|
||||||
public double getWeight() {return Weight;}
|
public double getWeight() {return Weight;}
|
||||||
@ -16,29 +14,14 @@ public class EntityCrane
|
|||||||
private Color BodyColor ;
|
private Color BodyColor ;
|
||||||
public Color getBodyColor() {return BodyColor;}
|
public Color getBodyColor() {return BodyColor;}
|
||||||
private void setBodyColor(Color value) {BodyColor = value;}
|
private void setBodyColor(Color value) {BodyColor = value;}
|
||||||
//дополнительный
|
|
||||||
private Color AdditionalColor ;
|
|
||||||
public Color getAdditionalColor() {return AdditionalColor;}
|
|
||||||
private void setAdditionalColor(Color value) {AdditionalColor = value;}
|
|
||||||
|
|
||||||
private boolean CounterWeight ;
|
|
||||||
public boolean getCounterWeight() {return CounterWeight;}
|
|
||||||
private void setCounterWeight(boolean value) {CounterWeight = value;}
|
|
||||||
|
|
||||||
private boolean Crane;
|
|
||||||
public boolean getCrane() {return Crane;}
|
|
||||||
private void setCrane(boolean value) {Crane = value;}
|
|
||||||
//шаг перемещения
|
//шаг перемещения
|
||||||
public double Step;
|
public double Step;
|
||||||
|
|
||||||
public void Init(int speed, double weight, boolean counterWeight,boolean crane, Color bodyColor, Color additionalColor)
|
public EntityCrane(int speed, double weight, Color bodyColor)
|
||||||
{
|
{
|
||||||
Speed = speed;
|
Speed = speed;
|
||||||
Weight = weight;
|
Weight = weight;
|
||||||
CounterWeight = counterWeight;
|
|
||||||
Crane = crane;
|
|
||||||
BodyColor = bodyColor;
|
BodyColor = bodyColor;
|
||||||
AdditionalColor = additionalColor;
|
|
||||||
Step = (double)Speed * 100 / Weight;
|
Step = (double)Speed * 100 / Weight;
|
||||||
}
|
}
|
||||||
}
|
}
|
19
src/EntityHoistingCrane.java
Normal file
19
src/EntityHoistingCrane.java
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
import java.awt.*;
|
||||||
|
|
||||||
|
public class EntityHoistingCrane extends EntityCrane
|
||||||
|
{
|
||||||
|
private Color AdditionalColor ;
|
||||||
|
public Color getAdditionalColor() {return AdditionalColor;}
|
||||||
|
private boolean CounterWeight ;
|
||||||
|
public boolean getCounterWeight() {return CounterWeight;}
|
||||||
|
private boolean Crane;
|
||||||
|
public boolean getCrane() {return Crane;}
|
||||||
|
private void setCrane(boolean value) {Crane = value;}
|
||||||
|
public EntityHoistingCrane(int speed, double weight, Color bodyColor, Color additionalColor, boolean counterWeight, boolean crane)
|
||||||
|
{
|
||||||
|
super(speed, weight, bodyColor);
|
||||||
|
AdditionalColor = additionalColor;
|
||||||
|
CounterWeight = counterWeight;
|
||||||
|
Crane = crane;
|
||||||
|
}
|
||||||
|
}
|
@ -1,14 +1,11 @@
|
|||||||
import javax.imageio.ImageIO;
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
import java.awt.image.*;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
class DrawCrane extends JComponent {
|
class DrawCrane extends JComponent {
|
||||||
private DrawingCrane _drawingCrane;
|
private DrawingCrane _drawingCrane;
|
||||||
|
private AbstractStrategy _abstractStrategy;
|
||||||
public void paintComponent(Graphics g)
|
public void paintComponent(Graphics g)
|
||||||
{
|
{
|
||||||
super.paintComponent(g);
|
super.paintComponent(g);
|
||||||
@ -20,15 +17,59 @@ class DrawCrane extends JComponent {
|
|||||||
protected void CreateCraneButton_Click()
|
protected void CreateCraneButton_Click()
|
||||||
{
|
{
|
||||||
Random rnd = new Random();
|
Random rnd = new Random();
|
||||||
_drawingCrane = new DrawingCrane();
|
|
||||||
Color addColor = new Color(rnd.nextInt( 256), rnd.nextInt( 256), rnd.nextInt( 256));
|
|
||||||
Color bodyColor = new Color(rnd.nextInt( 256), rnd.nextInt( 256), rnd.nextInt(256));
|
Color bodyColor = new Color(rnd.nextInt( 256), rnd.nextInt( 256), rnd.nextInt(256));
|
||||||
_drawingCrane.Init(rnd.nextInt(100)+100, rnd.nextInt(2000)+1000,
|
_drawingCrane = new DrawingCrane(rnd.nextInt(100)+100, rnd.nextInt(2000)+1000,
|
||||||
ConvertToBoolean(rnd.nextInt( 2)), ConvertToBoolean(rnd.nextInt( 2)), bodyColor, addColor,
|
bodyColor,
|
||||||
Frame.Width-10, Frame.Height-38, rnd.nextInt( 3)+4);
|
Frame.Width-10, Frame.Height-38, rnd.nextInt( 3),rnd.nextInt( 3));
|
||||||
_drawingCrane.SetPosition(rnd.nextInt( 100), rnd.nextInt(90)+10);
|
_drawingCrane.SetPosition(rnd.nextInt( 100), rnd.nextInt(90)+10);
|
||||||
super.repaint();
|
super.repaint();
|
||||||
}
|
}
|
||||||
|
protected void CreateHoistingCraneButton_Click()
|
||||||
|
{
|
||||||
|
Random rnd = new Random();
|
||||||
|
Color addColor = new Color(rnd.nextInt( 256), rnd.nextInt( 256), rnd.nextInt( 256));
|
||||||
|
Color bodyColor = new Color(rnd.nextInt( 256), rnd.nextInt( 256), rnd.nextInt(256));
|
||||||
|
|
||||||
|
_drawingCrane = new DrawingHoistingCrane(rnd.nextInt(100)+100, rnd.nextInt(2000)+1000,
|
||||||
|
bodyColor,
|
||||||
|
addColor,ConvertToBoolean(rnd.nextInt( 2)), ConvertToBoolean(rnd.nextInt( 2)),Frame.Width-10, Frame.Height-38, rnd.nextInt( 3),rnd.nextInt( 3));
|
||||||
|
_drawingCrane.SetPosition(rnd.nextInt( 100), rnd.nextInt(90)+10);
|
||||||
|
super.repaint();
|
||||||
|
}
|
||||||
|
protected void buttonStep_Click(JComboBox comboBox,int width,int height)
|
||||||
|
{
|
||||||
|
if (_drawingCrane == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (comboBox.isEnabled())
|
||||||
|
{
|
||||||
|
String strategy = String.valueOf(comboBox.getSelectedItem());
|
||||||
|
switch (strategy)
|
||||||
|
{
|
||||||
|
case "0"-> {_abstractStrategy =new MoveToCenter();}
|
||||||
|
case "1"-> {_abstractStrategy =new MoveToBorder();}
|
||||||
|
default -> {_abstractStrategy = null;}
|
||||||
|
};
|
||||||
|
if (_abstractStrategy == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_abstractStrategy.SetData(new DrawningObjectCrane(_drawingCrane), width, height);
|
||||||
|
comboBox.setEnabled(false);
|
||||||
|
}
|
||||||
|
if (_abstractStrategy == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_abstractStrategy.MakeStep();
|
||||||
|
super.repaint();
|
||||||
|
if (_abstractStrategy.GetStatus() == Status.Finish)
|
||||||
|
{
|
||||||
|
comboBox.setEnabled(true);
|
||||||
|
_abstractStrategy = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
protected void ButtonMove_Click(String tag)
|
protected void ButtonMove_Click(String tag)
|
||||||
{
|
{
|
||||||
if (_drawingCrane == null)
|
if (_drawingCrane == null)
|
||||||
@ -55,7 +96,6 @@ public class Frame extends JFrame {
|
|||||||
}
|
}
|
||||||
protected static final int Width = 900;
|
protected static final int Width = 900;
|
||||||
protected static final int Height = 500;
|
protected static final int Height = 500;
|
||||||
|
|
||||||
DrawCrane Crane;
|
DrawCrane Crane;
|
||||||
private void InitUI() {
|
private void InitUI() {
|
||||||
setSize(Width, Height);
|
setSize(Width, Height);
|
||||||
@ -91,6 +131,7 @@ public class Frame extends JFrame {
|
|||||||
down.setLayout(null);
|
down.setLayout(null);
|
||||||
|
|
||||||
JButton CreateButton = new JButton("Создать");
|
JButton CreateButton = new JButton("Создать");
|
||||||
|
JButton CreateHoistingButton = new JButton("Создать улучшенный кран");
|
||||||
right.setIcon(new ImageIcon("src/crane/right.png"));
|
right.setIcon(new ImageIcon("src/crane/right.png"));
|
||||||
left.setIcon(new ImageIcon("src/crane/left.png"));
|
left.setIcon(new ImageIcon("src/crane/left.png"));
|
||||||
down.setIcon(new ImageIcon("src/crane/down.png"));
|
down.setIcon(new ImageIcon("src/crane/down.png"));
|
||||||
@ -115,16 +156,28 @@ public class Frame extends JFrame {
|
|||||||
constraints.gridx = 2;
|
constraints.gridx = 2;
|
||||||
panelMoveButtons.add(right, constraints);
|
panelMoveButtons.add(right, constraints);
|
||||||
|
|
||||||
|
String[] items = {
|
||||||
|
"0",
|
||||||
|
"1"
|
||||||
|
};
|
||||||
|
JComboBox comboBoxStrategy = new JComboBox(items);
|
||||||
|
comboBoxStrategy.setBounds(697,16,182,33);
|
||||||
JPanel panelCreateButton = new JPanel();
|
JPanel panelCreateButton = new JPanel();
|
||||||
panelCreateButton.setLayout(new BorderLayout());
|
panelCreateButton.setLayout(new BorderLayout());
|
||||||
panelCreateButton.setBounds(0, 420, 112, 34);
|
panelCreateButton.setBounds(0, 420, 200, 34);
|
||||||
panelCreateButton.add(CreateButton);
|
panelCreateButton.add(CreateButton);
|
||||||
|
|
||||||
|
JPanel panelCreateHoistingButton = new JPanel();
|
||||||
|
panelCreateHoistingButton.setLayout(new BorderLayout());
|
||||||
|
panelCreateHoistingButton.setBounds(200, 420, 200, 34);
|
||||||
|
panelCreateHoistingButton.add(CreateHoistingButton);
|
||||||
|
JButton buttonStep =new JButton("Шаг");
|
||||||
|
buttonStep.setBounds(798,55,80,35);
|
||||||
|
add(buttonStep);
|
||||||
add(panelMoveButtons);
|
add(panelMoveButtons);
|
||||||
add(panelCreateButton);
|
add(panelCreateButton);
|
||||||
|
add(panelCreateHoistingButton);
|
||||||
|
add(comboBoxStrategy);
|
||||||
setVisible(true);
|
setVisible(true);
|
||||||
CreateButton.addActionListener(new ActionListener() {
|
CreateButton.addActionListener(new ActionListener() {
|
||||||
@Override
|
@Override
|
||||||
@ -132,7 +185,20 @@ public class Frame extends JFrame {
|
|||||||
Crane.CreateCraneButton_Click();
|
Crane.CreateCraneButton_Click();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
CreateHoistingButton.addActionListener(new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
Crane.CreateHoistingCraneButton_Click();
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
buttonStep.addActionListener(new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
Crane.buttonStep_Click(comboBoxStrategy,getWidth(),getHeight());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
public class MoveAL implements ActionListener {
|
public class MoveAL implements ActionListener {
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
7
src/IMoveableObject.java
Normal file
7
src/IMoveableObject.java
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
public interface IMoveableObject
|
||||||
|
{
|
||||||
|
ObjectParameters GetObjectPosition();
|
||||||
|
int GetStep();
|
||||||
|
boolean CheckCanMove(DirectionType direction);
|
||||||
|
void MoveObject(DirectionType direction);
|
||||||
|
}
|
5
src/IWheel.java
Normal file
5
src/IWheel.java
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
import java.awt.*;
|
||||||
|
public interface IWheel {
|
||||||
|
void DrawWheels(int _startPositionX, int _startPositionY, Graphics2D g2d);
|
||||||
|
void SetWheelCounter(int wheelCount);
|
||||||
|
}
|
47
src/MoveToBorder.java
Normal file
47
src/MoveToBorder.java
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
public class MoveToBorder extends AbstractStrategy{
|
||||||
|
@Override
|
||||||
|
protected boolean IsTargetDestinaion()
|
||||||
|
{
|
||||||
|
var objParams = GetObjectParameters();
|
||||||
|
if (objParams == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return objParams.ObjectMiddleHorizontal() <= FieldWidth && objParams.ObjectMiddleHorizontal() + GetStep() >= FieldWidth &&
|
||||||
|
objParams.ObjectMiddleHorizontal() <= FieldHeight &&
|
||||||
|
objParams.ObjectMiddleHorizontal() + GetStep() >= FieldHeight;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
protected void MoveToTarget()
|
||||||
|
{
|
||||||
|
var objParams = GetObjectParameters();
|
||||||
|
if (objParams == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var diffX = objParams.RightBorder() - FieldWidth;
|
||||||
|
if (Math.abs(diffX) > GetStep())
|
||||||
|
{
|
||||||
|
if (diffX > 0)
|
||||||
|
{
|
||||||
|
MoveLeft();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MoveRight();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var diffY = objParams.DownBorder() - FieldHeight;
|
||||||
|
if (Math.abs(diffY) > GetStep())
|
||||||
|
{
|
||||||
|
if (diffY > 0)
|
||||||
|
{
|
||||||
|
MoveUp();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MoveDown();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
45
src/MoveToCenter.java
Normal file
45
src/MoveToCenter.java
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
public class MoveToCenter extends AbstractStrategy{
|
||||||
|
@Override
|
||||||
|
protected boolean IsTargetDestinaion()
|
||||||
|
{
|
||||||
|
var objParams = GetObjectParameters();
|
||||||
|
if (objParams == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return objParams.ObjectMiddleHorizontal() <= FieldWidth / 2 && objParams.ObjectMiddleHorizontal() + GetStep() >= FieldWidth / 2 && objParams.ObjectMiddleVertical() <= FieldHeight / 2 && objParams.ObjectMiddleVertical() + GetStep() >= FieldHeight / 2;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
protected void MoveToTarget()
|
||||||
|
{
|
||||||
|
var objParams = GetObjectParameters();
|
||||||
|
if (objParams == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var diffX = objParams.ObjectMiddleHorizontal() - FieldWidth / 2;
|
||||||
|
if (Math.abs(diffX) > GetStep())
|
||||||
|
{
|
||||||
|
if (diffX > 0)
|
||||||
|
{
|
||||||
|
MoveLeft();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MoveRight();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var diffY = objParams.ObjectMiddleVertical() - FieldHeight / 2;
|
||||||
|
if (Math.abs(diffY) > GetStep())
|
||||||
|
{
|
||||||
|
if (diffY > 0)
|
||||||
|
{
|
||||||
|
MoveUp();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MoveDown();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
25
src/ObjectParameters.java
Normal file
25
src/ObjectParameters.java
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
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)
|
||||||
|
{
|
||||||
|
_x = x;
|
||||||
|
_y = y;
|
||||||
|
_width = width;
|
||||||
|
_height = height;
|
||||||
|
}
|
||||||
|
}
|
5
src/Status.java
Normal file
5
src/Status.java
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
public enum Status {
|
||||||
|
NotInit,
|
||||||
|
InProgress,
|
||||||
|
Finish
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user