diff --git a/.idea/Git.iml b/.idea/Git.iml
new file mode 100644
index 0000000..d6ebd48
--- /dev/null
+++ b/.idea/Git.iml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Tank/.gitignore b/Tank/.gitignore
deleted file mode 100644
index f68d109..0000000
--- a/Tank/.gitignore
+++ /dev/null
@@ -1,29 +0,0 @@
-### IntelliJ IDEA ###
-out/
-!**/src/main/**/out/
-!**/src/test/**/out/
-
-### Eclipse ###
-.apt_generated
-.classpath
-.factorypath
-.project
-.settings
-.springBeans
-.sts4-cache
-bin/
-!**/src/main/**/bin/
-!**/src/test/**/bin/
-
-### NetBeans ###
-/nbproject/private/
-/nbbuild/
-/dist/
-/nbdist/
-/.nb-gradle/
-
-### VS Code ###
-.vscode/
-
-### Mac OS ###
-.DS_Store
\ No newline at end of file
diff --git a/Tank/.idea/.gitignore b/Tank/.idea/.gitignore
index 1c2fda5..26d3352 100644
--- a/Tank/.idea/.gitignore
+++ b/Tank/.idea/.gitignore
@@ -1,8 +1,3 @@
-# Default ignored files
-/shelf/
-/workspace.xml
-# Editor-based HTTP Client requests
-/httpRequests/
-# Datasource local storage ignored files
-/dataSources/
-/dataSources.local.xml
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/Tank/.idea/misc.xml b/Tank/.idea/misc.xml
index 80cafc3..1e4328b 100644
--- a/Tank/.idea/misc.xml
+++ b/Tank/.idea/misc.xml
@@ -1,6 +1,5 @@
-
-
-
-
-
+
+
+
+
\ No newline at end of file
diff --git a/Tank/.idea/modules.xml b/Tank/.idea/modules.xml
index 8d39350..a2edae3 100644
--- a/Tank/.idea/modules.xml
+++ b/Tank/.idea/modules.xml
@@ -1,8 +1,8 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Tank/.idea/uiDesigner.xml b/Tank/.idea/uiDesigner.xml
new file mode 100644
index 0000000..2b63946
--- /dev/null
+++ b/Tank/.idea/uiDesigner.xml
@@ -0,0 +1,124 @@
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/Tank/.idea/vcs.xml b/Tank/.idea/vcs.xml
index 2e3f692..6c0b863 100644
--- a/Tank/.idea/vcs.xml
+++ b/Tank/.idea/vcs.xml
@@ -1,6 +1,6 @@
-
-
-
-
-
+
+
+
+
+
\ No newline at end of file
diff --git a/Tank/Tank.iml b/Tank/Tank.iml
index 9465dd8..c90834f 100644
--- a/Tank/Tank.iml
+++ b/Tank/Tank.iml
@@ -1,11 +1,11 @@
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Tank/src/AbstractStrategy.java b/Tank/src/AbstractStrategy.java
new file mode 100644
index 0000000..c36c2ef
--- /dev/null
+++ b/Tank/src/AbstractStrategy.java
@@ -0,0 +1,82 @@
+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;
+ }
+}
diff --git a/Tank/src/CountWheels.java b/Tank/src/CountWheels.java
index 5d064d7..2a7408e 100644
--- a/Tank/src/CountWheels.java
+++ b/Tank/src/CountWheels.java
@@ -10,5 +10,4 @@ public enum CountWheels {
public int getCountWheels(){
return Value;
}
- public int setCountWheels() { return Value; }
}
diff --git a/Tank/src/Direction.java b/Tank/src/Direction.java
index a641b80..8ea7191 100644
--- a/Tank/src/Direction.java
+++ b/Tank/src/Direction.java
@@ -1,6 +1,6 @@
public enum Direction {
Up,
- Down,
Left,
+ Down,
Right
-}
+}
\ No newline at end of file
diff --git a/Tank/src/DrawingArmoVehicle.java b/Tank/src/DrawingArmoVehicle.java
new file mode 100644
index 0000000..0beb04b
--- /dev/null
+++ b/Tank/src/DrawingArmoVehicle.java
@@ -0,0 +1,128 @@
+import java.awt.*;
+import java.util.Random;
+
+public class DrawingArmoVehicle {
+ protected IOrnamentForm OrnamentsForm;
+ public EntityArmoVehicle ArmoVehicle;
+ public EntityArmoVehicle getTank() {
+ return ArmoVehicle;
+ }
+ protected int _pictureWidth;
+ protected int _pictureHeight;
+ protected int _startPosX;
+ protected int _startPosY;
+ protected int _TankWidth = 160;
+ protected int _TankHeight = 55;
+
+ public DrawingArmoVehicle(int speed, double weight, Color bodyColor, int _numWheel, int width, int height) {
+ _pictureWidth = width;
+ _pictureHeight = height;
+ if (_pictureHeight < _TankHeight || _pictureWidth < _TankWidth)
+ return;
+ ArmoVehicle = new EntityArmoVehicle(speed, weight, bodyColor, _numWheel);
+
+ Random random = new Random();
+ switch(random.nextInt(0, 3)) {
+ case 0:
+ OrnamentsForm = new DrawingWheelsCombination();
+ break;
+ case 1:
+ OrnamentsForm = new DrawingAsteriskOrnament();
+ break;
+ case 2:
+ OrnamentsForm = new DrawingSuspensionOrnament();
+ break;
+ default:
+ OrnamentsForm = new DrawingWheelsCombination();
+ break;
+ }
+ OrnamentsForm.setDigit(_numWheel);
+ }
+
+ public void SetPosition(int x, int y) {
+ _startPosX = Math.min(x, _pictureWidth - _TankWidth);
+ _startPosY = Math.min(y, _pictureHeight - _TankHeight);
+ }
+
+ public int GetPosX (){ return _startPosX; }
+ public int GetPosY (){ return _startPosY; }
+ public int GetWidth (){ return _TankWidth; }
+ public int GetHeight (){return _TankHeight;}
+
+ public boolean CanMove(Direction direction) {
+ if (ArmoVehicle == null) {
+ return false;
+ }
+ switch (direction) {
+ case Left:
+ return _startPosX - ArmoVehicle.Step > 0;
+ case Right:
+ return _startPosX + _TankWidth + ArmoVehicle.Step < _pictureWidth;
+ case Up:
+ return _startPosY - ArmoVehicle.Step > 0;
+ case Down:
+ return _startPosY + _TankHeight + ArmoVehicle.Step < _pictureHeight;
+ default:
+ return false;
+ }
+ }
+
+ public void MoveTransport(Direction direction) {
+ if (!CanMove(direction) || ArmoVehicle == null) {
+ return;
+ }
+ switch (direction) {
+ //влево
+ case Left:
+ _startPosX -= (int)ArmoVehicle.Step;
+ break;
+ //вверх
+ case Up:
+ _startPosY -= (int)ArmoVehicle.Step;
+ break;
+ // вправо
+ case Right:
+ _startPosX += (int)ArmoVehicle.Step;
+ break;
+ //вниз
+ case Down:
+ _startPosY += (int)ArmoVehicle.Step;
+ break;
+ }
+ }
+
+ public void SetWheels(int number) {
+ OrnamentsForm.setDigit(number);
+ }
+ public void DrawTransport(Graphics2D g) {
+ if (ArmoVehicle == null) {
+ return;
+ }
+
+ g.setColor(Color.BLUE);
+ int[] xPoints = {_startPosX + 5, _startPosX + 140, _startPosX + 130,_startPosX + 12};
+ int[] yPoints = {_startPosY + 30, _startPosY + 30, _startPosY + 42, _startPosY + 42};
+ int nPoints = 4;
+ g.drawPolygon(xPoints,yPoints,nPoints);
+ g.fillPolygon(xPoints,yPoints,nPoints);
+
+ //wheels
+ OrnamentsForm.Draw(g, _startPosX, _startPosY);
+ }
+
+ public void ChangeBorders(int width,int height) {
+ _pictureWidth = width;
+ _pictureHeight = height;
+ if (_pictureWidth<=_TankWidth||_pictureHeight<=_TankHeight) {
+ _pictureWidth = Integer.parseInt(null);
+ _pictureHeight = Integer.parseInt(null);
+ return;
+ }
+ if (_startPosX + _TankWidth > _pictureWidth) {
+ _startPosX = _pictureWidth - _TankWidth;
+ }
+ if (_startPosY + _TankHeight > _pictureHeight) {
+ _startPosY = _pictureHeight - _TankHeight;
+ }
+ }
+}
diff --git a/Tank/src/DrawingAsteriskOrnament.java b/Tank/src/DrawingAsteriskOrnament.java
new file mode 100644
index 0000000..cc76eda
--- /dev/null
+++ b/Tank/src/DrawingAsteriskOrnament.java
@@ -0,0 +1,85 @@
+import java.awt.*;
+
+public class DrawingAsteriskOrnament implements IOrnamentForm {
+ private CountWheels wheels;
+ private Color additionalColor;
+ public CountWheels getNumWheel() {
+ return wheels;
+ }
+
+ public void setDigit(int number) {
+ switch(number){
+ case 2:
+ wheels = CountWheels.Two;
+ break;
+ case 3:
+ wheels = CountWheels.Three;
+ break;
+ case 4:
+ wheels = CountWheels.Four;
+ break;
+ default:
+ wheels = CountWheels.Two;
+ break;
+ }
+ }
+
+ public void CaterpillarStar(Graphics g, int _startPosX, int _startPosY) {
+ additionalColor = Color.RED;
+ g.setColor(additionalColor);
+ int xPontsStar[] = {_startPosX + 15, _startPosX + 18, _startPosX + 21, _startPosX + 18, _startPosX + 19, _startPosX + 16, _startPosX + 12, _startPosX + 12, _startPosX + 11, _startPosX + 15, _startPosX + 16};
+ int yPontsStar[] = {_startPosY + 35, _startPosY + 38, _startPosY + 38, _startPosY + 42, _startPosY + 45, _startPosY + 42, _startPosY + 45, _startPosY + 41, _startPosY + 38, _startPosY + 38, _startPosY + 35};
+ g.drawPolygon(xPontsStar, yPontsStar, xPontsStar.length);
+ g.fillPolygon(xPontsStar, yPontsStar, xPontsStar.length);
+ }
+
+ public void DrawWheels(Graphics g, int _startPosX, int _startPosY){
+ g.setColor(Color.BLACK);
+ g.fillOval(10 + _startPosX, 42 + _startPosY, 20, 20);
+ }
+ public void Draw(Graphics g, int _startPosX, int _startPosY) {
+ if (wheels == CountWheels.Two){
+ DrawWheels(g,_startPosX, _startPosY);
+ DrawWheels(g,_startPosX + 100, _startPosY);
+
+ CaterpillarStar(g,_startPosX + 5, _startPosY + 12);
+ CaterpillarStar(g,_startPosX + 105, _startPosY + 12);
+ }
+
+ if (wheels == CountWheels.Three) {
+ DrawWheels(g,_startPosX, _startPosY);
+ DrawWheels(g,_startPosX + 50, _startPosY);
+ DrawWheels(g,_startPosX + 100, _startPosY);
+
+ CaterpillarStar(g,_startPosX + 5, _startPosY + 12);
+ CaterpillarStar(g,_startPosX + 55, _startPosY + 12);
+ CaterpillarStar(g,_startPosX + 105, _startPosY + 12);
+ }
+
+ if (wheels == CountWheels.Four) {
+ DrawWheels(g,_startPosX, _startPosY);
+ DrawWheels(g,_startPosX + 25, _startPosY);
+ DrawWheels(g,_startPosX + 50, _startPosY);
+ DrawWheels(g,_startPosX + 100, _startPosY);
+
+ CaterpillarStar(g,_startPosX + 5, _startPosY + 12);
+ CaterpillarStar(g,_startPosX + 30, _startPosY + 12);
+ CaterpillarStar(g,_startPosX + 55, _startPosY + 12);
+ CaterpillarStar(g,_startPosX + 105, _startPosY + 12);
+ }
+
+ if(wheels == CountWheels.Five) {
+ DrawWheels(g,_startPosX, _startPosY);
+ DrawWheels(g,_startPosX + 25, _startPosY);
+ DrawWheels(g,_startPosX + 50, _startPosY);
+ DrawWheels(g,_startPosX + 75, _startPosY);
+ DrawWheels(g,_startPosX + 100, _startPosY);
+
+ CaterpillarStar(g,_startPosX + 5, _startPosY + 12);
+ CaterpillarStar(g,_startPosX + 30, _startPosY + 12);
+ CaterpillarStar(g,_startPosX + 55, _startPosY + 12);
+ CaterpillarStar(g,_startPosX + 80, _startPosY + 12);
+ CaterpillarStar(g,_startPosX + 105, _startPosY + 12);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Tank/src/DrawingField.java b/Tank/src/DrawingField.java
deleted file mode 100644
index 5f782e8..0000000
--- a/Tank/src/DrawingField.java
+++ /dev/null
@@ -1,54 +0,0 @@
-import javax.swing.*;
-import java.awt.*;
-import java.util.Random;
-
-public class DrawingField extends JPanel {
- private final FormTank field;
- DrawingTank _Tank;
- public DrawingField(FormTank field) {
- this.field = field;
- }
- @Override
- protected void paintComponent(Graphics g) {
- super.paintComponent(g);
- Graphics2D g2 =(Graphics2D)g;
- if (_Tank!=null)
- _Tank.DrawTransport(g2);
- else return;
- }
- public void UpButtonAction(){
- if (_Tank!=null)
- _Tank.MoveTransport(Direction.Up);
- else
- return;
- }
- public void DownButtonAction(){
- if (_Tank!=null)
- _Tank.MoveTransport(Direction.Down);
- else
- return;
- }
- public void RightButtonAction(){
- if (_Tank!=null)
- _Tank.MoveTransport(Direction.Right);
- else
- return;
- }
- public void LeftButtonAction(){
- if (_Tank!=null)
- _Tank.MoveTransport(Direction.Left);
- else
- return;
- }
- public void CreateButtonAction(){
- Random rnd=new Random();
- _Tank=new DrawingTank();
- _Tank.Init(rnd.nextInt(50)+10,rnd.nextInt(100)+500,new Color(rnd.nextInt(256),rnd.nextInt(256),rnd.nextInt(256)));
- _Tank.SetPosition(rnd.nextInt(100)+10,rnd.nextInt(100)+10,getWidth(),getHeight());
- }
- public void ResizeField(){
- if (_Tank!=null)
- _Tank.ChangeBorders(getWidth(),getHeight());
- else return;
- }
-}
diff --git a/Tank/src/DrawingObjectTank.java b/Tank/src/DrawingObjectTank.java
new file mode 100644
index 0000000..ddb9b50
--- /dev/null
+++ b/Tank/src/DrawingObjectTank.java
@@ -0,0 +1,17 @@
+public class DrawingObjectTank implements IMoveableObject {
+ private DrawingArmoVehicle _ArmoVehicle = null;
+ public DrawingObjectTank(DrawingArmoVehicle drawingTrain)
+ {
+ _ArmoVehicle = drawingTrain;
+ }
+ public ObjectParameters GetObjectPosition() {
+ if (_ArmoVehicle == null || _ArmoVehicle.ArmoVehicle == null) {
+ return null;
+ }
+ return new ObjectParameters(_ArmoVehicle.GetPosX(),_ArmoVehicle.GetPosY(),
+ _ArmoVehicle.GetWidth(), _ArmoVehicle.GetHeight());
+ }
+ public int GetStep(){ return (int)_ArmoVehicle.ArmoVehicle.Step; }
+ public boolean CheckCanMove(Direction direction) { return _ArmoVehicle.CanMove(direction);}
+ public void MoveObject(Direction direction) { _ArmoVehicle.MoveTransport(direction); }
+}
diff --git a/Tank/src/DrawingSuspensionOrnament.java b/Tank/src/DrawingSuspensionOrnament.java
new file mode 100644
index 0000000..1f5f1e7
--- /dev/null
+++ b/Tank/src/DrawingSuspensionOrnament.java
@@ -0,0 +1,65 @@
+import java.awt.*;
+
+public class DrawingSuspensionOrnament implements IOrnamentForm {
+ private CountWheels wheels;
+ private Color additionalColor;
+ public CountWheels getNumWheel() {
+ return wheels;
+ }
+
+ public void setDigit(int number) {
+ switch(number){
+ case 2:
+ wheels = CountWheels.Two;
+ break;
+ case 3:
+ wheels = CountWheels.Three;
+ break;
+ case 4:
+ wheels = CountWheels.Four;
+ break;
+ default:
+ wheels = CountWheels.Two;
+ break;
+ }
+ }
+
+ public void DrawWheels(Graphics g, int _startPosX, int _startPosY) {
+ g.setColor(Color.BLACK);
+ g.fillOval(10 + _startPosX, 42 + _startPosY, 20, 20);
+ }
+
+ public void Draw(Graphics g, int _startPosX, int _startPosY) {
+ if (wheels == CountWheels.Two){
+ DrawWheels(g,_startPosX, _startPosY);
+ DrawWheels(g,_startPosX + 100, _startPosY);
+ additionalColor = Color.RED;
+ g.setColor(additionalColor);
+ g.fillRect(_startPosX + 27, _startPosY + 50, 10, 3);
+ g.fillRect(_startPosX + 100, _startPosY + 50, 10, 3);
+ }
+
+ if (wheels == CountWheels.Three) {
+ DrawWheels(g,_startPosX, _startPosY);
+ DrawWheels(g,_startPosX + 50, _startPosY);
+ DrawWheels(g,_startPosX + 100, _startPosY);
+
+ g.fillRect(_startPosX + 27, _startPosY + 50, 10, 3);
+ g.fillRect(_startPosX + 51, _startPosY + 50, 10, 3);
+ g.fillRect(_startPosX + 100, _startPosY + 50, 10, 3);
+ }
+
+ if (wheels == CountWheels.Four) {
+ DrawWheels(g,_startPosX, _startPosY);
+ DrawWheels(g,_startPosX + 25, _startPosY);
+ DrawWheels(g,_startPosX + 50, _startPosY);
+ DrawWheels(g,_startPosX + 75, _startPosY);
+ DrawWheels(g,_startPosX + 100, _startPosY);
+
+ g.fillRect(_startPosX + 27, _startPosY + 50, 10, 3);
+ g.fillRect(_startPosX + 51, _startPosY + 50, 10, 3);
+ g.fillRect(_startPosX + 80, _startPosY + 50, 10, 3);
+ g.fillRect(_startPosX + 101, _startPosY + 50, 10, 3);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Tank/src/DrawingTank.java b/Tank/src/DrawingTank.java
index 1f363ce..a7cd8db 100644
--- a/Tank/src/DrawingTank.java
+++ b/Tank/src/DrawingTank.java
@@ -1,143 +1,69 @@
import java.awt.*;
-public class DrawingTank {
- public EntityTank Tank;
- public EntityTank getTank() {
- return Tank;
- }
- public DrawingWheels Wheels;
- private int _startPosX;
- private int _startPosY;
- private Integer _pictureWidth = null;
- private Integer _pictureHeight = null;
- private final int _TankWidth = 175;
- private final int _TankHeight = 100;
+public class DrawingTank extends DrawingArmoVehicle {
+ protected IOrnamentForm OrnamentsForm;
+ private boolean WheelsOrnament;
+ private Color AdditionalColor;
+ private boolean OrnamentAdd;
- public void Init(int speed, float weight, Color bodyColor)
+ public DrawingTank(int speed, double weight, Color bodyColor, int _numWheel, Color additionalColor, boolean bodyKit, boolean caterpillar, boolean tower, int width, int height, boolean wheelsOrnament, boolean ornamentAdd)
{
- Tank = new EntityTank();
- Tank.Init(speed, weight, bodyColor);
- Wheels = new DrawingWheels();
- Wheels.SetCountWheels((int)(2 + Math.random() + Math.random()*2));
+ super(speed, weight, bodyColor, _numWheel, width, height);
+ ArmoVehicle = new EntityTank(speed, weight, bodyColor, _numWheel, additionalColor, bodyKit, caterpillar, tower);
+ _TankWidth = ((EntityTank)ArmoVehicle).BodyKit ? 169 : 83;
+
+ this.AdditionalColor = additionalColor;
+ this.OrnamentAdd = ornamentAdd;
}
- public void SetPosition(int x, int y, int width, int height)
- {
- if (x >= 0 && x+_TankWidth <= width && y >= 0 && y+_TankHeight <= height)
- {
- _startPosX = x;
- _startPosY = y;
- _pictureWidth = width;
- _pictureHeight = height;
- }
+ public void SetPosition(int x, int y) {
+ _startPosX = Math.min(x, _pictureWidth-_TankWidth);
+ _startPosY = Math.min(y, _pictureHeight-_TankHeight);
}
- public void MoveTransport(Direction direction)
- {
- if (_pictureWidth == null || _pictureHeight == null)
- {
+ public boolean isOrnamentAdd() {
+ return OrnamentAdd;
+ }
+ private void setOrnamentAdd(boolean ornamentAdd) {
+ this.OrnamentAdd = ornamentAdd;
+ }
+
+ public void DrawTransport(Graphics2D g) {
+ if (ArmoVehicle == null) {
return;
}
- switch (direction)
- {
- case Right:
- if (_startPosX + _TankWidth + Tank.Step < _pictureWidth)
- {
- _startPosX += Tank.Step;
- }
- break;
+ super.DrawTransport(g);
- case Left:
- if (_startPosX- Tank.Step >= 0)
- {
- _startPosX -= Tank.Step;
- }
- break;
+ if (((EntityTank) ArmoVehicle).BodyKit) {
+ g.setColor(Color.DARK_GRAY);
+ int[] xPointsBody = {_startPosX + 52, _startPosX + 52, _startPosX + 40, _startPosX + 15,_startPosX + 15, _startPosX + 60,_startPosX + 90,_startPosX + 120,_startPosX + 100,_startPosX + 95, _startPosX + 90};
+ int[] yPointsBody = {_startPosY + 30, _startPosY + 27, _startPosY + 23, _startPosY + 18,_startPosY + 15, _startPosY + 11,_startPosY + 11,_startPosY + 20,_startPosY + 25,_startPosY + 27,_startPosY + 30};
+ int nPointsBody = xPointsBody.length;
- case Up:
- if (_startPosY - Tank.Step >= 0)
- {
- _startPosY -= Tank.Step;
- }
- break;
-
- case Down:
- if (_startPosY + _TankHeight + Tank.Step < _pictureHeight)
- {
- _startPosY += Tank.Step;
- }
- break;
- }
- }
- public void DrawTransport(Graphics g)
- {
- if (_startPosX < 0 || _startPosY < 0 || _pictureHeight== null || _pictureWidth== null)
- {
- return;
+ g.drawPolygon(xPointsBody,yPointsBody,nPointsBody);
+ g.fillPolygon(xPointsBody,yPointsBody,nPointsBody);
}
- Graphics2D g2 = (Graphics2D) g;
-
- //Гусеница
- Color Gray = new Color(128, 128, 128);
- g2.setColor(Gray);
- g2.drawOval(_startPosX + 10, _startPosY + 30, 120, 30);
-
- // Ведущие колёса танка (в размере чуть меньше)
- g2.setColor(Color.BLACK);
- g2.drawOval(_startPosX + 113, _startPosY + 41, 11, 11);
- g2.fillOval(_startPosX + 113, _startPosY + 41, 11, 11);
- g2.drawOval(_startPosX + 13, _startPosY + 40, 11, 11);
- g2.fillOval(_startPosX + 13, _startPosY + 40, 11, 11);
- Wheels.DrawWheels(g2, _startPosX, _startPosY);
-
- // Корпус танка
- g2.setColor(Color.DARK_GRAY);
- int[] xPoints = {_startPosX + 5, _startPosX + 140, _startPosX + 130,_startPosX + 12};
- int[] yPoints = {_startPosY + 30, _startPosY + 30, _startPosY + 42, _startPosY + 42};
- int nPoints = 4;
- g2.drawPolygon(xPoints,yPoints,nPoints);
- g2.fillPolygon(xPoints,yPoints,nPoints);
-
- // Башня
- int[] xPointsBody = {_startPosX + 52, _startPosX + 52, _startPosX + 40, _startPosX + 15,_startPosX + 15, _startPosX + 60,_startPosX + 90,_startPosX + 120,_startPosX + 100,_startPosX + 95, _startPosX + 90};
- int[] yPointsBody = {_startPosY + 30, _startPosY + 27, _startPosY + 23, _startPosY + 18,_startPosY + 15, _startPosY + 11,_startPosY + 11,_startPosY + 20,_startPosY + 25,_startPosY + 27,_startPosY + 30};
- int nPointsBody = 11;
-
- g2.drawPolygon(xPointsBody,yPointsBody,nPointsBody);
- g2.fillPolygon(xPointsBody,yPointsBody,nPointsBody);
-
- // Орудие
- g2.drawRect(_startPosX + 112, _startPosY+17, 50, 5);
- g2.fillRect(_startPosX + 112, _startPosY+17, 50, 5);
-
- // Зенитное орудие
- int[] xPointsGun = {_startPosX + 45, _startPosX + 45, _startPosX + 41, _startPosX + 41, _startPosX + 42, _startPosX + 41, _startPosX + 44,_startPosX + 50 ,_startPosX + 52,_startPosX + 53, _startPosX + 58};
- int[] yPointsGun = {_startPosY + 12, _startPosY + 10, _startPosY + 8, _startPosY + 7, _startPosY + 5, _startPosY + 4,_startPosY + 3,_startPosY + 3,_startPosY + 5,_startPosY + 7,_startPosY + 10};
- int nPointsGun = 11;
-
- g2.fillRect(_startPosX + 50, _startPosY+5, 20, 2);
- g2.drawPolygon(xPointsGun,yPointsGun,nPointsGun);
- g2.fillPolygon(xPointsGun,yPointsGun,nPointsGun);
- }
-
- public void ChangeBorders(int width,int height)
- {
- _pictureWidth = width;
- _pictureHeight = height;
- if (_pictureWidth<=_TankWidth||_pictureHeight<=_TankHeight)
- {
- _pictureWidth = null;
- _pictureHeight = null;
- return;
+ if (((EntityTank) ArmoVehicle).Caterpillar) {
+ Color Gray = new Color(128, 128, 128);
+ g.setColor(Gray);
+ g.drawOval(_startPosX + 10, _startPosY + 30, 120, 30);
}
- if (_startPosX + _TankWidth > _pictureWidth)
- {
- _startPosX = _pictureWidth - _TankWidth;
- }
- if (_startPosY + _TankHeight > _pictureHeight)
- {
- _startPosY = _pictureHeight - _TankHeight;
+
+ if (((EntityTank) ArmoVehicle).Tower) {
+ g.setColor(AdditionalColor);
+ // Орудие
+ g.drawRect(_startPosX + 112, _startPosY + 17, 60, 4);
+ g.fillRect(_startPosX + 112, _startPosY + 17, 60, 4);
+
+ // Зенитное орудие
+ int[] xPointsGun = {_startPosX + 45, _startPosX + 45, _startPosX + 41, _startPosX + 41, _startPosX + 42, _startPosX + 41, _startPosX + 44,_startPosX + 50 ,_startPosX + 52,_startPosX + 53, _startPosX + 58};
+ int[] yPointsGun = {_startPosY + 12, _startPosY + 10, _startPosY + 8, _startPosY + 7, _startPosY + 5, _startPosY + 4,_startPosY + 3,_startPosY + 3,_startPosY + 5,_startPosY + 7,_startPosY + 10};
+ int nPointsGun = xPointsGun.length;
+
+ g.fillRect(_startPosX + 50, _startPosY + 5, 20, 2);
+ g.drawPolygon(xPointsGun,yPointsGun,nPointsGun);
+ g.fillPolygon(xPointsGun,yPointsGun,nPointsGun);
}
}
}
diff --git a/Tank/src/DrawingWheels.java b/Tank/src/DrawingWheels.java
deleted file mode 100644
index 397c052..0000000
--- a/Tank/src/DrawingWheels.java
+++ /dev/null
@@ -1,50 +0,0 @@
-import java.awt.*;
-
-public class DrawingWheels {
-
- private CountWheels _wheels;
-
- public void SetCountWheels(int Count){
- for (CountWheels temp: CountWheels.values())
- if (temp.getCountWheels() == Count){
- _wheels=temp;
- return;
- }
- }
-
- public void DrawWheels(Graphics2D g,int _startPosX, int _startPosY) {
- switch (_wheels.getCountWheels())
- {
- case 2:
- // Отрисовка 2 катков
- g.setColor(Color.BLACK);
- g.drawOval(_startPosX + 30, _startPosY + 42, 15, 15);
- g.fillOval(_startPosX + 30, _startPosY + 42, 15, 15);
- g.drawOval(_startPosX + 50, _startPosY + 45, 15, 15);
- g.fillOval(_startPosX + 50, _startPosY + 45, 15, 15);
- break;
- case 3:
- // Отрисовка 3 катков
- g.setColor(Color.BLACK);
- g.drawOval(_startPosX + 30, _startPosY + 42, 15, 15);
- g.fillOval(_startPosX + 30, _startPosY + 42, 15, 15);
- g.drawOval(_startPosX + 50, _startPosY + 45, 15, 15);
- g.fillOval(_startPosX + 50, _startPosY + 45, 15, 15);
- g.drawOval(_startPosX + 75, _startPosY + 45, 15, 15);
- g.fillOval(_startPosX + 75, _startPosY + 45, 15, 15);
- break;
- case 4:
- // Отрисовка 4 катков
- g.setColor(Color.BLACK);
- g.drawOval(_startPosX + 30, _startPosY + 42, 15, 15);
- g.fillOval(_startPosX + 30, _startPosY + 42, 15, 15);
- g.drawOval(_startPosX + 50, _startPosY + 45, 15, 15);
- g.fillOval(_startPosX + 50, _startPosY + 45, 15, 15);
- g.drawOval(_startPosX + 75, _startPosY + 45, 15, 15);
- g.fillOval(_startPosX + 75, _startPosY + 45, 15, 15);
- g.drawOval(_startPosX + 95, _startPosY + 42, 15, 15);
- g.fillOval(_startPosX + 95, _startPosY + 42, 15, 15);
- break;
- }
- }
-}
diff --git a/Tank/src/DrawingWheelsCombination.java b/Tank/src/DrawingWheelsCombination.java
new file mode 100644
index 0000000..640fa21
--- /dev/null
+++ b/Tank/src/DrawingWheelsCombination.java
@@ -0,0 +1,104 @@
+import java.awt.*;
+
+public class DrawingWheelsCombination implements IOrnamentForm {
+ private CountWheels _wheels;
+ private CountWheels wheels;
+ private Color additionalColor;
+ public CountWheels getNumWheel() {
+ return wheels;
+ }
+
+ public void setDigit(int number) {
+ switch(number) {
+ case 2:
+ wheels = CountWheels.Two;
+ break;
+ case 3:
+ wheels = CountWheels.Three;
+ break;
+ case 4:
+ wheels = CountWheels.Four;
+ break;
+ default:
+ wheels = CountWheels.Two;
+ break;
+ }
+ }
+
+ public void CaterpillarStar(Graphics g, int _startPosX, int _startPosY) {
+ additionalColor = Color.RED;
+ g.setColor(additionalColor);
+ int xPontsStar[] = {_startPosX + 15, _startPosX + 18, _startPosX + 21, _startPosX + 18, _startPosX + 19, _startPosX + 16, _startPosX + 12, _startPosX + 13, _startPosX + 12, _startPosX + 15, _startPosX + 16};
+ int yPontsStar[] = {_startPosY + 35, _startPosY + 38, _startPosY + 38, _startPosY + 42, _startPosY + 45, _startPosY + 42, _startPosY + 45, _startPosY + 41, _startPosY + 38, _startPosY + 38, _startPosY + 35};
+ g.drawPolygon(xPontsStar, yPontsStar, xPontsStar.length);
+ g.fillPolygon(xPontsStar, yPontsStar, xPontsStar.length);
+ }
+
+ public void DrawWheels(Graphics g, int _startPosX, int _startPosY){
+ g.setColor(Color.BLACK);
+ g.fillOval(10 + _startPosX, 42 + _startPosY, 20, 20);
+ }
+
+ public void Draw(Graphics g, int _startPosX, int _startPosY) {
+ if (wheels == CountWheels.Two){
+ DrawWheels(g,_startPosX, _startPosY);
+ DrawWheels(g,_startPosX + 100, _startPosY);
+
+ g.fillRect(_startPosX + 27, _startPosY + 50, 10, 3);
+ g.fillRect(_startPosX + 101, _startPosY + 50, 10, 3);
+
+ CaterpillarStar(g,_startPosX + 5, _startPosY + 12);
+ CaterpillarStar(g,_startPosX + 105, _startPosY + 12);
+
+ }
+ if (wheels == CountWheels.Three) {
+ DrawWheels(g,_startPosX, _startPosY);
+ DrawWheels(g,_startPosX + 50, _startPosY);
+ DrawWheels(g,_startPosX + 100, _startPosY);
+
+ g.fillRect(_startPosX + 27, _startPosY + 50, 10, 3);
+ g.fillRect(_startPosX + 51, _startPosY + 50, 10, 3);
+ g.fillRect(_startPosX + 100, _startPosY + 50, 10, 3);
+
+ CaterpillarStar(g,_startPosX + 5, _startPosY + 12);
+ CaterpillarStar(g,_startPosX + 55, _startPosY + 12);
+ CaterpillarStar(g,_startPosX + 105, _startPosY + 12);
+ }
+
+ if (wheels == CountWheels.Four) {
+ DrawWheels(g,_startPosX, _startPosY);
+ DrawWheels(g,_startPosX + 25, _startPosY);
+ DrawWheels(g,_startPosX + 50, _startPosY);
+ DrawWheels(g,_startPosX + 100, _startPosY);
+
+ g.fillRect(_startPosX + 27, _startPosY + 50, 10, 3);
+ g.fillRect(_startPosX + 51, _startPosY + 50, 10, 3);
+ g.fillRect(_startPosX + 80, _startPosY + 50, 10, 3);
+ g.fillRect(_startPosX + 101, _startPosY + 50, 10, 3);
+
+ CaterpillarStar(g,_startPosX + 5, _startPosY + 12);
+ CaterpillarStar(g,_startPosX + 30, _startPosY + 12);
+ CaterpillarStar(g,_startPosX + 55, _startPosY + 12);
+ CaterpillarStar(g,_startPosX + 105, _startPosY + 12);
+
+ }
+ if(wheels == CountWheels.Five) {
+ DrawWheels(g,_startPosX, _startPosY);
+ DrawWheels(g,_startPosX + 25, _startPosY);
+ DrawWheels(g,_startPosX + 50, _startPosY);
+ DrawWheels(g,_startPosX + 75, _startPosY);
+ DrawWheels(g,_startPosX + 100, _startPosY);
+
+ g.fillRect(_startPosX + 27, _startPosY + 50, 10, 3);
+ g.fillRect(_startPosX + 51, _startPosY + 50, 10, 3);
+ g.fillRect(_startPosX + 80, _startPosY + 50, 10, 3);
+ g.fillRect(_startPosX + 101, _startPosY + 50, 10, 3);
+
+ CaterpillarStar(g,_startPosX + 5, _startPosY + 12);
+ CaterpillarStar(g,_startPosX + 30, _startPosY + 12);
+ CaterpillarStar(g,_startPosX + 55, _startPosY + 12);
+ CaterpillarStar(g,_startPosX + 80, _startPosY + 12);
+ CaterpillarStar(g,_startPosX + 105, _startPosY + 12);
+ }
+ }
+}
diff --git a/Tank/src/EntityArmoVehicle.java b/Tank/src/EntityArmoVehicle.java
new file mode 100644
index 0000000..772099b
--- /dev/null
+++ b/Tank/src/EntityArmoVehicle.java
@@ -0,0 +1,20 @@
+import java.awt.*;
+
+public class EntityArmoVehicle {
+ public int Speed;
+ public double Weight;
+ public double getWeight() {
+ return Weight;
+ }
+ public Color BodyColor;
+ public double Step;
+ public int numWheel;
+
+ public EntityArmoVehicle(int speed, double weight, Color bodyColor, int _numWheel) {
+ Speed = speed;
+ Weight = weight;
+ BodyColor = bodyColor;
+ numWheel = _numWheel;
+ Step = (double) Speed * 300 / Weight;
+ }
+}
diff --git a/Tank/src/EntityTank.java b/Tank/src/EntityTank.java
index 37840a1..bca2e31 100644
--- a/Tank/src/EntityTank.java
+++ b/Tank/src/EntityTank.java
@@ -1,27 +1,20 @@
import java.awt.*;
-import java.util.Random;
-public class EntityTank {
- private int Speed;
- public int getSpeed() {
- return Speed;
- }
- private float Weight;
- public float getWeight() {
- return Weight;
- }
- private Color BodyColor;
- public Color getBodyColor() {
- return BodyColor;
- }
- public float Step;
+public class EntityTank extends EntityArmoVehicle {
+ public Color AdditionalColor;
+ public boolean BodyKit;
+ public boolean Caterpillar;
+ public boolean Tower;
- public void Init(int speed, float weight, Color bodyColor){
- Random rnd = new Random();
- Speed = speed <= 0 ? rnd.nextInt(50)+10 : speed;
- Weight = weight <= 0 ? rnd.nextInt(100)+500 : weight;
- BodyColor = bodyColor;
- Step = Speed * 600 / (int)Weight;
+ public EntityTank(int speed, double weight, Color bodyColor, int _numWheel, Color additionalColor, boolean bodyKit, boolean caterpillar, boolean tower)
+ {
+ super(speed, weight, bodyColor, _numWheel);
+ AdditionalColor = additionalColor;
+ BodyKit = bodyKit;
+ Caterpillar = caterpillar;
+ Tower = tower;
}
}
+
+
diff --git a/Tank/src/FormTank.form b/Tank/src/FormTank.form
new file mode 100644
index 0000000..b5e14d1
--- /dev/null
+++ b/Tank/src/FormTank.form
@@ -0,0 +1,112 @@
+
+
diff --git a/Tank/src/FormTank.java b/Tank/src/FormTank.java
index f094dbe..be2a7cf 100644
--- a/Tank/src/FormTank.java
+++ b/Tank/src/FormTank.java
@@ -1,135 +1,149 @@
import javax.swing.*;
import java.awt.*;
-import java.awt.event.ComponentAdapter;
-import java.awt.event.ComponentEvent;
-public class FormTank extends JFrame{
- private int Width;
- private int Height;
+import java.awt.event.ActionListener;
+import java.util.Random;
- JPanel BottomPanel = new JPanel();
- JPanel CreatePanel = new JPanel();
- JPanel BottomAndCreatePanel = new JPanel();
- JPanel DimentionPanel = new JPanel();
- JPanel UpPanel = new JPanel();
- JPanel DownPanel = new JPanel();
- JPanel LRPanel = new JPanel();
+public class FormTank {
+ DrawingArmoVehicle _drawingTank;
+ AbstractStrategy _abstractStrategy;
+ private JButton buttonCreateTank;
+ private JPanel pictureBox;
+ private JButton buttonDown;
+ private JButton buttonUp;
+ private JButton buttonLeft;
+ private JButton buttonRight;
+ private JButton buttonCreateVehicle;
+ private JComboBox comboBoxStrategy;
+ private JButton buttonStep;
- DrawingField field = new DrawingField(this);
-
- JButton ButtonCreate=new JButton("Создать");
- Icon iconUp = new ImageIcon("Resources/KeyUp.png");
- JButton ButtonUp=new JButton(iconUp);
-
- Icon iconDown = new ImageIcon("Resources/KeyDown.png");
- JButton ButtonDown=new JButton(iconDown);
-
- Icon iconRight = new ImageIcon("Resources/KeyRight.png");
- JButton ButtonRight=new JButton(iconRight);
-
- Icon iconLeft = new ImageIcon("Resources/KeyLeft.png");
- JButton ButtonLeft=new JButton(iconLeft);
- public FormTank(){
- super("Tank");
- setSize(800,600);
- Width=getWidth();
- Height=getHeight();
- ShowWindow();
- RefreshWindow();
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- setVisible(true);
+ public JPanel getPictureBox() {
+ return pictureBox;
}
- public void ShowWindow(){
+ public FormTank() {
+ buttonUp.setName("buttonUp");
+ buttonDown.setName("buttonDown");
+ buttonLeft.setName("buttonLeft");
+ buttonRight.setName("buttonRight");
- Dimension dimen=new Dimension(30,30);
+ ImageIcon iconUp = new ImageIcon("Resources/KeyUp.png");
+ buttonUp.setIcon(iconUp);
+ ImageIcon iconDown = new ImageIcon("Resources/KeyDown.png");
+ buttonDown.setIcon(iconDown);
+ ImageIcon iconRight = new ImageIcon("Resources/KeyRight.png");
+ buttonRight.setIcon(iconRight);
+ ImageIcon iconLeft = new ImageIcon("Resources/KeyLeft.png");
+ buttonLeft.setIcon(iconLeft);
- // Обработка нажатия кнопки
- ButtonUp.setPreferredSize(dimen);
- ButtonUp.addActionListener(e->{
- field.UpButtonAction();
- repaint();
+ buttonCreateTank.addActionListener(e -> {
+ Random random = new Random();
+ _drawingTank = new DrawingTank(
+ random.nextInt(100, 300),
+ random.nextInt(1000, 3000),
+ new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256)),
+ random.nextInt(2, 6),
+ new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256)),
+ true,
+ true,
+ true,
+ pictureBox.getWidth(),
+ pictureBox.getHeight(),
+ true,
+ true
+ );
+
+ _drawingTank.SetWheels(random.nextInt(2, 6));
+ _drawingTank.SetPosition(random.nextInt(10, 100), random.nextInt(10, 100));
+
+ Draw();
});
- // Обработка нажатия кнопки
- ButtonDown.setPreferredSize(dimen);
- ButtonDown.addActionListener(e->{
- field.DownButtonAction();
- repaint();
+ buttonCreateVehicle.addActionListener(e -> {
+ Random random = new Random();
+ _drawingTank = new DrawingArmoVehicle(
+ random.nextInt(100, 300),
+ random.nextInt(1000, 3000),
+ new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256)),
+ random.nextInt(2, 6),
+ pictureBox.getWidth(),
+ pictureBox.getHeight()
+ );
+
+ _drawingTank.SetWheels(random.nextInt(2, 6));
+ _drawingTank.SetPosition(random.nextInt(10, 100), random.nextInt(10, 100));
+
+ Draw();
});
- // Обработка нажатия кнопки
- ButtonRight.setPreferredSize(dimen);
- ButtonRight.addActionListener(e->{
- field.RightButtonAction();
- repaint();
- });
+ buttonStep.addActionListener(e -> {
+ if (_drawingTank == null)
+ return;
+ if (comboBoxStrategy.isEnabled()) {
+ _abstractStrategy = null;
+ int comboBoxStrategySelectedIndex = comboBoxStrategy.getSelectedIndex();
+ if (comboBoxStrategySelectedIndex == 0) {
+ _abstractStrategy = new MoveToCenter();
+ } else if (comboBoxStrategySelectedIndex == 1) {
+ _abstractStrategy = new MoveToBorder();
+ }
+ if (_abstractStrategy == null)
+ return;
+ _abstractStrategy.SetData(new DrawingObjectTank(_drawingTank), pictureBox.getWidth(), pictureBox.getHeight());
+ comboBoxStrategy.setEnabled(false);
+ }
- // Обработка нажатия кнопки
- ButtonLeft.setPreferredSize(dimen);
- ButtonLeft.addActionListener(e->{
- field.LeftButtonAction();
- repaint();
- });
-
- // Добавление кнопок на панель (Левая и правая стрелки)
- LRPanel.setLayout(new FlowLayout(FlowLayout.CENTER,50,0));
- LRPanel.setBackground(new Color(0,0,0,0));
- LRPanel.add(ButtonLeft);
- LRPanel.add(ButtonRight);
-
- // Добавление кнопки (Стрелка вверх)
- UpPanel.setLayout(new FlowLayout());
- UpPanel.setBackground(new Color(0,0,0,0));
- UpPanel.add(ButtonUp);
-
- // Добавление кнопки (Стрелка вниз)
- DownPanel.setLayout(new FlowLayout());
- DownPanel.setBackground(new Color(0,0,0,0));
- DownPanel.add(ButtonDown);
-
- DimentionPanel.setLayout(new BoxLayout(DimentionPanel,BoxLayout.Y_AXIS));
- DimentionPanel.setBackground(new Color(0,0,0,0));
- DimentionPanel.add(UpPanel);
- DimentionPanel.add(LRPanel);
- DimentionPanel.add(DownPanel);
- add(DimentionPanel);
-
- // нажатие кнопки
- CreatePanel.setLayout(new FlowLayout());
- CreatePanel.setBackground(new Color(0,0,0,0));
- CreatePanel.add(ButtonCreate);
- ButtonCreate.addActionListener(e->{
- field.CreateButtonAction();
- repaint();
- });
-
- BottomPanel.setLayout(new FlowLayout());
- BottomPanel.setBackground(new Color(0,0,0,0));
-
- BottomAndCreatePanel.setLayout(new BoxLayout(BottomAndCreatePanel,BoxLayout.Y_AXIS));
- BottomAndCreatePanel.setBackground(new Color(0,0,0,0));
- BottomAndCreatePanel.add(CreatePanel);
- BottomAndCreatePanel.add(BottomPanel);
-
- add(BottomAndCreatePanel);
- add(field);
-
- addComponentListener(new ComponentAdapter() {
- @Override
- public void componentResized(ComponentEvent e) {
- super.componentResized(e);
- Width=getWidth();
- Height=getHeight();
-
- field.ResizeField();
- repaint();
- RefreshWindow();
+ if (_abstractStrategy == null)
+ return;
+ _abstractStrategy.MakeStep();
+ Draw();
+ if (_abstractStrategy.GetStatus() == Status.Finish) {
+ comboBoxStrategy.setEnabled(true);
+ _abstractStrategy = null;
}
});
+
+ ActionListener buttonMoveClickedListener = e -> {
+ String buttonName = ((JButton) e.getSource()).getName();
+
+ switch (buttonName) {
+ case ("buttonUp") -> {
+ _drawingTank.MoveTransport(Direction.Up);
+ }
+ case ("buttonDown") -> {
+ _drawingTank.MoveTransport(Direction.Down);
+ }
+ case ("buttonLeft") -> {
+ _drawingTank.MoveTransport(Direction.Left);
+ }
+ case ("buttonRight") -> {
+ _drawingTank.MoveTransport(Direction.Right);
+ }
+ }
+
+ Draw();
+ };
+
+ buttonUp.addActionListener(buttonMoveClickedListener);
+ buttonDown.addActionListener(buttonMoveClickedListener);
+ buttonLeft.addActionListener(buttonMoveClickedListener);
+ buttonRight.addActionListener(buttonMoveClickedListener);
}
- public void RefreshWindow(){
- field.setBounds(0,0,Width,Height);
- BottomAndCreatePanel.setBounds(-320,Height-110,Width,80);
- DimentionPanel.setBounds(Width-170,Height-170,190,140);
+
+ public void Draw() {
+ if (_drawingTank == null) {
+ return;
+ }
+
+ Graphics g = pictureBox.getGraphics();
+ pictureBox.paint(g);
+ _drawingTank.DrawTransport((Graphics2D)g);
+ }
+
+ private void createUIComponents() {
+ String[] strategiesList = {
+ "Движение к центру",
+ "Движение к краю формы"
+ };
+ comboBoxStrategy = new JComboBox(strategiesList);
}
}
diff --git a/Tank/src/FrameTank.java b/Tank/src/FrameTank.java
new file mode 100644
index 0000000..aa06d8e
--- /dev/null
+++ b/Tank/src/FrameTank.java
@@ -0,0 +1,17 @@
+import javax.swing.*;
+
+public class FrameTank extends JFrame {
+ private FormTank _formTank;
+
+ public FrameTank() {
+ super();
+ setTitle("Танк");
+ setDefaultCloseOperation(EXIT_ON_CLOSE);
+ _formTank = new FormTank();
+ setContentPane(_formTank.getPictureBox());
+ setDefaultLookAndFeelDecorated(false);
+ setLocation(300, 100);
+ pack();
+ setVisible(true);
+ }
+}
diff --git a/Tank/src/IMoveableObject.java b/Tank/src/IMoveableObject.java
new file mode 100644
index 0000000..d8f4c08
--- /dev/null
+++ b/Tank/src/IMoveableObject.java
@@ -0,0 +1,13 @@
+public interface IMoveableObject {
+ // Получение координаты X объекта
+ ObjectParameters GetObjectPosition();
+
+ // Шаг объекта
+ int GetStep();
+
+ // Проверка, можно ли переместиться по нужному направлению
+ boolean CheckCanMove(Direction direction);
+
+ /// Изменение направления пермещения объекта
+ void MoveObject(Direction direction);
+}
diff --git a/Tank/src/IOrnamentForm.java b/Tank/src/IOrnamentForm.java
new file mode 100644
index 0000000..e89364b
--- /dev/null
+++ b/Tank/src/IOrnamentForm.java
@@ -0,0 +1,7 @@
+import java.awt.*;
+
+public interface IOrnamentForm {
+ public CountWheels getNumWheel();
+ void setDigit(int number);
+ void Draw(Graphics g, int _startPosX, int _startPosY);
+}
\ No newline at end of file
diff --git a/Tank/src/Main.java b/Tank/src/Main.java
index 7c7e57b..984e71f 100644
--- a/Tank/src/Main.java
+++ b/Tank/src/Main.java
@@ -1,5 +1,5 @@
public class Main {
- public static void main(String[] args){
- new FormTank();
+ public static void main(String[] args) {
+ new FrameTank();
}
-}
+}
\ No newline at end of file
diff --git a/Tank/src/MoveToBorder.java b/Tank/src/MoveToBorder.java
new file mode 100644
index 0000000..079f792
--- /dev/null
+++ b/Tank/src/MoveToBorder.java
@@ -0,0 +1,36 @@
+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();
+ }
+ }
+ }
+}
diff --git a/Tank/src/MoveToCenter.java b/Tank/src/MoveToCenter.java
new file mode 100644
index 0000000..9b80709
--- /dev/null
+++ b/Tank/src/MoveToCenter.java
@@ -0,0 +1,35 @@
+public class MoveToCenter extends AbstractStrategy {
+ protected boolean IsTargetDestinaion() {
+ var objParams = GetObjectParameters();
+ if (objParams == null) {
+ return false;
+ }
+ return
+ Math.abs(objParams.ObjectMiddleHorizontal() - FieldWidth / 2) <= GetStep()
+ &&
+ Math.abs(objParams.ObjectMiddleVertical() - FieldHeight / 2) <= GetStep();
+ }
+
+ protected void MoveToTarget() {
+ var objParams = GetObjectParameters();
+ if (objParams == null) {
+ return;
+ }
+ var diffX = objParams.ObjectMiddleHorizontal() - FieldWidth / 2;
+ if (Math.abs(diffX) > GetStep()) {
+ if (diffX > 0) {
+ MoveLeft();
+ } else {
+ MoveRight();
+ }
+ }
+ var diffY = objParams.ObjectMiddleVertical() - FieldHeight / 2;
+ if (Math.abs(diffY) > GetStep()) {
+ if (diffY > 0) {
+ MoveUp();
+ } else {
+ MoveDown();
+ }
+ }
+ }
+}
diff --git a/Tank/src/ObjectParameters.java b/Tank/src/ObjectParameters.java
new file mode 100644
index 0000000..1039f53
--- /dev/null
+++ b/Tank/src/ObjectParameters.java
@@ -0,0 +1,44 @@
+public class ObjectParameters {
+ private int _x;
+ private int _y;
+ private int _width;
+ private int _height;
+
+ // Левая граница
+ public int LeftBorder() {
+ return _x;
+ }
+
+ // Верхняя граница
+ public int TopBorder() {
+ return _y;
+ }
+
+ // Правая граница
+ public int RightBorder() {
+ return _x + _width;
+ }
+
+ // Нижняя граница
+ public int DownBorder() {
+ return _y + _height;
+ }
+
+ // Середина объекта
+ public int ObjectMiddleHorizontal() {
+ return _x + _width / 2;
+ }
+
+ // Середина объекта
+ public int ObjectMiddleVertical() {
+ return _y + _height / 2;
+ }
+
+ // Конструктор
+ public ObjectParameters(int x, int y, int width, int height) {
+ _x = x;
+ _y = y;
+ _width = width;
+ _height = height;
+ }
+}
diff --git a/Tank/src/Status.java b/Tank/src/Status.java
new file mode 100644
index 0000000..6467ed7
--- /dev/null
+++ b/Tank/src/Status.java
@@ -0,0 +1,5 @@
+public enum Status {
+ NotInit,
+ InProgress,
+ Finish
+}