Compare commits

...

3 Commits

Author SHA1 Message Date
2f936be74a коммит 2023-10-20 18:49:21 +04:00
91f5aff2a2 готова 2023-10-09 23:11:13 +04:00
7b57f7dc42 промежуточная 2023-10-07 21:42:37 +04:00
18 changed files with 794 additions and 226 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,103 +1,46 @@
import java.awt.*; import java.awt.*;
public class DrawingContainerShip { public class DrawingContainerShip extends DrawingShip{
public EntityContainerShip EntityContainerShip;
private int _pictureWidth;
private int _pictureHeight;
private int _startPosX;
private int _startPosY;
private int _shipWidth = 110;
private int _shipHeight = 65;
private DrawingDecks drawingDecks;
public boolean Init(int speed, double weight, Color bodyColor, Color
additionalColor, boolean crane, boolean container, int deck, int width, int height)
{
_pictureWidth = width;
_pictureHeight = height;
if (_pictureWidth < _shipWidth || _pictureHeight < _shipHeight)
{
return false;
}
EntityContainerShip = new EntityContainerShip();
EntityContainerShip.Init(speed, weight, bodyColor, additionalColor,
crane, container, deck);
drawingDecks = new DrawingDecks();
drawingDecks.setNumDecks(deck);
return true;
}
public void SetPosition(int x, int y)
{
_startPosX = Math.min(x, _pictureWidth - _shipWidth);
_startPosY = Math.min(y, _pictureHeight - _shipHeight);
}
public void MoveTransport(Direction direction)
{
if (EntityContainerShip == null)
{
return;
}
switch (direction)
{
case Left:
if (_startPosX - EntityContainerShip.Step > 0)
{
_startPosX -= (int)EntityContainerShip.Step;
}
break;
case Up:
if (_startPosY - EntityContainerShip.Step > 0)
private IDecksDrawing iDecksDrawing;
public DrawingContainerShip(int speed, double weight, Color bodyColor, Color
additionalColor, boolean crane, boolean containers,int deck, int deckType, int width, int height)
{ {
_startPosY -= (int)EntityContainerShip.Step; super(speed, weight, bodyColor,width, height, 110, 65);
} if (EntityShip != null)
break;
case Right:
if (_startPosX + EntityContainerShip.Step + _shipWidth < _pictureWidth)
{ {
_startPosX += (int)EntityContainerShip.Step; EntityShip = new EntityContainerShip(speed, weight, bodyColor,
} additionalColor, crane, containers,deck, deckType);
break;
case Down:
if (_startPosY + EntityContainerShip.Step + _shipHeight< _pictureHeight) if(deckType == 1){
{ iDecksDrawing = new DrawingDecks();
_startPosY += (int)EntityContainerShip.Step;
} }
break; if(deckType == 2){
iDecksDrawing = new DrawingDecksTrapez();
}
if(deckType == 3){
iDecksDrawing = new DrawingDecksRect();
}
iDecksDrawing.setNumDecks(deck);
} }
} }
@Override
public void DrawShip(Graphics2D g) public void DrawShip(Graphics2D g)
{ {
if (EntityContainerShip == null) super.DrawShip(g);
if (EntityShip == null)
{ {
return; return;
} }
//Pen pen = new Pen(Color.Black);
//Brush adbrush = new SolidBrush(EntityContainerShip.AdditionalColor);
//Brush brBlue = new SolidBrush(Color.Blue);
g.setPaint(Color.BLUE);
// заполнение борта
int x[] = {_startPosX+ 20, _startPosX+40, _startPosX+110, _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+40, _startPosX+110, _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 (EntityContainerShip.Conteiners) if (((EntityContainerShip)EntityShip).Conteiners)
{ {
g.setPaint(EntityContainerShip.AdditionalColor); g.setPaint(((EntityContainerShip)EntityShip).AdditionalColor);
g.fillRect(_startPosX + 50, _startPosY + 55, 35, 10); g.fillRect(_startPosX + 50, _startPosY + 55, 35, 10);
g.fillRect(_startPosX + 85, _startPosY + 55, 20, 10); g.fillRect(_startPosX + 85, _startPosY + 55, 20, 10);
g.fillRect(_startPosX + 105, _startPosY + 50, 15, 15); g.fillRect(_startPosX + 105, _startPosY + 50, 15, 15);
@ -113,9 +56,9 @@ public class DrawingContainerShip {
g.drawRect(_startPosX + 65, _startPosY + 50, 40, 5); 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 + 43, _startPosY+20, 5, 45);
g.fillRect(_startPosX + 47, _startPosY + 30, 20, 3); g.fillRect(_startPosX + 47, _startPosY + 30, 20, 3);
g.setPaint(Color.BLACK); g.setPaint(Color.BLACK);
@ -124,7 +67,7 @@ public class DrawingContainerShip {
g.drawLine(_startPosX + 47, _startPosY+20, _startPosX + 67, _startPosY + 30); g.drawLine(_startPosX + 47, _startPosY+20, _startPosX + 67, _startPosY + 30);
g.drawLine(_startPosX + 67, _startPosY + 33, _startPosX + 67, _startPosY + 45); g.drawLine(_startPosX + 67, _startPosY + 33, _startPosX + 67, _startPosY + 45);
} }
drawingDecks.DrawDeck(_startPosX, _startPosY, g); iDecksDrawing.DrawDeck(_startPosX, _startPosY, EntityShip.BodyColor, g);
} }
} }

View File

@ -1,6 +1,6 @@
import java.awt.*; import java.awt.*;
public class DrawingDecks { public class DrawingDecks implements IDecksDrawing{
private NumberOfDecks numDecks; private NumberOfDecks numDecks;
public NumberOfDecks getProperty(){ public NumberOfDecks getProperty(){
return numDecks; return numDecks;
@ -22,7 +22,7 @@ public class DrawingDecks {
break; 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){ 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);
}
}
}

133
DrawingShip.java Normal file
View File

@ -0,0 +1,133 @@
import java.awt.*;
public class DrawingShip {
public EntityShip EntityShip;
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;
switch(direction)
{
case Left:
return _startPosX - EntityShip.Step > 0;
case Right:
return _startPosX + _shipWidth + EntityShip.Step < _pictureWidth;
case Up:
return _startPosY - EntityShip.Step > 0;
case Down:
return _startPosY + _shipHeight+ EntityShip.Step < _pictureHeight;
default:
return false;
}
}
public DrawingShip(int speed, double weight, Color bodyColor, int width, int height)
{
if(width < _shipWidth || height < _shipHeight)
{
return;
}
_pictureWidth = width;
_pictureHeight = height;
EntityShip = new EntityShip(speed, weight, bodyColor);
}
protected DrawingShip(int speed, double weight, Color bodyColor, int width, int height, int shipWidth, int shipHeight)
{
if (width < _shipWidth || height < _shipHeight)
{
return;
}
_pictureWidth = width;
_pictureHeight = height;
_shipHeight = shipHeight;
_shipWidth = shipWidth;
EntityShip = new EntityShip(speed, weight, bodyColor);
}
public void SetPosition(int x, int y)
{
_startPosX = Math.min(x, _pictureWidth - _shipWidth);
_startPosY = Math.min(y, _pictureHeight - _shipHeight);
}
public void MoveTransport(Direction direction)
{
if (EntityShip == null)
{
return;
}
switch (direction)
{
case Left:
if (_startPosX - EntityShip.Step > 0)
{
_startPosX -= (int)EntityShip.Step;
}
break;
case Up:
if (_startPosY - EntityShip.Step > 0)
{
_startPosY -= (int)EntityShip.Step;
}
break;
case Right:
if (_startPosX + EntityShip.Step + _shipWidth < _pictureWidth)
{
_startPosX += (int)EntityShip.Step;
}
break;
case Down:
if (_startPosY + EntityShip.Step + _shipHeight< _pictureHeight)
{
_startPosY += (int)EntityShip.Step;
}
break;
}
}
public void DrawShip(Graphics2D g)
{
if (EntityShip == null)
{
return;
}
//Pen pen = new Pen(Color.Black);
//Brush adbrush = new SolidBrush(EntityContainerShip.AdditionalColor);
//Brush brBlue = new SolidBrush(Color.Blue);
g.setPaint(EntityShip.BodyColor);
// заполнение борта
int x[] = {_startPosX+ 20, _startPosX+40, _startPosX+110, _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+40, _startPosX+110, _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);
}
}

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

@ -1,25 +1,20 @@
import java.awt.*; import java.awt.*;
public class EntityContainerShip { public class EntityContainerShip extends EntityShip{
public int Speed;
public double Weight;
public Color BodyColor;
public Color AdditionalColor; public Color AdditionalColor;
public boolean Crane; public boolean Crane;
public boolean Conteiners; public boolean Conteiners;
public int Deck; public int Deck;
public double Step; public int DeckType;
public void Init(int speed, double weight, Color bodyColor, Color 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)
{ {
Speed = speed; super(speed, weight,bodyColor);
Weight = weight;
BodyColor = bodyColor;
AdditionalColor = additionalColor; AdditionalColor = additionalColor;
Crane = crane; Crane = crane;
Conteiners = containers; Conteiners = containers;
Deck = deck; Deck = deck;
Step = (double)Speed * 100 / Weight; DeckType = deckType;
} }
} }

14
EntityShip.java Normal file
View File

@ -0,0 +1,14 @@
import java.awt.*;
public class EntityShip {
public int Speed;
public double Weight;
public Color BodyColor;
public double Step;
public EntityShip(int speed, double weight, Color bodyColor)
{
Speed = speed;
Weight = weight;
BodyColor = bodyColor;
Step = (double)Speed * 100 / Weight;
}
}

View File

@ -1,121 +0,0 @@
import java.awt.*;
import java.util.*;
import javax.swing.*;
import java.awt.event.*;
public class Form1 {
private DrawingContainerShip _drawingShip;
Canvas canv;
public void Draw(){
canv.repaint();
}
public Form1(){
JFrame w=new JFrame ("ContainerShip");
JButton buttonCreate = new JButton("создать");
JButton up = new JButton();
up.setBorderPainted(false);
up.setFocusPainted(false);
up.setContentAreaFilled(false);
up.setName("up");
up.setIcon(new ImageIcon("photo11.png"));
JButton down = new JButton();
down.setBorderPainted(false);
down.setFocusPainted(false);
down.setContentAreaFilled(false);
down.setName("down");
down.setIcon(new ImageIcon("photo33.png"));
JButton left = new JButton();
left.setBorderPainted(false);
left.setFocusPainted(false);
left.setContentAreaFilled(false);
left.setName("left");
left.setIcon(new ImageIcon("photo44.png"));
JButton right = new JButton();
right.setBorderPainted(false);
right.setFocusPainted(false);
right.setContentAreaFilled(false);
right.setName("right");
right.setIcon(new ImageIcon("photo22.png"));
buttonCreate.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),
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);
_drawingShip.SetPosition(random.nextInt(10, 100),random.nextInt(10, 100));
canv._drawingShip = _drawingShip;
Draw();
}
}
);
ActionListener actioListener = new ActionListener() {
public void actionPerformed(ActionEvent e){
System.out.println(((JButton)(e.getSource())).getName());
if (_drawingShip == null)
{
return;
}
switch(((JButton)(e.getSource())).getName()){
case "up":
_drawingShip.MoveTransport(Direction.Up);
break;
case "down":
_drawingShip.MoveTransport(Direction.Down);
break;
case "left":
_drawingShip.MoveTransport(Direction.Left);
break;
case "right":
_drawingShip.MoveTransport(Direction.Right);
break;
}
Draw();
}
};
up.addActionListener(actioListener);
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);
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(up);
w.add(down);
w.add(left);
w.add(right);
w.setVisible (true);
}
}
class Canvas extends JComponent{
public DrawingContainerShip _drawingShip;
public Canvas(){
}
public void paintComponent (Graphics g){
if (_drawingShip == null){
return;
}
super.paintComponents (g) ;
Graphics2D g2d = (Graphics2D)g;
_drawingShip.DrawShip(g2d);
super.repaint();
}
}

