Compare commits
3 Commits
911e8bfdc5
...
2f936be74a
Author | SHA1 | Date | |
---|---|---|---|
2f936be74a | |||
91f5aff2a2 | |||
7b57f7dc42 |
79
AbstractStrategy.java
Normal file
79
AbstractStrategy.java
Normal 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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
73
DrawingDecksRect.java
Normal 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
73
DrawingDecksTrapez.java
Normal 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
133
DrawingShip.java
Normal 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
32
DrawningObjectShip.java
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
@ -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
14
EntityShip.java
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
121
Form1.java
121
Form1.java
@ -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
193
FormContainerShip.java
Normal 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
6
IDecksDrawing.java
Normal 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
18
IMoveableObject.java
Normal 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);
|
||||||
|
}
|
@ -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
46
MoveToBorder.java
Normal 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
47
MoveToCenter.java
Normal 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
32
ObjectParameters.java
Normal 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
5
Status.java
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
public enum Status {
|
||||||
|
NotInit,
|
||||||
|
InProgress,
|
||||||
|
Finish
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user