готова

This commit is contained in:
AnnaLioness 2023-10-09 23:11:13 +04:00
parent 7b57f7dc42
commit 91f5aff2a2
15 changed files with 559 additions and 56 deletions

79
AbstractStrategy.java Normal file
View File

@ -0,0 +1,79 @@
public abstract class AbstractStrategy {
private IMoveableObject _moveableObject;
private Status _state = Status.NotInit;
protected int FieldWidth;
protected int 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;
_moveableObject = moveableObject;
FieldWidth = width;
FieldHeight = height;
}
public void MakeStep()
{
if (_state != Status.InProgress)
{
return;
}
if (IsTargetDestinaion())
{
_state = Status.Finish;
return;
}
MoveToTarget();
}
protected boolean MoveLeft() { return MoveTo(Direction.Left);}
protected boolean MoveRight() { return MoveTo(Direction.Right);}
protected boolean MoveUp() {return MoveTo(Direction.Up);}
protected boolean MoveDown(){return MoveTo(Direction.Down);}
protected ObjectParameters GetObjectParameters(){
return _moveableObject.GetObjectPosition();
}
protected int GetStep()
{
if (_state != Status.InProgress)
{
return 0;
}
return _moveableObject.GetStep();
}
protected abstract void MoveToTarget();
protected abstract boolean IsTargetDestinaion();
private boolean MoveTo(Direction direction)
{
if (_state != Status.InProgress)
{
return false;
}
if (_moveableObject.CheckCanMove(direction))
{
_moveableObject.MoveObject(direction);
return true;
}
return false;
}
}

View File

@ -1,36 +1,40 @@
import java.awt.*;
public class DrawingContainerShip extends DrawingShip{
@Override
public EntityContainerShip EntityContainerShip;
private DrawingDecks drawingDecks;
private DrawingDecksTrapez drawingDecksTrapez;
private DrawingDecksRect drawingDecksRect;
public DrawingContainerShip(int speed, double weight, Color bodyColor, Color
additionalColor, boolean crane, boolean containers,int deck, int width, int height)
{
super(speed, weight, bodyColor,width, height, 110, 65);
additionalColor, boolean crane, boolean containers,int deck, int deckType, int width, int height)
{
super(speed, weight, bodyColor,width, height, 110, 65);
if (EntityShip != null)
{
EntityShip = new EntityContainerShip(speed, weight, bodyColor,
additionalColor, crane, containers, deck);
additionalColor, crane, containers,deck, deckType);
drawingDecks = new DrawingDecks();
drawingDecksTrapez = new DrawingDecksTrapez();
drawingDecksRect = new DrawingDecksRect();
drawingDecksRect.setNumDecks(deck);
drawingDecksTrapez.setNumDecks(deck);
drawingDecks.setNumDecks(deck);
}
}
@Override
public void DrawShip(Graphics2D g)
{
if(EntityShip == null)
{
return;
}
if(!(EntityShip is EntityContainerShip)) {
return;
}
//контейнеры
if (EntityContainerShip.Conteiners)
super.DrawShip(g);
if (EntityShip == null)
{
g.setPaint((EntityShip as EntityContainerShip).AdditionalColor);
super(DrawShip(g));
return;
}
//контейнеры
if (((EntityContainerShip)EntityShip).Conteiners)
{
g.setPaint(((EntityContainerShip)EntityShip).AdditionalColor);
g.fillRect(_startPosX + 50, _startPosY + 55, 35, 10);
g.fillRect(_startPosX + 85, _startPosY + 55, 20, 10);
g.fillRect(_startPosX + 105, _startPosY + 50, 15, 15);
@ -46,9 +50,9 @@ additionalColor, boolean crane, boolean containers,int deck, int width, int heig
g.drawRect(_startPosX + 65, _startPosY + 50, 40, 5);
}
//кран
if (EntityContainerShip.Crane)
if (((EntityContainerShip)EntityShip).Crane)
{
g.setPaint(EntityContainerShip.AdditionalColor);
g.setPaint(((EntityContainerShip)EntityShip).AdditionalColor);
g.fillRect(_startPosX + 43, _startPosY+20, 5, 45);
g.fillRect(_startPosX + 47, _startPosY + 30, 20, 3);
g.setPaint(Color.BLACK);
@ -57,7 +61,15 @@ additionalColor, boolean crane, boolean containers,int deck, int width, int heig
g.drawLine(_startPosX + 47, _startPosY+20, _startPosX + 67, _startPosY + 30);
g.drawLine(_startPosX + 67, _startPosY + 33, _startPosX + 67, _startPosY + 45);
}
drawingDecks.DrawDeck(_startPosX, _startPosY, g);
if(((EntityContainerShip)EntityShip).DeckType == 1){
drawingDecks.DrawDeck(_startPosX, _startPosY,EntityShip.BodyColor ,g);
}
if(((EntityContainerShip)EntityShip).DeckType == 2){
drawingDecksTrapez.DrawDeck(_startPosX, _startPosY,EntityShip.BodyColor, g);
}
if(((EntityContainerShip)EntityShip).DeckType == 3){
drawingDecksRect.DrawDeck(_startPosX, _startPosY, EntityShip.BodyColor, g);
}
}
}