193
FormContainerShip.java Normal file
View File

@ -0,0 +1,193 @@
import java.awt.*;
import java.util.*;
import javax.swing.*;
import java.awt.event.*;
public class FormContainerShip {
private DrawingShip _drawingShip;
private AbstractStrategy _abstractStrategy;
Canvas canv;
public void Draw(){
canv.repaint();
}
public FormContainerShip(){
JFrame w=new JFrame ("ContainerShip");
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);
up.setContentAreaFilled(false);
up.setName("up");
up.setIcon(new ImageIcon("D:\\рабочий стол\\рпп\\лаб1.репозит.сложная\\PIbd21.LyovushkinaA.A.Container_ship.Complicated\\photo11.png"));
JButton down = new JButton();
down.setBorderPainted(false);
down.setFocusPainted(false);
down.setContentAreaFilled(false);
down.setName("down");
down.setIcon(new ImageIcon("D:\\рабочий стол\\рпп\\лаб1.репозит.сложная\\PIbd21.LyovushkinaA.A.Container_ship.Complicated\\photo33.png"));
JButton left = new JButton();
left.setBorderPainted(false);
left.setFocusPainted(false);
left.setContentAreaFilled(false);
left.setName("left");
left.setIcon(new ImageIcon("D:\\рабочий стол\\рпп\\лаб1.репозит.сложная\\PIbd21.LyovushkinaA.A.Container_ship.Complicated\\photo44.png"));
JButton right = new JButton();
right.setBorderPainted(false);
right.setFocusPainted(false);
right.setContentAreaFilled(false);
right.setName("right");
right.setIcon(new ImageIcon("D:\\рабочий стол\\рпп\\лаб1.репозит.сложная\\PIbd21.LyovushkinaA.A.Container_ship.Complicated\\photo22.png"));
buttonCreateShip.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e){
System.out.println(e.getActionCommand());
Random random = new Random();
_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)),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());
if (_drawingShip == null)
{
return;
}
switch(((JButton)(e.getSource())).getName()){
case "up":
_drawingShip.MoveTransport(Direction.Up);
break;
case "down":
_drawingShip.MoveTransport(Direction.Down);
break;
case "left":
_drawingShip.MoveTransport(Direction.Left);
break;
case "right":
_drawingShip.MoveTransport(Direction.Right);
break;
}
Draw();
}
};
up.addActionListener(actioListener);
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);
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(buttonCreateShip);
w.add(buttonCreateContainerShip);
w.add(comboBoxStrategy);
w.add(buttonStep);
w.add(up);
w.add(down);
w.add(left);
w.add(right);
w.setVisible (true);
}
}
class Canvas extends JComponent{
public DrawingShip _drawingShip;
public Canvas(){
}
public void paintComponent (Graphics g){
if (_drawingShip == null){
return;
}
super.paintComponents (g) ;
Graphics2D g2d = (Graphics2D)g;
_drawingShip.DrawShip(g2d);
super.repaint();
}
}

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 class Main {
public static void main(String[] args){ 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;
}
}

5
Status.java Normal file
View File

@ -0,0 +1,5 @@
public enum Status {
NotInit,
InProgress,
Finish
}