Base
This commit is contained in:
parent
2b2b700c59
commit
567a87a848
122
laba1Loco/AbstractStrategy.java
Normal file
122
laba1Loco/AbstractStrategy.java
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
package laba1Loco;
|
||||||
|
|
||||||
|
public abstract class AbstractStrategy {
|
||||||
|
/// <summary>
|
||||||
|
/// Перемещаемый объект
|
||||||
|
/// </summary>
|
||||||
|
private IMoveableObject _moveableObject;
|
||||||
|
/// <summary>
|
||||||
|
/// Статус перемещения
|
||||||
|
/// </summary>
|
||||||
|
private Status _state = Status.NotInit;
|
||||||
|
/// <summary>
|
||||||
|
/// Ширина поля
|
||||||
|
/// </summary>
|
||||||
|
protected int FieldWidth;
|
||||||
|
/// <summary>
|
||||||
|
/// Высота поля
|
||||||
|
/// </summary>
|
||||||
|
protected int FieldHeight;
|
||||||
|
/// <summary>
|
||||||
|
/// Статус перемещения
|
||||||
|
/// </summary>
|
||||||
|
public Status GetStatus() { return _state; }
|
||||||
|
/// <summary>
|
||||||
|
/// Установка данных
|
||||||
|
/// </summary>
|
||||||
|
/// <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;
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Шаг перемещения
|
||||||
|
/// </summary>
|
||||||
|
public void MakeStep()
|
||||||
|
{
|
||||||
|
if (_state != Status.InProgress)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (IsTargetDestinaion())
|
||||||
|
{
|
||||||
|
_state = Status.Finish;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
MoveToTarget();
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Перемещение влево
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>Результат перемещения (true - удалось переместиться, false - неудача)</returns>
|
||||||
|
protected boolean MoveLeft() { return MoveTo(Direction.Left);}
|
||||||
|
/// <summary>
|
||||||
|
/// Перемещение вправо
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>Результат перемещения (true - удалось переместиться,false - неудача)</returns>
|
||||||
|
protected boolean MoveRight() { return MoveTo(Direction.Right);}
|
||||||
|
/// <summary>
|
||||||
|
/// Перемещение вверх
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>Результат перемещения (true - удалось переместиться,false - неудача)</returns>
|
||||||
|
protected boolean MoveUp() { return MoveTo(Direction.Up);}
|
||||||
|
/// <summary>
|
||||||
|
/// Перемещение вниз
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>Результат перемещения (true - удалось переместиться,false - неудача)</returns>
|
||||||
|
protected boolean MoveDown() { return MoveTo(Direction.Down);}
|
||||||
|
/// <summary>
|
||||||
|
/// Параметры объекта
|
||||||
|
/// </summary>
|
||||||
|
protected ObjectParameters GetObjectParameters() { return _moveableObject.GetObjectPosition(); }
|
||||||
|
/// <summary>
|
||||||
|
/// Шаг объекта
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
protected int GetStep()
|
||||||
|
{
|
||||||
|
if (_state != Status.InProgress)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return _moveableObject.GetStep();
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Перемещение к цели
|
||||||
|
/// </summary>
|
||||||
|
protected abstract void MoveToTarget();
|
||||||
|
/// <summary>
|
||||||
|
/// Достигнута ли цель
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
protected abstract boolean IsTargetDestinaion();
|
||||||
|
/// <summary>
|
||||||
|
/// Попытка перемещения в требуемом направлении
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="Direction">Направление</param>
|
||||||
|
/// <returns>Результат попытки (true - удалось переместиться, false - неудача)</returns>
|
||||||
|
private boolean MoveTo(Direction Direction)
|
||||||
|
{
|
||||||
|
if (_state != Status.InProgress)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (_moveableObject.CheckCanMove(Direction))
|
||||||
|
{
|
||||||
|
_moveableObject.MoveObject(Direction);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
@ -6,38 +6,8 @@ import javax.swing.*;
|
|||||||
import javax.swing.Timer;
|
import javax.swing.Timer;
|
||||||
import java.awt.event.*;
|
import java.awt.event.*;
|
||||||
|
|
||||||
public class DrawingLoco{
|
public class DrawingLoco extends DrawingTrain{
|
||||||
|
|
||||||
private WheelDrawing wheelDrawing;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Класс-сущность
|
|
||||||
/// </summary>
|
|
||||||
public EntityLoco _EntityLoco;
|
|
||||||
/// <summary>
|
|
||||||
/// Ширина окна
|
|
||||||
/// </summary>
|
|
||||||
private int _pictureWidth;
|
|
||||||
/// <summary>
|
|
||||||
/// Высота окна
|
|
||||||
/// </summary>
|
|
||||||
private int _pictureHeight;
|
|
||||||
/// <summary>
|
|
||||||
/// Левая координата прорисовки локомотива
|
|
||||||
/// </summary>
|
|
||||||
private int _startPosX;
|
|
||||||
/// <summary>
|
|
||||||
/// Верхняя кооридната прорисовки локомотива
|
|
||||||
/// </summary>
|
|
||||||
private int _startPosY;
|
|
||||||
/// <summary>
|
|
||||||
/// Ширина прорисовки локомотива
|
|
||||||
/// </summary>
|
|
||||||
private int _locoWidth = 83;
|
|
||||||
/// <summary>
|
|
||||||
/// Высота прорисовки локомотива
|
|
||||||
/// </summary>
|
|
||||||
private int _locoHeight = 41;
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Инициализация свойств
|
/// Инициализация свойств
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -50,20 +20,11 @@ public class DrawingLoco{
|
|||||||
/// <param name="locoLine">Признак наличия паровозной полосы</param>
|
/// <param name="locoLine">Признак наличия паровозной полосы</param>
|
||||||
/// <param name="width">Ширина картинки</param>
|
/// <param name="width">Ширина картинки</param>
|
||||||
/// <param name="height">Высота картинки</param>
|
/// <param name="height">Высота картинки</param>
|
||||||
/// <returns>true - объект создан, false - проверка не пройдена, нельзя создать объект в этих размерах</returns>
|
public DrawingLoco(int speed, double weight, Color bodyColor, int _numWheel, Color additionalColor, boolean tube, boolean fuelTank, boolean locoLine, int width, int height)
|
||||||
public boolean Init(int speed, double weight, Color bodyColor, Color additionalColor, boolean tube, boolean fuelTank, boolean locoLine, int numWheel, int width, int height)
|
|
||||||
{
|
{
|
||||||
_pictureWidth = width;
|
super(speed, weight, bodyColor, _numWheel, width, height);
|
||||||
_pictureHeight = height;
|
EntityTrain = new EntityLoco(speed, weight, bodyColor, _numWheel, additionalColor, tube, fuelTank, locoLine);
|
||||||
if (_pictureHeight < _locoHeight || _pictureWidth < _locoWidth)
|
_locoWidth = ((EntityLoco)EntityTrain).FuelTank ? 169 : 83;
|
||||||
return false;
|
|
||||||
_EntityLoco = new EntityLoco();
|
|
||||||
_EntityLoco.Init(speed, weight, bodyColor, additionalColor, tube, fuelTank, locoLine, numWheel);
|
|
||||||
if (fuelTank)
|
|
||||||
_locoWidth = 169;
|
|
||||||
wheelDrawing = new WheelDrawing();
|
|
||||||
wheelDrawing.setNumWheel(numWheel);
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Установка позиции
|
/// Установка позиции
|
||||||
@ -76,102 +37,24 @@ public class DrawingLoco{
|
|||||||
_startPosY = Math.min(y, _pictureHeight-_locoHeight);
|
_startPosY = Math.min(y, _pictureHeight-_locoHeight);
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Изменение направления перемещения
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="direction">Направление</param>
|
|
||||||
public void MoveTransport(Direction direction)
|
|
||||||
{
|
|
||||||
if (_EntityLoco == null){
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
switch (direction)
|
|
||||||
{
|
|
||||||
//влево
|
|
||||||
case Left:
|
|
||||||
if (_startPosX - _EntityLoco.Step > 0)
|
|
||||||
{
|
|
||||||
_startPosX -= (int)_EntityLoco.Step;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
//вверх
|
|
||||||
case Up:
|
|
||||||
if (_startPosY - _EntityLoco.Step > 0)
|
|
||||||
{
|
|
||||||
_startPosY -= (int)_EntityLoco.Step;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
// вправо
|
|
||||||
case Right:
|
|
||||||
if (_startPosX + _locoWidth + _EntityLoco.Step < _pictureWidth)
|
|
||||||
{
|
|
||||||
_startPosX += (int)_EntityLoco.Step;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
//вниз
|
|
||||||
case Down:
|
|
||||||
if (_startPosY + _locoHeight + _EntityLoco.Step < _pictureHeight)
|
|
||||||
{
|
|
||||||
_startPosY += (int)_EntityLoco.Step;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/// <summary>
|
|
||||||
/// Прорисовка объекта
|
/// Прорисовка объекта
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="g"></param>
|
/// <param name="g"></param>
|
||||||
public void DrawTransport(Graphics2D g2d)
|
public void DrawTransport(Graphics2D g2d)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (_EntityLoco == null)
|
if (EntityTrain == null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// body
|
super.DrawTransport(g2d);
|
||||||
g2d.setColor(_EntityLoco.BodyColor);
|
|
||||||
g2d.drawPolyline(new int[]{
|
|
||||||
_startPosX + 8, _startPosX + 79, _startPosX + 79, _startPosX + 4, _startPosX + 4, _startPosX + 8,
|
|
||||||
}, new int[]{
|
|
||||||
_startPosY+10, _startPosY+10, _startPosY+32, _startPosY+32, _startPosY+20, _startPosY+10
|
|
||||||
}, 6);
|
|
||||||
g2d.drawPolyline(new int[]{
|
|
||||||
_startPosX + 4, _startPosX + 29, _startPosX + 29, _startPosX + 37, _startPosX + 37, _startPosX + 79, _startPosX + 37, _startPosX + 37, _startPosX + 29, _startPosX + 29,
|
|
||||||
}, new int[]{
|
|
||||||
_startPosY+21, _startPosY+21, _startPosY+14, _startPosY+14, _startPosY+21, _startPosY+21, _startPosY+21, _startPosY+29, _startPosY+29, _startPosY+21
|
|
||||||
}, 10);
|
|
||||||
|
|
||||||
// trucks
|
|
||||||
g2d.fillPolygon(new int[]{
|
|
||||||
_startPosX + 0,_startPosX + 5,_startPosX + 32,_startPosX + 36,
|
|
||||||
}, new int[]{
|
|
||||||
_startPosY+37,_startPosY+33,_startPosY+33,_startPosY+37
|
|
||||||
}, 4);
|
|
||||||
g2d.fillPolygon(new int[]{
|
|
||||||
_startPosX + 44,_startPosX + 49,_startPosX + 76,_startPosX + 80,
|
|
||||||
}, new int[]{
|
|
||||||
_startPosY+37,_startPosY+33,_startPosY+33,_startPosY+37
|
|
||||||
}, 4);
|
|
||||||
|
|
||||||
//back
|
|
||||||
g2d.fillPolygon(new int[]{
|
|
||||||
_startPosX + 79,_startPosX + 82,_startPosX + 82,_startPosX + 79,
|
|
||||||
}, new int[]{
|
|
||||||
_startPosY+12,_startPosY+12,_startPosY+30,_startPosY+30
|
|
||||||
}, 4);
|
|
||||||
|
|
||||||
|
|
||||||
//windows
|
|
||||||
g2d.setColor(Color.BLUE);
|
|
||||||
g2d.drawRect(_startPosX + 10, _startPosY + 12, 6, 7);
|
|
||||||
g2d.drawRect(_startPosX + 19, _startPosY + 12, 6, 7);
|
|
||||||
g2d.drawRect(_startPosX + 72, _startPosY + 12, 6, 7);
|
|
||||||
|
|
||||||
//wheels
|
//wheels
|
||||||
wheelDrawing.Draw(_startPosX, _startPosY, _EntityLoco.FuelTank, _EntityLoco.BodyColor, g2d);
|
wheelDrawing.Draw(_startPosX, _startPosY, ((EntityLoco)EntityTrain).FuelTank, EntityTrain.BodyColor, g2d);
|
||||||
|
|
||||||
g2d.setColor(_EntityLoco.AdditionalColor);
|
g2d.setColor(((EntityLoco)EntityTrain).AdditionalColor);
|
||||||
if (_EntityLoco.Tube)
|
if (((EntityLoco)EntityTrain).Tube)
|
||||||
{
|
{
|
||||||
g2d.drawPolyline(new int[] {
|
g2d.drawPolyline(new int[] {
|
||||||
_startPosX + 40,_startPosX + 40,_startPosX + 45,_startPosX + 41,_startPosX + 41,_startPosX + 44,_startPosX + 44,_startPosX + 45,_startPosX + 45,
|
_startPosX + 40,_startPosX + 40,_startPosX + 45,_startPosX + 41,_startPosX + 41,_startPosX + 44,_startPosX + 44,_startPosX + 45,_startPosX + 45,
|
||||||
@ -179,7 +62,7 @@ _startPosX + 40,_startPosX + 40,_startPosX + 45,_startPosX + 41,_startPosX + 41,
|
|||||||
_startPosY+9,_startPosY+3,_startPosY+3,_startPosY+3,_startPosY,_startPosY,_startPosY+3,_startPosY+3,_startPosY+9,
|
_startPosY+9,_startPosY+3,_startPosY+3,_startPosY+3,_startPosY,_startPosY,_startPosY+3,_startPosY+3,_startPosY+9,
|
||||||
},9);
|
},9);
|
||||||
}
|
}
|
||||||
if (_EntityLoco.LocoLine)
|
if (((EntityLoco)EntityTrain).LocoLine)
|
||||||
{
|
{
|
||||||
g2d.drawPolyline(new int[] {
|
g2d.drawPolyline(new int[] {
|
||||||
_startPosX + 60,_startPosX + 38,
|
_startPosX + 60,_startPosX + 38,
|
||||||
@ -197,10 +80,10 @@ _startPosY+9,_startPosY+3,_startPosY+3,_startPosY+3,_startPosY,_startPosY,_start
|
|||||||
_startPosY+10,_startPosY+32
|
_startPosY+10,_startPosY+32
|
||||||
},2);
|
},2);
|
||||||
}
|
}
|
||||||
if (_EntityLoco.FuelTank)
|
if (((EntityLoco)EntityTrain).FuelTank)
|
||||||
{
|
{
|
||||||
// body
|
// body
|
||||||
g2d.setColor(_EntityLoco.BodyColor);
|
g2d.setColor(EntityTrain.BodyColor);
|
||||||
g2d.drawPolyline(new int[]{
|
g2d.drawPolyline(new int[]{
|
||||||
_startPosX + 89, _startPosX + 164, _startPosX + 164, _startPosX + 89, _startPosX + 89,
|
_startPosX + 89, _startPosX + 164, _startPosX + 164, _startPosX + 89, _startPosX + 89,
|
||||||
}, new int[]{
|
}, new int[]{
|
||||||
|
193
laba1Loco/DrawingTrain.java
Normal file
193
laba1Loco/DrawingTrain.java
Normal file
@ -0,0 +1,193 @@
|
|||||||
|
package laba1Loco;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.util.*;
|
||||||
|
import javax.swing.*;
|
||||||
|
import javax.swing.Timer;
|
||||||
|
import java.awt.event.*;
|
||||||
|
|
||||||
|
public class DrawingTrain {
|
||||||
|
protected WheelDrawing wheelDrawing;
|
||||||
|
/// <summary>
|
||||||
|
/// Класс-сущность
|
||||||
|
/// </summary>
|
||||||
|
public EntityTrain EntityTrain;
|
||||||
|
/// <summary>
|
||||||
|
/// Ширина окна
|
||||||
|
/// </summary>
|
||||||
|
protected int _pictureWidth;
|
||||||
|
/// <summary>
|
||||||
|
/// Высота окна
|
||||||
|
/// </summary>
|
||||||
|
protected int _pictureHeight;
|
||||||
|
/// <summary>
|
||||||
|
/// Левая координата прорисовки локомотива
|
||||||
|
/// </summary>
|
||||||
|
protected int _startPosX;
|
||||||
|
/// <summary>
|
||||||
|
/// Верхняя кооридната прорисовки локомотива
|
||||||
|
/// </summary>
|
||||||
|
protected int _startPosY;
|
||||||
|
/// <summary>
|
||||||
|
/// Ширина прорисовки локомотива
|
||||||
|
/// </summary>
|
||||||
|
protected int _locoWidth = 83;
|
||||||
|
/// <summary>
|
||||||
|
/// Высота прорисовки локомотива
|
||||||
|
/// </summary>
|
||||||
|
protected int _locoHeight = 41;
|
||||||
|
/// <summary>
|
||||||
|
/// Инициализация свойств
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="speed">Скорость</param>
|
||||||
|
/// <param name="weight">Вес</param>
|
||||||
|
/// <param name="bodyColor">Цвет кузова</param>
|
||||||
|
/// <param name="width">Ширина картинки</param>
|
||||||
|
/// <param name="height">Высота картинки</param>
|
||||||
|
public DrawingTrain(int speed, double weight, Color bodyColor, int _numWheel, int width, int height)
|
||||||
|
{
|
||||||
|
_pictureWidth = width;
|
||||||
|
_pictureHeight = height;
|
||||||
|
if (_pictureHeight < _locoHeight || _pictureWidth < _locoWidth)
|
||||||
|
return;
|
||||||
|
EntityTrain = new EntityTrain(speed, weight, bodyColor, _numWheel);
|
||||||
|
wheelDrawing = new WheelDrawing();
|
||||||
|
wheelDrawing.setNumWheel(_numWheel);
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Установка позиции
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="x">Координата X</param>
|
||||||
|
/// <param name="y">Координата Y</param>
|
||||||
|
public void SetPosition(int x, int y)
|
||||||
|
{
|
||||||
|
_startPosX = Math.min(x, _pictureWidth - _locoWidth);
|
||||||
|
_startPosY = Math.min(y, _pictureHeight - _locoHeight);
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Координата X объекта
|
||||||
|
/// </summary>
|
||||||
|
public int GetPosX (){return _startPosX;}
|
||||||
|
/// <summary>
|
||||||
|
/// Координата Y объекта
|
||||||
|
/// </summary>
|
||||||
|
public int GetPosY (){return _startPosY;}
|
||||||
|
/// <summary>
|
||||||
|
/// Ширина объекта
|
||||||
|
/// </summary>
|
||||||
|
public int GetWidth (){return _locoWidth;}
|
||||||
|
/// <summary>
|
||||||
|
/// Высота объекта
|
||||||
|
/// </summary>
|
||||||
|
public int GetHeight (){return _locoHeight;}
|
||||||
|
/// <summary>
|
||||||
|
/// Проверка, что объект может переместится по указанному направлению
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="direction">Направление</param>
|
||||||
|
/// <returns>true - можно переместится по указанному направлению</returns>
|
||||||
|
public boolean CanMove(Direction direction)
|
||||||
|
{
|
||||||
|
if (EntityTrain == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
switch (direction)
|
||||||
|
{
|
||||||
|
case Left:
|
||||||
|
return _startPosX - EntityTrain.Step > 0;
|
||||||
|
case Right:
|
||||||
|
return _startPosX + _locoWidth + EntityTrain.Step < _pictureWidth;
|
||||||
|
case Up:
|
||||||
|
return _startPosY - EntityTrain.Step > 0;
|
||||||
|
case Down:
|
||||||
|
return _startPosY + _locoHeight + EntityTrain.Step < _pictureHeight;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Изменение направления перемещения
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="direction">Направление</param>
|
||||||
|
public void MoveTransport(Direction direction)
|
||||||
|
{
|
||||||
|
if (!CanMove(direction) || EntityTrain == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
switch (direction)
|
||||||
|
{
|
||||||
|
//влево
|
||||||
|
case Left:
|
||||||
|
_startPosX -= (int)EntityTrain.Step;
|
||||||
|
break;
|
||||||
|
//вверх
|
||||||
|
case Up:
|
||||||
|
_startPosY -= (int)EntityTrain.Step;
|
||||||
|
break;
|
||||||
|
// вправо
|
||||||
|
case Right:
|
||||||
|
_startPosX += (int)EntityTrain.Step;
|
||||||
|
break;
|
||||||
|
//вниз
|
||||||
|
case Down:
|
||||||
|
_startPosY += (int)EntityTrain.Step;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Прорисовка объекта
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="g"></param>
|
||||||
|
public void DrawTransport(Graphics2D g2d)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (EntityTrain == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// body
|
||||||
|
g2d.setColor(EntityTrain.BodyColor);
|
||||||
|
g2d.drawPolyline(new int[]{
|
||||||
|
_startPosX + 8, _startPosX + 79, _startPosX + 79, _startPosX + 4, _startPosX + 4, _startPosX + 8,
|
||||||
|
}, new int[]{
|
||||||
|
_startPosY+10, _startPosY+10, _startPosY+32, _startPosY+32, _startPosY+20, _startPosY+10
|
||||||
|
}, 6);
|
||||||
|
g2d.drawPolyline(new int[]{
|
||||||
|
_startPosX + 4, _startPosX + 29, _startPosX + 29, _startPosX + 37, _startPosX + 37, _startPosX + 79, _startPosX + 37, _startPosX + 37, _startPosX + 29, _startPosX + 29,
|
||||||
|
}, new int[]{
|
||||||
|
_startPosY+21, _startPosY+21, _startPosY+14, _startPosY+14, _startPosY+21, _startPosY+21, _startPosY+21, _startPosY+29, _startPosY+29, _startPosY+21
|
||||||
|
}, 10);
|
||||||
|
|
||||||
|
// trucks
|
||||||
|
g2d.fillPolygon(new int[]{
|
||||||
|
_startPosX + 0,_startPosX + 5,_startPosX + 32,_startPosX + 36,
|
||||||
|
}, new int[]{
|
||||||
|
_startPosY+37,_startPosY+33,_startPosY+33,_startPosY+37
|
||||||
|
}, 4);
|
||||||
|
g2d.fillPolygon(new int[]{
|
||||||
|
_startPosX + 44,_startPosX + 49,_startPosX + 76,_startPosX + 80,
|
||||||
|
}, new int[]{
|
||||||
|
_startPosY+37,_startPosY+33,_startPosY+33,_startPosY+37
|
||||||
|
}, 4);
|
||||||
|
|
||||||
|
//back
|
||||||
|
g2d.fillPolygon(new int[]{
|
||||||
|
_startPosX + 79,_startPosX + 82,_startPosX + 82,_startPosX + 79,
|
||||||
|
}, new int[]{
|
||||||
|
_startPosY+12,_startPosY+12,_startPosY+30,_startPosY+30
|
||||||
|
}, 4);
|
||||||
|
|
||||||
|
|
||||||
|
//windows
|
||||||
|
g2d.setColor(Color.BLUE);
|
||||||
|
g2d.drawRect(_startPosX + 10, _startPosY + 12, 6, 7);
|
||||||
|
g2d.drawRect(_startPosX + 19, _startPosY + 12, 6, 7);
|
||||||
|
g2d.drawRect(_startPosX + 72, _startPosY + 12, 6, 7);
|
||||||
|
|
||||||
|
//wheels
|
||||||
|
wheelDrawing.Draw(_startPosX, _startPosY, false, null, g2d);
|
||||||
|
}
|
||||||
|
}
|
22
laba1Loco/DrawningObjectTrain.java
Normal file
22
laba1Loco/DrawningObjectTrain.java
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
package laba1Loco;
|
||||||
|
|
||||||
|
public class DrawningObjectTrain implements IMoveableObject {
|
||||||
|
private DrawingTrain _drawingTrain = null;
|
||||||
|
public DrawningObjectTrain(DrawingTrain drawingTrain)
|
||||||
|
{
|
||||||
|
_drawingTrain = drawingTrain;
|
||||||
|
}
|
||||||
|
public ObjectParameters GetObjectPosition(){
|
||||||
|
if (_drawingTrain == null || _drawingTrain.EntityTrain ==
|
||||||
|
null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return new ObjectParameters(_drawingTrain.GetPosX(),
|
||||||
|
_drawingTrain.GetPosY(), _drawingTrain.GetWidth(), _drawingTrain.GetHeight());
|
||||||
|
}
|
||||||
|
public int GetStep(){ return (int)_drawingTrain.EntityTrain.Step; }
|
||||||
|
public boolean CheckCanMove(Direction direction) { return _drawingTrain.CanMove(direction);}
|
||||||
|
public void MoveObject(Direction direction) { _drawingTrain.MoveTransport(direction); }
|
||||||
|
|
||||||
|
}
|
@ -6,29 +6,13 @@ import javax.swing.*;
|
|||||||
import javax.swing.Timer;
|
import javax.swing.Timer;
|
||||||
import java.awt.event.*;
|
import java.awt.event.*;
|
||||||
|
|
||||||
public class EntityLoco{
|
public class EntityLoco extends EntityTrain{
|
||||||
/// <summary>
|
|
||||||
/// Скорость
|
|
||||||
/// </summary>
|
|
||||||
public int Speed;
|
|
||||||
/// <summary>
|
|
||||||
/// Вес
|
|
||||||
/// </summary>
|
|
||||||
public double Weight;
|
|
||||||
/// <summary>
|
|
||||||
/// Основной цвет
|
|
||||||
/// </summary>
|
|
||||||
public Color BodyColor;
|
|
||||||
/// <summary>
|
|
||||||
/// Дополнительный цвет (для опциональных элементов)
|
|
||||||
/// </summary>
|
|
||||||
public Color AdditionalColor;
|
public Color AdditionalColor;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Признак (опция) наличия трубы
|
/// Признак (опция) наличия трубы
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public boolean Tube;
|
public boolean Tube;
|
||||||
/// <summary>
|
/// Признак (опция) наличия топливного бака
|
||||||
/// Признак (опция) наличия бака
|
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public boolean FuelTank;
|
public boolean FuelTank;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -36,15 +20,7 @@ public class EntityLoco{
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public boolean LocoLine;
|
public boolean LocoLine;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Шаг перемещения автомобиля
|
/// Инициализация полей объекта-класса Локомотива
|
||||||
/// </summary>
|
|
||||||
public double Step;
|
|
||||||
/// <summary>
|
|
||||||
/// количество колёс [2;4]
|
|
||||||
/// </summary>
|
|
||||||
public int numWheel;
|
|
||||||
/// <summary>
|
|
||||||
/// Инициализация полей объекта-класса спортивного автомобиля
|
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="speed">Скорость</param>
|
/// <param name="speed">Скорость</param>
|
||||||
/// <param name="weight">Вес автомобиля</param>
|
/// <param name="weight">Вес автомобиля</param>
|
||||||
@ -52,18 +28,13 @@ public class EntityLoco{
|
|||||||
/// <param name="additionalColor">Дополнительный цвет</param>
|
/// <param name="additionalColor">Дополнительный цвет</param>
|
||||||
/// <param name="tube">Признак наличия трубы</param>
|
/// <param name="tube">Признак наличия трубы</param>
|
||||||
/// <param name="fuelTank">Признак наличия бака</param>
|
/// <param name="fuelTank">Признак наличия бака</param>
|
||||||
/// <param name="locoLine">Признак паровозной гоночной полосы</param>
|
/// <param name="locoLine">Признак наличия паровозной полосы</param>
|
||||||
public void Init(int speed, double weight, Color bodyColor, Color
|
public EntityLoco(int speed, double weight, Color bodyColor, int _numWheel, Color additionalColor, boolean tube, boolean fuelTank, boolean locoLine)
|
||||||
additionalColor, boolean tube, boolean fuelTank, boolean locoLine, int _numWheel)
|
|
||||||
{
|
{
|
||||||
numWheel = _numWheel;
|
super(speed, weight, bodyColor, _numWheel);
|
||||||
Speed = speed;
|
|
||||||
Weight = weight;
|
|
||||||
BodyColor = bodyColor;
|
|
||||||
AdditionalColor = additionalColor;
|
AdditionalColor = additionalColor;
|
||||||
Tube = tube;
|
Tube = tube;
|
||||||
FuelTank = fuelTank;
|
FuelTank = fuelTank;
|
||||||
LocoLine = locoLine;
|
LocoLine = locoLine;
|
||||||
Step = (double)Speed * 100 / Weight;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -24,16 +24,21 @@ public class EntityTrain {
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public double Step;
|
public double Step;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
/// количество колёс [2;4]
|
||||||
|
/// </summary>
|
||||||
|
public int numWheel;
|
||||||
|
/// <summary>
|
||||||
/// Инициализация полей объекта-класса Локомотива
|
/// Инициализация полей объекта-класса Локомотива
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="speed">Скорость</param>
|
/// <param name="speed">Скорость</param>
|
||||||
/// <param name="weight">Вес автомобиля</param>
|
/// <param name="weight">Вес автомобиля</param>
|
||||||
/// <param name="bodyColor">Основной цвет</param>
|
/// <param name="bodyColor">Основной цвет</param>
|
||||||
public EntityTrain(int speed, double weight, Color bodyColor)
|
public EntityTrain(int speed, double weight, Color bodyColor, int _numWheel)
|
||||||
{
|
{
|
||||||
Speed = speed;
|
Speed = speed;
|
||||||
Weight = weight;
|
Weight = weight;
|
||||||
BodyColor = bodyColor;
|
BodyColor = bodyColor;
|
||||||
|
numWheel = _numWheel;
|
||||||
Step = (double)Speed * 100 / Weight;
|
Step = (double)Speed * 100 / Weight;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,8 +7,11 @@ import javax.swing.Timer;
|
|||||||
import java.awt.event.*;
|
import java.awt.event.*;
|
||||||
|
|
||||||
public class FormTrain{
|
public class FormTrain{
|
||||||
private DrawingLoco _drawingLoco;
|
private DrawingTrain _drawingTrain;
|
||||||
|
private AbstractStrategy abstractStrategy;
|
||||||
Canvas canv;
|
Canvas canv;
|
||||||
|
static int pictureBoxWidth = 980;
|
||||||
|
static int pictureBoxHeight = 560;
|
||||||
|
|
||||||
public void Draw(){
|
public void Draw(){
|
||||||
canv.repaint();
|
canv.repaint();
|
||||||
@ -17,6 +20,14 @@ public class FormTrain{
|
|||||||
public FormTrain(){
|
public FormTrain(){
|
||||||
JFrame w=new JFrame ("Loco");
|
JFrame w=new JFrame ("Loco");
|
||||||
JButton buttonCreate = new JButton("create");
|
JButton buttonCreate = new JButton("create");
|
||||||
|
JButton buttonCreateLocomotive = new JButton("createLocomotive");
|
||||||
|
JButton buttonStrategysStep = new JButton("strategys step");
|
||||||
|
JComboBox comboBoxStrategy = new JComboBox(
|
||||||
|
new String[]{
|
||||||
|
"Элемент списка 1",
|
||||||
|
"Элемент списка 2",
|
||||||
|
"Элемент списка 3"
|
||||||
|
});
|
||||||
JButton up = new JButton();
|
JButton up = new JButton();
|
||||||
up.setBorderPainted(false);
|
up.setBorderPainted(false);
|
||||||
up.setFocusPainted(false);
|
up.setFocusPainted(false);
|
||||||
@ -41,20 +52,86 @@ public class FormTrain{
|
|||||||
right.setContentAreaFilled(false);
|
right.setContentAreaFilled(false);
|
||||||
right.setName("right");
|
right.setName("right");
|
||||||
right.setIcon(new ImageIcon("D:\\Coffee\\PIbd-21_Kouvshinoff_T._A._WarmlyLocomotive._Harder\\laba1Loco\\images\\arowR340x259.png"));
|
right.setIcon(new ImageIcon("D:\\Coffee\\PIbd-21_Kouvshinoff_T._A._WarmlyLocomotive._Harder\\laba1Loco\\images\\arowR340x259.png"));
|
||||||
|
buttonStrategysStep.addActionListener(
|
||||||
|
new ActionListener() {
|
||||||
|
public void actionPerformed(ActionEvent e){
|
||||||
|
if (_drawingTrain == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (comboBoxStrategy.isEnabled())
|
||||||
|
{
|
||||||
|
switch (comboBoxStrategy.getSelectedIndex())
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
abstractStrategy = new MoveToCenter();
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
abstractStrategy = new MoveToBorder();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
abstractStrategy = null;
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
if (abstractStrategy == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
abstractStrategy.SetData(new
|
||||||
|
DrawningObjectTrain(_drawingTrain), pictureBoxWidth,
|
||||||
|
pictureBoxHeight);
|
||||||
|
comboBoxStrategy.setEnabled(false);
|
||||||
|
}
|
||||||
|
if (abstractStrategy == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
abstractStrategy.MakeStep();
|
||||||
|
Draw();
|
||||||
|
if (abstractStrategy.GetStatus() == Status.Finish)
|
||||||
|
{
|
||||||
|
comboBoxStrategy.setEnabled(true);
|
||||||
|
abstractStrategy = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
buttonCreateLocomotive.addActionListener(
|
||||||
|
new ActionListener() {
|
||||||
|
public void actionPerformed(ActionEvent e){
|
||||||
|
System.out.println(e.getActionCommand());
|
||||||
|
Random random = new Random();
|
||||||
|
_drawingTrain = new DrawingLoco(
|
||||||
|
random.nextInt(100, 300),
|
||||||
|
random.nextInt(1000, 3000),
|
||||||
|
new Color(random.nextInt(0, 256), random.nextInt(0, 256), random.nextInt(0, 256)),
|
||||||
|
random.nextInt(2, 5),
|
||||||
|
new Color(random.nextInt(0, 256), random.nextInt(0, 256), random.nextInt(0, 256)),
|
||||||
|
random.nextInt(0, 2) == 1,
|
||||||
|
random.nextInt(0, 2) == 1,
|
||||||
|
random.nextInt(0, 2) == 1,
|
||||||
|
pictureBoxWidth,
|
||||||
|
pictureBoxHeight);
|
||||||
|
_drawingTrain.SetPosition(random.nextInt(10, 100), random.nextInt(10, 100));
|
||||||
|
canv._drawingTrain = _drawingTrain;
|
||||||
|
Draw();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
buttonCreate.addActionListener(
|
buttonCreate.addActionListener(
|
||||||
new ActionListener() {
|
new ActionListener() {
|
||||||
public void actionPerformed(ActionEvent e){
|
public void actionPerformed(ActionEvent e){
|
||||||
System.out.println(e.getActionCommand());
|
System.out.println(e.getActionCommand());
|
||||||
Random random = new Random();
|
Random random = new Random();
|
||||||
_drawingLoco = new DrawingLoco();
|
_drawingTrain = new DrawingTrain(
|
||||||
_drawingLoco.Init(random.nextInt(100, 300), random.nextInt(1000, 3000),
|
random.nextInt(100, 300),
|
||||||
|
random.nextInt(1000, 3000),
|
||||||
new Color(random.nextInt(0, 256), random.nextInt(0, 256), random.nextInt(0, 256)),
|
new Color(random.nextInt(0, 256), random.nextInt(0, 256), random.nextInt(0, 256)),
|
||||||
new Color(random.nextInt(0, 256), random.nextInt(0, 256), random.nextInt(0, 256)),
|
random.nextInt(2, 5),
|
||||||
random.nextInt(0, 2) == 1, random.nextInt(0, 2) == 1, random.nextInt(0, 2) == 1,
|
1000,
|
||||||
random.nextInt(2, 5), 1000, 560);
|
560);
|
||||||
_drawingLoco.SetPosition(random.nextInt(10, 100), random.nextInt(10, 100));
|
_drawingTrain.SetPosition(random.nextInt(10, 100), random.nextInt(10, 100));
|
||||||
canv._drawingLoco = _drawingLoco;
|
canv._drawingTrain = _drawingTrain;
|
||||||
Draw();
|
Draw();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -62,22 +139,22 @@ public class FormTrain{
|
|||||||
ActionListener actioListener = new ActionListener() {
|
ActionListener actioListener = new ActionListener() {
|
||||||
public void actionPerformed(ActionEvent e){
|
public void actionPerformed(ActionEvent e){
|
||||||
System.out.println(((JButton)(e.getSource())).getName());
|
System.out.println(((JButton)(e.getSource())).getName());
|
||||||
if (_drawingLoco == null)
|
if (_drawingTrain == null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
switch(((JButton)(e.getSource())).getName()){
|
switch(((JButton)(e.getSource())).getName()){
|
||||||
case "up":
|
case "up":
|
||||||
_drawingLoco.MoveTransport(Direction.Up);
|
_drawingTrain.MoveTransport(Direction.Up);
|
||||||
break;
|
break;
|
||||||
case "down":
|
case "down":
|
||||||
_drawingLoco.MoveTransport(Direction.Down);
|
_drawingTrain.MoveTransport(Direction.Down);
|
||||||
break;
|
break;
|
||||||
case "left":
|
case "left":
|
||||||
_drawingLoco.MoveTransport(Direction.Left);
|
_drawingTrain.MoveTransport(Direction.Left);
|
||||||
break;
|
break;
|
||||||
case "right":
|
case "right":
|
||||||
_drawingLoco.MoveTransport(Direction.Right);
|
_drawingTrain.MoveTransport(Direction.Right);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
Draw();
|
Draw();
|
||||||
@ -92,33 +169,39 @@ public class FormTrain{
|
|||||||
w.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
|
w.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
|
||||||
w.setLayout(null);
|
w.setLayout(null);
|
||||||
canv = new Canvas();
|
canv = new Canvas();
|
||||||
canv.setBounds(0, 0, 1000, 600);
|
canv.setBounds(0, 0, pictureBoxWidth, pictureBoxHeight);
|
||||||
buttonCreate.setBounds(2, 540, 100, 20);
|
buttonCreate.setBounds(2, 540, 100, 20);
|
||||||
|
buttonCreateLocomotive.setBounds(105, 540, 150, 20);
|
||||||
up.setBounds(900, 480, 40, 40);
|
up.setBounds(900, 480, 40, 40);
|
||||||
down.setBounds(900, 520, 40, 40);
|
down.setBounds(900, 520, 40, 40);
|
||||||
left.setBounds(860, 520, 40, 40);
|
left.setBounds(860, 520, 40, 40);
|
||||||
right.setBounds(940, 520, 40, 40);
|
right.setBounds(940, 520, 40, 40);
|
||||||
|
comboBoxStrategy.setBounds(pictureBoxWidth - 150, 20, 150, 20);
|
||||||
|
buttonStrategysStep.setBounds(pictureBoxWidth - 150, 45, 150, 20);
|
||||||
w.add(canv);
|
w.add(canv);
|
||||||
w.add(buttonCreate);
|
w.add(buttonCreate);
|
||||||
|
w.add(buttonCreateLocomotive);
|
||||||
w.add(up);
|
w.add(up);
|
||||||
w.add(down);
|
w.add(down);
|
||||||
w.add(left);
|
w.add(left);
|
||||||
w.add(right);
|
w.add(right);
|
||||||
|
w.add(comboBoxStrategy);
|
||||||
|
w.add(buttonStrategysStep);
|
||||||
w.setVisible (true);
|
w.setVisible (true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class Canvas extends JComponent{
|
class Canvas extends JComponent{
|
||||||
public DrawingLoco _drawingLoco;
|
public DrawingTrain _drawingTrain;
|
||||||
public Canvas(){
|
public Canvas(){
|
||||||
}
|
}
|
||||||
public void paintComponent (Graphics g){
|
public void paintComponent (Graphics g){
|
||||||
if (_drawingLoco == null){
|
if (_drawingTrain == null){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
super.paintComponents (g) ;
|
super.paintComponents (g) ;
|
||||||
Graphics2D g2d = (Graphics2D)g;
|
Graphics2D g2d = (Graphics2D)g;
|
||||||
_drawingLoco.DrawTransport(g2d);
|
_drawingTrain.DrawTransport(g2d);
|
||||||
super.repaint();
|
super.repaint();
|
||||||
}
|
}
|
||||||
}
|
}
|
23
laba1Loco/IMoveableObject.java
Normal file
23
laba1Loco/IMoveableObject.java
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
package laba1Loco;
|
||||||
|
|
||||||
|
public interface IMoveableObject {
|
||||||
|
/// <summary>
|
||||||
|
/// Получение координаты X объекта
|
||||||
|
/// </summary>
|
||||||
|
ObjectParameters GetObjectPosition();
|
||||||
|
/// <summary>
|
||||||
|
/// Шаг объекта
|
||||||
|
/// </summary>
|
||||||
|
int GetStep();
|
||||||
|
/// <summary>
|
||||||
|
/// Проверка, можно ли переместиться по нужному направлению
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="direction"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
boolean CheckCanMove(Direction direction);
|
||||||
|
/// <summary>
|
||||||
|
/// Изменение направления пермещения объекта
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="direction">Направление</param>
|
||||||
|
void MoveObject(Direction direction);
|
||||||
|
}
|
48
laba1Loco/MoveToBorder.java
Normal file
48
laba1Loco/MoveToBorder.java
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
package laba1Loco;
|
||||||
|
|
||||||
|
public class MoveToBorder extends AbstractStrategy{
|
||||||
|
protected boolean IsTargetDestinaion()
|
||||||
|
{
|
||||||
|
var objParams = GetObjectParameters();
|
||||||
|
if (objParams == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return objParams.RightBorder() <= FieldWidth &&
|
||||||
|
objParams.RightBorder() + GetStep() >= FieldWidth &&
|
||||||
|
objParams.DownBorder() <= FieldHeight &&
|
||||||
|
objParams.DownBorder() + GetStep() >= FieldHeight;
|
||||||
|
}
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
48
laba1Loco/MoveToCenter.java
Normal file
48
laba1Loco/MoveToCenter.java
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
package laba1Loco;
|
||||||
|
|
||||||
|
public class MoveToCenter extends AbstractStrategy {
|
||||||
|
protected boolean IsTargetDestinaion()
|
||||||
|
{
|
||||||
|
var objParams = GetObjectParameters();
|
||||||
|
if (objParams == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return
|
||||||
|
Math.abs(objParams.ObjectMiddleHorizontal() - FieldWidth / 2) <= GetStep()
|
||||||
|
&&
|
||||||
|
Math.abs(objParams.ObjectMiddleVertical() - FieldHeight / 2) <= GetStep();
|
||||||
|
}
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
46
laba1Loco/ObjectParameters.java
Normal file
46
laba1Loco/ObjectParameters.java
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
package laba1Loco;
|
||||||
|
|
||||||
|
public class ObjectParameters {
|
||||||
|
private int _x;
|
||||||
|
private int _y;
|
||||||
|
private int _width;
|
||||||
|
private int _height;
|
||||||
|
/// <summary>
|
||||||
|
/// Левая граница
|
||||||
|
/// </summary>
|
||||||
|
public int LeftBorder() {return _x;}
|
||||||
|
/// <summary>
|
||||||
|
/// Верхняя граница
|
||||||
|
/// </summary>
|
||||||
|
public int TopBorder () {return _y;}
|
||||||
|
/// <summary>
|
||||||
|
/// Правая граница
|
||||||
|
/// </summary>
|
||||||
|
public int RightBorder () {return _x + _width;}
|
||||||
|
/// <summary>
|
||||||
|
/// Нижняя граница
|
||||||
|
/// </summary>
|
||||||
|
public int DownBorder () {return _y + _height;}
|
||||||
|
/// <summary>
|
||||||
|
/// Середина объекта
|
||||||
|
/// </summary>
|
||||||
|
public int ObjectMiddleHorizontal () {return _x + _width / 2;}
|
||||||
|
/// <summary>
|
||||||
|
/// Середина объекта
|
||||||
|
/// </summary>
|
||||||
|
public int ObjectMiddleVertical () {return _y + _height / 2;}
|
||||||
|
/// <summary>
|
||||||
|
/// Конструктор
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="x">Координата X</param>
|
||||||
|
/// <param name="y">Координата Y</param>
|
||||||
|
/// <param name="width">Ширина</param>
|
||||||
|
/// <param name="height">Высота</param>
|
||||||
|
public ObjectParameters(int x, int y, int width, int height)
|
||||||
|
{
|
||||||
|
_x = x;
|
||||||
|
_y = y;
|
||||||
|
_width = width;
|
||||||
|
_height = height;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user