View File

@ -1,7 +1,7 @@
import java.awt.*;
public class DrawingDecks {
private NumberOfDecks numDecks;
public class DrawingDecks implements IDecksDrawing{
private NumberOfDecks numDecks;
public NumberOfDecks getProperty(){
return numDecks;
}
@ -22,7 +22,7 @@ public class DrawingDecks {
break;
}
}
public void DrawDeck(int _startPosX, int _startPosY, Graphics2D g){
public void DrawDeck(int _startPosX, int _startPosY,Color bodyColor, Graphics2D g){
if(numDecks == NumberOfDecks.Deck_1){
}

73
DrawingDecksRect.java Normal file
View File

@ -0,0 +1,73 @@
import java.awt.*;
public class DrawingDecksRect implements IDecksDrawing {
private NumberOfDecks numDecks;
public NumberOfDecks getProperty(){
return numDecks;
}
public void setNumDecks(int nDecks){
switch(nDecks){
case 1:
numDecks = NumberOfDecks.Deck_1;
break;
case 2:
numDecks = NumberOfDecks.Deck_2;
break;
case 3:
numDecks = NumberOfDecks.Deck_3;
break;
default:
numDecks = NumberOfDecks.Deck_1;
System.out.println("Что-то пошло не так, количество палуб неверное" + Integer.toString(nDecks) + "сделаем вид, будто она одна");
break;
}
}
public void DrawDeck(int _startPosX, int _startPosY, Color bodyColor, Graphics2D g){
if(numDecks == NumberOfDecks.Deck_1){
g.setPaint(bodyColor);
int x[] = {_startPosX+ 20, _startPosX+20, _startPosX+130, _startPosX+130,_startPosX+ 20};
int y[] = {_startPosY+65,_startPosY+85, _startPosY+85, _startPosY+65,_startPosY+65};
g.fillPolygon(x, y, 5);
g.setPaint(Color.BLACK);
int _x[] = {_startPosX+ 20, _startPosX+20, _startPosX+130, _startPosX+130,_startPosX+ 20};
int _y[] = {_startPosY+65,_startPosY+85, _startPosY+85, _startPosY+65,_startPosY+65};
g.drawPolyline(_x, _y, 5);
g.drawLine(_startPosX + 43, _startPosY + 80, _startPosX + 47, _startPosY + 80);
g.drawLine(_startPosX + 45, _startPosY + 70, _startPosX + 45, _startPosY + 80);
g.drawLine(_startPosX + 40, _startPosY + 75, _startPosX + 50, _startPosY + 75);
}
if(numDecks == NumberOfDecks.Deck_2){
g.setPaint(bodyColor);
int x[] = {_startPosX+ 20, _startPosX+20, _startPosX+130, _startPosX+130,_startPosX+ 20};
int y[] = {_startPosY+65,_startPosY+85, _startPosY+85, _startPosY+65,_startPosY+65};
g.fillPolygon(x, y, 5);
g.setPaint(Color.BLACK);
int _x[] = {_startPosX+ 20, _startPosX+20, _startPosX+130, _startPosX+130,_startPosX+ 20};
int _y[] = {_startPosY+65,_startPosY+85, _startPosY+85, _startPosY+65,_startPosY+65};
g.drawPolyline(_x, _y, 5);
g.drawLine(_startPosX + 43, _startPosY + 80, _startPosX + 47, _startPosY + 80);
g.drawLine(_startPosX + 45, _startPosY + 70, _startPosX + 45, _startPosY + 80);
g.drawLine(_startPosX + 40, _startPosY + 75, _startPosX + 50, _startPosY + 75);
g.drawLine(_startPosX + 20, _startPosY + 75, _startPosX+ 35, _startPosY + 75);
g.drawLine(_startPosX + 55, _startPosY + 75, _startPosX+ 130, _startPosY + 75);
}
if(numDecks == NumberOfDecks.Deck_3){
g.setPaint(bodyColor);
int x[] = {_startPosX+ 20, _startPosX+20, _startPosX+130, _startPosX+130,_startPosX+ 20};
int y[] = {_startPosY+65,_startPosY+85, _startPosY+85, _startPosY+65,_startPosY+65};
g.fillPolygon(x, y, 5);
g.setPaint(Color.BLACK);
int _x[] = {_startPosX+ 20, _startPosX+20, _startPosX+130, _startPosX+130,_startPosX+ 20};
int _y[] = {_startPosY+65,_startPosY+85, _startPosY+85, _startPosY+65,_startPosY+65};
g.drawPolyline(_x, _y, 5);
g.drawLine(_startPosX + 43, _startPosY + 80, _startPosX + 47, _startPosY + 80);
g.drawLine(_startPosX + 45, _startPosY + 70, _startPosX + 45, _startPosY + 80);
g.drawLine(_startPosX + 40, _startPosY + 75, _startPosX + 50, _startPosY + 75);
g.drawLine(_startPosX + 20, _startPosY + 75, _startPosX+ 35, _startPosY + 75);
g.drawLine(_startPosX + 55, _startPosY + 75, _startPosX+ 130, _startPosY + 75);
g.drawLine(_startPosX + 20, _startPosY + 70, _startPosX+ 40, _startPosY + 70);
g.drawLine(_startPosX + 50, _startPosY + 70, _startPosX+ 130, _startPosY + 70);
}
}
}

73
DrawingDecksTrapez.java Normal file
View File

@ -0,0 +1,73 @@
import java.awt.*;
public class DrawingDecksTrapez implements IDecksDrawing{
private NumberOfDecks numDecks;
public NumberOfDecks getProperty(){
return numDecks;
}
public void setNumDecks(int nDecks){
switch(nDecks){
case 1:
numDecks = NumberOfDecks.Deck_1;
break;
case 2:
numDecks = NumberOfDecks.Deck_2;
break;
case 3:
numDecks = NumberOfDecks.Deck_3;
break;
default:
numDecks = NumberOfDecks.Deck_1;
System.out.println("Что-то пошло не так, количество палуб неверное" + Integer.toString(nDecks) + "сделаем вид, будто она одна");
break;
}
}
public void DrawDeck(int _startPosX, int _startPosY, Color bodyColor, Graphics2D g){
if(numDecks == NumberOfDecks.Deck_1){
g.setPaint(bodyColor);
int x[] = {_startPosX+ 20, _startPosX+20, _startPosX+25, _startPosX+40, _startPosX+ 110,_startPosX+125, _startPosX+130, _startPosX+130, _startPosX+ 20};
int y[] = {_startPosY+65,_startPosY+70, _startPosY+70, _startPosY+85, _startPosY+85,_startPosY+70, _startPosY+70, _startPosY+65, _startPosY+65};
g.fillPolygon(x, y, 9);
g.setPaint(Color.BLACK);
int _x[] = {_startPosX+ 20, _startPosX+20, _startPosX+25, _startPosX+40, _startPosX+ 110,_startPosX+125, _startPosX+130, _startPosX+130, _startPosX+ 20};
int _y[] = {_startPosY+65,_startPosY+70, _startPosY+70, _startPosY+85, _startPosY+85,_startPosY+70, _startPosY+70, _startPosY+65, _startPosY+65};
g.drawPolyline(_x, _y, 9);
g.drawLine(_startPosX + 43, _startPosY + 80, _startPosX + 47, _startPosY + 80);
g.drawLine(_startPosX + 45, _startPosY + 70, _startPosX + 45, _startPosY + 80);
g.drawLine(_startPosX + 40, _startPosY + 75, _startPosX + 50, _startPosY + 75);
}
if(numDecks == NumberOfDecks.Deck_2){
g.setPaint(bodyColor);
int x[] = {_startPosX+ 20, _startPosX+20, _startPosX+25,_startPosX+ 25, _startPosX+30, _startPosX+40, _startPosX+ 110, _startPosX+120, _startPosX+ 125,_startPosX+125, _startPosX+130, _startPosX+130, _startPosX+ 20};
int y[] = {_startPosY+65,_startPosY+70, _startPosY+70,_startPosY+75, _startPosY+75, _startPosY+85, _startPosY+85,_startPosY+75, _startPosY+75,_startPosY+70, _startPosY+70, _startPosY+65, _startPosY+65};
g.fillPolygon(x, y, 13);
g.setPaint(Color.BLACK);
int _x[] = {_startPosX+ 20, _startPosX+20, _startPosX+25,_startPosX+ 25, _startPosX+30, _startPosX+40, _startPosX+ 110, _startPosX+120, _startPosX+ 125,_startPosX+125, _startPosX+130, _startPosX+130, _startPosX+ 20};
int _y[] = {_startPosY+65,_startPosY+70, _startPosY+70,_startPosY+75, _startPosY+75, _startPosY+85, _startPosY+85,_startPosY+75, _startPosY+75,_startPosY+70, _startPosY+70, _startPosY+65, _startPosY+65};
g.drawPolyline(_x, _y, 13);
g.drawLine(_startPosX + 43, _startPosY + 80, _startPosX + 47, _startPosY + 80);
g.drawLine(_startPosX + 45, _startPosY + 70, _startPosX + 45, _startPosY + 80);
g.drawLine(_startPosX + 40, _startPosY + 75, _startPosX + 50, _startPosY + 75);
g.drawLine(_startPosX + 120, _startPosY + 75, _startPosX+ 55, _startPosY + 75);
g.drawLine(_startPosX + 30, _startPosY + 75, _startPosX+ 35, _startPosY + 75);
}
if(numDecks == NumberOfDecks.Deck_3){
g.setPaint(bodyColor);
int x[] = {_startPosX+ 20, _startPosX+20, _startPosX+25,_startPosX+ 25, _startPosX+30, _startPosX+30, _startPosX+ 120, _startPosX+120, _startPosX+ 125,_startPosX+125, _startPosX+130, _startPosX+130, _startPosX+ 20};
int y[] = {_startPosY+65,_startPosY+70, _startPosY+70,_startPosY+75, _startPosY+75, _startPosY+85, _startPosY+85,_startPosY+75, _startPosY+75,_startPosY+70, _startPosY+70, _startPosY+65, _startPosY+65};
g.fillPolygon(x, y, 13);
g.setPaint(Color.BLACK);
int _x[] = {_startPosX+ 20, _startPosX+20, _startPosX+25,_startPosX+ 25, _startPosX+30, _startPosX+30, _startPosX+ 120, _startPosX+120, _startPosX+ 125,_startPosX+125, _startPosX+130, _startPosX+130, _startPosX+ 20};
int _y[] = {_startPosY+65,_startPosY+70, _startPosY+70,_startPosY+75, _startPosY+75, _startPosY+85, _startPosY+85,_startPosY+75, _startPosY+75,_startPosY+70, _startPosY+70, _startPosY+65, _startPosY+65};
g.drawPolyline(_x, _y, 13);
g.drawLine(_startPosX + 43, _startPosY + 80, _startPosX + 47, _startPosY + 80);
g.drawLine(_startPosX + 45, _startPosY + 70, _startPosX + 45, _startPosY + 80);
g.drawLine(_startPosX + 40, _startPosY + 75, _startPosX + 50, _startPosY + 75);
g.drawLine(_startPosX + 120, _startPosY + 75, _startPosX+ 55, _startPosY + 75);
g.drawLine(_startPosX + 125, _startPosY + 70, _startPosX+ 50, _startPosY + 70);
g.drawLine(_startPosX + 30, _startPosY + 75, _startPosX+ 35, _startPosY + 75);
g.drawLine(_startPosX + 25, _startPosY + 70, _startPosX+ 40, _startPosY + 70);
}
}
}

View File

@ -1,13 +1,25 @@
import java.awt.*;
public class DrawingShip {
public EntityShip EntityShip;
private int _pictureWidth;
private int _pictureHeight;
private int _startPosX;
private int _startPosY;
private int _shipWidth = 110;
private int _shipHeight = 65;
private DrawingDecks drawingDecks;
public int _pictureWidth;
public int _pictureHeight;
public int _startPosX;
public int _startPosY;
public int _shipWidth = 110;
public int _shipHeight = 65;
public int GetPosX(){
return _startPosX;
}
public int GetPosY(){
return _startPosY;
}
public int GetWidth(){
return _shipWidth;
}
public int GetHeight(){
return _shipHeight;
}
public boolean CanMove(Direction direction)
{
if(EntityShip == null) return false;
@ -116,6 +128,6 @@ public class DrawingShip {
g.drawLine(_startPosX + 43, _startPosY + 80, _startPosX + 47, _startPosY + 80);
g.drawLine(_startPosX + 45, _startPosY + 70, _startPosX + 45, _startPosY + 80);
g.drawLine(_startPosX + 40, _startPosY + 75, _startPosX + 50, _startPosY + 75);
drawingDecks.DrawDeck(_startPosX, _startPosY, g);
}
}

32
DrawningObjectShip.java Normal file
View File

@ -0,0 +1,32 @@
public class DrawningObjectShip implements IMoveableObject{
private DrawingShip _drawingShip = null;
public DrawningObjectShip(DrawingShip drawingShip)
{
_drawingShip = drawingShip;
}
public ObjectParameters GetObjectPosition()
{
if (_drawingShip == null || _drawingShip.EntityShip ==
null)
{
return null;
}
return new ObjectParameters(_drawingShip.GetPosX(),
_drawingShip.GetPosY(), _drawingShip.GetWidth(), _drawingShip.GetHeight());
}
public int GetStep()
{
return (int)(_drawingShip.EntityShip.Step);
}
public boolean CheckCanMove(Direction direction)
{
return _drawingShip.CanMove(direction);
}
public void MoveObject(Direction direction)
{
_drawingShip.MoveTransport(direction);
}
}

View File

@ -6,14 +6,15 @@ public class EntityContainerShip extends EntityShip{
public boolean Crane;
public boolean Conteiners;
public int Deck;
public int DeckType;
public EntityContainerShip(int speed, double weight, Color bodyColor, Color
additionalColor, boolean crane, boolean containers, int deck)
additionalColor, boolean crane, boolean containers, int deck, int deckType)
{
super(speed, weight,bodyColor);
AdditionalColor = additionalColor;
Crane = crane;
Conteiners = containers;
Deck = deck;
DeckType = deckType;
}
}

View File

@ -2,16 +2,24 @@ import java.awt.*;
import java.util.*;
import javax.swing.*;
import java.awt.event.*;
public class Form1 {
private DrawingContainerShip _drawingShip;
public class FormContainerShip {
private DrawingShip _drawingShip;
private AbstractStrategy _abstractStrategy;
Canvas canv;
public void Draw(){
canv.repaint();
}
public Form1(){
public FormContainerShip(){
JFrame w=new JFrame ("ContainerShip");
JButton buttonCreate = new JButton("создать");
JButton buttonCreateShip = new JButton("создать кораблик");
JButton buttonCreateContainerShip = new JButton("создать контейнеровоз");
JButton buttonStep = new JButton("шаг");
String[] items = {
"MoveToCenter", "MoveToRight-Down"
};
JComboBox comboBoxStrategy = new JComboBox(items);
comboBoxStrategy.setEditable(false);
JButton up = new JButton();
up.setBorderPainted(false);
up.setFocusPainted(false);
@ -36,28 +44,83 @@ public class Form1 {
right.setContentAreaFilled(false);
right.setName("right");
right.setIcon(new ImageIcon("D:\\рабочий стол\\рпп\\лаб1.репозит.сложная\\PIbd21.LyovushkinaA.A.Container_ship.Complicated\\photo22.png"));
buttonCreate.addActionListener(
buttonCreateShip.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e){
System.out.println(e.getActionCommand());
Random random = new Random();
_drawingShip = new DrawingContainerShip();
/*_drawingShip.Init(random.nextInt(100, 300),
_drawingShip = new DrawingShip(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)),
random.nextBoolean(0, 2),random.nextBoolean(0, 2),1000, 560);*/
_drawingShip.Init(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)),
random.nextBoolean(), random.nextBoolean(), random.nextInt(1,4), 960, 560);
new Color(random.nextInt(0,256), random.nextInt(0,256), random.nextInt(0,256)),960, 560);
_drawingShip.SetPosition(random.nextInt(10, 100),random.nextInt(10, 100));
canv._drawingShip = _drawingShip;
Draw();
}
}
);
buttonCreateContainerShip.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e){
System.out.println(e.getActionCommand());
Random random = new Random();
_drawingShip = new DrawingContainerShip(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)),
random.nextBoolean(), random.nextBoolean(), random.nextInt(1,4),random.nextInt(1,4),960, 560);
_drawingShip.SetPosition(random.nextInt(10, 100),random.nextInt(10, 100));
canv._drawingShip = _drawingShip;
Draw();
}
}
);
buttonStep.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e){
if (_drawingShip == 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
DrawningObjectShip(_drawingShip), 960,
560);
comboBoxStrategy.setEnabled(false);
}
if (_abstractStrategy == null)
{
return;
}
_abstractStrategy.MakeStep();
Draw();
if (_abstractStrategy.GetStatus() == Status.Finish)
{
comboBoxStrategy.setEnabled(true);
_abstractStrategy = null;
}
}
}
);
ActionListener actioListener = new ActionListener() {
public void actionPerformed(ActionEvent e){
System.out.println(((JButton)(e.getSource())).getName());
@ -86,18 +149,25 @@ public class Form1 {
down.addActionListener(actioListener);
left.addActionListener(actioListener);
right.addActionListener(actioListener);
w.setSize (1000, 600);
w.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
w.setLayout(null);
canv = new Canvas();
canv.setBounds(0, 0, 1000, 600);
buttonCreate.setBounds(2, 540, 100, 20);
buttonCreateShip.setBounds(2, 540, 200, 20);
buttonCreateContainerShip.setBounds(215, 540, 200, 20);
comboBoxStrategy.setBounds(800, 10, 150, 30);
buttonStep.setBounds(800, 45, 100, 20);
up.setBounds(900, 480, 45, 45);
down.setBounds(900, 520, 45, 45);
left.setBounds(860, 520, 45, 45);
right.setBounds(940, 520, 45, 45);
w.add(canv);
w.add(buttonCreate);
w.add(buttonCreateShip);
w.add(buttonCreateContainerShip);
w.add(comboBoxStrategy);
w.add(buttonStep);
w.add(up);
w.add(down);
w.add(left);
@ -106,13 +176,15 @@ public class Form1 {
}
}
class Canvas extends JComponent{
public DrawingContainerShip _drawingShip;
public Canvas(){
public DrawingShip _drawingShip;
public Canvas(){
}
public void paintComponent (Graphics g){
if (_drawingShip == null){
return;
}
super.paintComponents (g) ;
Graphics2D g2d = (Graphics2D)g;
_drawingShip.DrawShip(g2d);

6
IDecksDrawing.java Normal file
View File

@ -0,0 +1,6 @@
import java.awt.*;
public interface IDecksDrawing {
public NumberOfDecks getProperty();
public void setNumDecks(int nDecks);
public void DrawDeck(int _startPosX, int _startPosY,Color bodyColor, Graphics2D g);
}

18
IMoveableObject.java Normal file
View File

@ -0,0 +1,18 @@
public interface IMoveableObject {
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);
}

View File

@ -1,5 +1,5 @@
public class Main {
public static void main(String[] args){
Form1 form1 = new Form1();
FormContainerShip formContainerShip = new FormContainerShip();
}
}

46
MoveToBorder.java Normal file
View File

@ -0,0 +1,46 @@
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();
}
}
}
}

47
MoveToCenter.java Normal file
View File

@ -0,0 +1,47 @@
public class MoveToCenter extends AbstractStrategy{
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;
}
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();
}
}
}
}

32
ObjectParameters.java Normal file
View File

@ -0,0 +1,32 @@
public class ObjectParameters {
private int _x;
private int _y;
private int _width;
private int _height;
public int LeftBorder;
public int TopBorder;
public int RightBorder;
public int DownBorder;
public int ObjectMiddleHorizontal;
public int ObjectMiddleVertical;
public ObjectParameters(int x, int y, int width, int height)
{
_x = x;
_y = y;
_width = width;
_height = height;
LeftBorder = _x;
TopBorder = _y;
RightBorder = _x + _width;
DownBorder = _y + _height;
ObjectMiddleHorizontal = _x + _width / 2;
ObjectMiddleVertical = _y + _height / 2;
}
}