diff --git a/.idea/modules.xml b/.idea/modules.xml
index aae69c9..661d1b8 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -2,7 +2,7 @@
-
+
\ No newline at end of file
diff --git a/Material/KeyDown.jpg b/Material/KeyDown.jpg
new file mode 100644
index 0000000..f0945dd
Binary files /dev/null and b/Material/KeyDown.jpg differ
diff --git a/Material/KeyDown.png b/Material/KeyDown.png
new file mode 100644
index 0000000..ff09b70
Binary files /dev/null and b/Material/KeyDown.png differ
diff --git a/Material/KeyLeft.png b/Material/KeyLeft.png
new file mode 100644
index 0000000..b64110a
Binary files /dev/null and b/Material/KeyLeft.png differ
diff --git a/Material/KeyRight.png b/Material/KeyRight.png
new file mode 100644
index 0000000..478e541
Binary files /dev/null and b/Material/KeyRight.png differ
diff --git a/Material/KeyUp.png b/Material/KeyUp.png
new file mode 100644
index 0000000..0e4bf6f
Binary files /dev/null and b/Material/KeyUp.png differ
diff --git a/src/AbstractMap.java b/src/AbstractMap.java
new file mode 100644
index 0000000..ea02c9f
--- /dev/null
+++ b/src/AbstractMap.java
@@ -0,0 +1,146 @@
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.util.Random;
+
+public abstract class AbstractMap {
+ private IDrawingObject _drawingObject = null;
+ protected int[][] _map = null;
+ protected int _width;
+ protected int _height;
+ protected float _size_x;
+ protected float _size_y;
+ protected final Random _random = new Random();
+ protected final int _freeRoad = 0;
+ protected final int _barrier = 1;
+
+ public BufferedImage CreateMap(int width, int height, IDrawingObject drawingObject)
+ {
+ _width = width;
+ _height = height;
+ _drawingObject = drawingObject;
+ GenerateMap();
+ while (!SetObjectOnMap())
+ {
+ GenerateMap();
+ }
+ return DrawMapWithObject();
+ }
+
+ public BufferedImage MoveObject(Direction direction)
+ {
+ if (true)
+ {
+ _drawingObject.MoveObject(direction);
+ }
+ float[] cortege = _drawingObject.GetCurrentPosition();
+ if (CheckLand(cortege[0],cortege[1],cortege[2],cortege[3])!= 0)
+ {
+ _drawingObject.MoveObject(SetOppositDirection(direction));
+ }
+ return DrawMapWithObject();
+ }
+
+ private boolean SetObjectOnMap()
+ {
+ if (_drawingObject==null || _map == null)
+ {
+ return false;
+ }
+ int x = _random.nextInt(10);
+ int y = _random.nextInt(10);
+ _drawingObject.SetObject(x, y, _width, _height);
+
+ float[] dim = _drawingObject.GetCurrentPosition();
+
+ while (CheckLand(dim[0], dim[1], dim[2], dim[3]) != 2)
+ {
+ int res;
+ do
+ {
+ res = CheckLand(dim[0], dim[1], dim[2], dim[3]);
+ if (res == 0)
+ {
+ _drawingObject.SetObject((int)dim[0], (int)dim[1], _width, _height);
+ return true;
+ }
+ else
+ {
+ dim[0] += _size_x;
+ }
+ } while (res != 2);
+ dim[0] = x;
+ dim[1] += _size_y;
+ }
+ return false;
+ }
+
+ private BufferedImage DrawMapWithObject()
+ {
+ BufferedImage bmp = new BufferedImage(_width, _height,BufferedImage.TYPE_INT_RGB);
+ if (_drawingObject == null || _map == null)
+ {
+ return bmp;
+ }
+ Graphics gr = bmp.getGraphics();
+ for (int i = 0; i < _map.length; ++i)
+ {
+ for (int j = 0; j < _map[i].length; ++j)
+ {
+ if (_map[i][j] == _freeRoad)
+ {
+ DrawBarrierPart(gr, i, j);
+ }
+ else if (_map[i][j] == _barrier)
+ {
+ DrawRoadPart(gr, i, j);
+ }
+ }
+ }
+ _drawingObject.DrawingObject(gr);
+ return bmp;
+ }
+ private int CheckLand(float Left, float Right, float Top, float Bottom)
+ {
+ int RUi = (int)(Left / _size_x);
+ int RUj = (int)(Right / _size_y);
+ int LDi = (int)(Top / _size_x);
+ int LDj = (int)(Bottom / _size_y);
+
+ if (RUi < 0 || RUj < 0 || LDi >= _map[0].length || LDj >= _map.length)
+ {
+ return -1;
+ }
+ for (int x = RUi; x <= LDi; x++)
+ {
+ for (int y = RUj; y <= LDj; y++)
+ {
+ if (_map[x][y] == _barrier)
+ {
+ return 1;
+ }
+ }
+ }
+ return 0;
+ }
+ private Direction SetOppositDirection(Direction dir)
+ {
+ switch (dir)
+ {
+ case Up:
+ return Direction.Down;
+ case Down:
+ return Direction.Up;
+ case Left:
+ return Direction.Right;
+ case Right:
+ return Direction.Left;
+ case None:
+ return Direction.None;
+ }
+ return Direction.None;
+ }
+
+ protected abstract void GenerateMap();
+ protected abstract void DrawBarrierPart(Graphics gr, int i, int j);
+ protected abstract void DrawRoadPart(Graphics gr, int i, int j);
+}
diff --git a/src/Direction.java b/src/Direction.java
index 5b70d63..5f50742 100644
--- a/src/Direction.java
+++ b/src/Direction.java
@@ -1,6 +1,8 @@
public enum Direction {
- Up,
- Down,
- Left,
- Right;
+ Up(1),
+ Down(2),
+ Left(3),
+ Right(4),
+ None(0);
+ Direction(int value){}
}
diff --git a/src/DrawingField.java b/src/DrawingField.java
index 0fc63dd..9aef989 100644
--- a/src/DrawingField.java
+++ b/src/DrawingField.java
@@ -2,12 +2,13 @@ import javax.swing.*;
import java.awt.*;
import java.util.Random;
-public class DrawingField extends JPanel {
- private final FormGasolineTanker field;
- DrawingGasolineTanker _gasolineTanker;
+public class DrawingField extends JPanel{
+ private final FormGasolineTanker Field;
+ DrawingGasolineTanker _gasolineTanker=null;
public DrawingField(FormGasolineTanker field) {
- this.field = field;
+ Field = field;
}
+
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
@@ -16,42 +17,47 @@ public class DrawingField extends JPanel {
_gasolineTanker.DrawTransport(g2);
else return;
}
- public void UpButtonAction(){
- if (_gasolineTanker!=null)
- _gasolineTanker.MoveTransport(Direction.Up);
- else
+ public void DirectionButtonAction(Direction side){
+ if(_gasolineTanker == null)
return;
+ _gasolineTanker.MoveTransport(side);
}
- public void DownButtonAction(){
- if (_gasolineTanker!=null)
- _gasolineTanker.MoveTransport(Direction.Down);
- else
- return;
- }
- public void RightButtonAction(){
- if (_gasolineTanker!=null)
- _gasolineTanker.MoveTransport(Direction.Right);
- else
- return;
- }
- public void LeftButtonAction(){
- if (_gasolineTanker!=null)
- _gasolineTanker.MoveTransport(Direction.Left);
- else
- return;
+ private void SetData() {
+ Random rand=new Random();
+ _gasolineTanker.SetPosition(rand.nextInt(100)+10,rand.nextInt(100)+10,getWidth(),getHeight());
+ Field.SpeedLabel.setText("Speed: "+_gasolineTanker.getGasolineTanker().getSpeed());
+ Field.WeightLabel.setText("Weight: "+_gasolineTanker.getGasolineTanker().getWeight());
+ Field.BodyColorLabel.setText("Color: "+Integer.toHexString(_gasolineTanker.getGasolineTanker().getBodyColor().getRGB()).substring(2));
}
public void CreateButtonAction(){
- Random rnd=new Random();
- _gasolineTanker=new DrawingGasolineTanker();
- _gasolineTanker.Init(rnd.nextInt(50)+10,rnd.nextInt(100)+500,new Color(rnd.nextInt(256),rnd.nextInt(256),rnd.nextInt(256)));
- _gasolineTanker.SetPosition(rnd.nextInt(100)+10,rnd.nextInt(100)+10,getWidth(),getHeight());
- field.SpeedLabel.setText("Speed: "+_gasolineTanker.getGasolineTanker().getSpeed());
- field.WeightLabel.setText("Weight: "+_gasolineTanker.getGasolineTanker().getWeight());
- field.BodyColorLabel.setText("Color: "+Integer.toHexString(_gasolineTanker.getGasolineTanker().getBodyColor().getRGB()).substring(2));
+ Random rand=new Random();
+ Color color1=new Color(rand.nextInt(256), rand.nextInt(256), rand.nextInt(256));
+ if(color1==null)
+ color1=new Color(rand.nextInt(256), rand.nextInt(256), rand.nextInt(256));
+ _gasolineTanker=new DrawingGasolineTanker(rand.nextInt(50)+10,rand.nextInt(3000)+20000,color1,rand.nextInt(3));
+ SetData();
+ }
+ public void CreateModifButtonAction(){
+ Random rand=new Random();
+ Color color1=new Color(rand.nextInt(256), rand.nextInt(256), rand.nextInt(256));
+ Color color2=new Color(rand.nextInt(256), rand.nextInt(256), rand.nextInt(256));
+ if(color1==null)
+ color1=new Color(rand.nextInt(256), rand.nextInt(256), rand.nextInt(256));
+ if (color2==null)
+ color2=new Color(rand.nextInt(256), rand.nextInt(256), rand.nextInt(256));
+ _gasolineTanker = new DrawingImprovedGasolineTanker(rand.nextInt(50) + 10, rand.nextInt(3000) + 20000, color1,
+ color2, rand.nextBoolean(), rand.nextBoolean(), rand.nextInt(3));
+ SetData();
}
public void ResizeField(){
if (_gasolineTanker!=null)
_gasolineTanker.ChangeBorders(getWidth(),getHeight());
else return;
}
+
+ public void Draw(Graphics2D graphics) {
+ if (_gasolineTanker!=null)
+ _gasolineTanker.DrawTransport(graphics);
+ else return;
+ }
}
diff --git a/src/DrawingGasolineTanker.java b/src/DrawingGasolineTanker.java
index 8169677..4aedf6d 100644
--- a/src/DrawingGasolineTanker.java
+++ b/src/DrawingGasolineTanker.java
@@ -1,26 +1,56 @@
import java.awt.*;
public class DrawingGasolineTanker {
- public EntityGasolineTanker GasolineTanker;
- public EntityGasolineTanker getGasolineTanker() {
+ protected EntityGasolineTanker GasolineTanker;
+ public EntityGasolineTanker getGasolineTanker(){
return GasolineTanker;
}
- public DrawingWheels Wheels;
- private int _startPosX;
- private int _startPosY;
+ protected IDrawningObjectWheels Wheels;
+ private CountWheels _wheels;
+ protected int _startPosX;
+ protected int _startPosY;
private Integer _pictureWidth = null;
private Integer _pictureHeight = null;
- private final int _gasolineTankerWidth = 160;
- private final int _gasolineTankerHeight = 55;
+ private int _gasolineTankerWidth = 160;
+ private int _gasolineTankerHeight = 70;
- public void Init(int speed, float weight, Color bodyColor)
+ public DrawingGasolineTanker(int speed, float weight, Color bodyColor, int wheelsForm)
{
- GasolineTanker = new EntityGasolineTanker();
- GasolineTanker.Init(speed, weight, bodyColor);
- Wheels = new DrawingWheels();
+ GasolineTanker = new EntityGasolineTanker(speed, weight, bodyColor);
+ Wheels= GetFormOfWheels(wheelsForm);
Wheels.SetCountWheels((int)(2 + Math.random() + Math.random()*2));
}
+ public IDrawningObjectWheels GetFormOfWheels(int FormOfWheel){
+ OrnamentForm temp = null;
+ for (OrnamentForm form:OrnamentForm.values()) {
+ if(form.Value==FormOfWheel){
+ temp = form;
+ break;
+ }
+ }
+ if(temp==null)
+ return null;
+ switch (temp){
+ case NoneOrnament:
+ return new DrawingWheels(_wheels);
+ case GrayOrnament:
+ return new DrawingOrnamentWheelsFirst(_wheels);
+ case RedOrnament:
+ return new DrawingOrnamentWheelsSecond(_wheels);
+ }
+ return null;
+ }
+
+ protected DrawingGasolineTanker(int speed, float weight, Color bodyColor,int gasolineTankerWidth, int gasolineTankerHeight)
+ {
+ GasolineTanker = new EntityGasolineTanker(speed, weight, bodyColor);
+ Wheels= new DrawingWheels(_wheels);
+ Wheels.SetCountWheels((int)(2 + Math.random() + Math.random()*2));
+ _gasolineTankerWidth=gasolineTankerWidth;
+ _pictureHeight=gasolineTankerHeight;
+ }
+
public void SetPosition(int x, int y, int width, int height)
{
if (x >= 0 && x+_gasolineTankerWidth <= width && y >= 0 && y+_gasolineTankerHeight <= height)
@@ -70,6 +100,7 @@ public class DrawingGasolineTanker {
break;
}
}
+
public void DrawTransport(Graphics g)
{
if (_startPosX < 0 || _startPosY < 0 || _pictureHeight== null || _pictureWidth== null)
@@ -103,6 +134,7 @@ public class DrawingGasolineTanker {
g2.drawRect(_startPosX + 120, _startPosY + 10, 25, 25);
g2.fillRect(_startPosX + 120, _startPosY + 10, 25, 25);
}
+
public void ChangeBorders(int width,int height)
{
_pictureWidth = width;
@@ -122,4 +154,12 @@ public class DrawingGasolineTanker {
_startPosY = _pictureHeight - _gasolineTankerHeight;
}
}
+ public float[] GetCurrentPosition() {
+ float[] dim = new float[4];
+ dim[0] = _startPosX;
+ dim[1] =_startPosY;
+ dim[2] = _startPosX + _gasolineTankerWidth;
+ dim[3] = _startPosY + _gasolineTankerHeight;
+ return dim;
+ }
}
diff --git a/src/DrawingImprovedGasolineTanker.java b/src/DrawingImprovedGasolineTanker.java
new file mode 100644
index 0000000..4a62c10
--- /dev/null
+++ b/src/DrawingImprovedGasolineTanker.java
@@ -0,0 +1,50 @@
+import java.awt.*;
+
+public class DrawingImprovedGasolineTanker extends DrawingGasolineTanker {
+
+ public DrawingImprovedGasolineTanker(int speed, float weight, Color bodyColor, Color dopColor, boolean bodyKit, boolean antena,int wheelForm) {
+ super(speed, weight, bodyColor, 160, 70);
+ GasolineTanker=new EntityImprovedGasolineTanker(speed,weight,bodyColor,dopColor,bodyKit,antena);
+ Wheels= GetFormOfWheels(wheelForm);
+ Wheels.SetCountWheels((int)(2 + Math.random() + Math.random()*2));
+ }
+
+ @Override
+ public void DrawTransport(Graphics g) {
+
+ if (! (GasolineTanker instanceof EntityImprovedGasolineTanker))
+ {
+ return;
+ }
+
+ EntityImprovedGasolineTanker improvedGasolineTanker = (EntityImprovedGasolineTanker)GasolineTanker;
+ Graphics2D g2 = (Graphics2D) g;
+
+ int [] x1 ={_startPosX+25,_startPosX+65,_startPosX+75,_startPosX+25,_startPosX+25};
+ int [] y1 ={_startPosY,_startPosY,_startPosY+5,_startPosY+5,_startPosY};
+ int [] x2 ={_startPosX+25,_startPosX+75,_startPosX+65,_startPosX+25,_startPosX+25};
+ int [] y2 ={_startPosY+45,_startPosY+45,_startPosY+50,_startPosY+50,_startPosY+45};
+
+ if (improvedGasolineTanker.BodyKit)
+ {
+ g2.setColor(improvedGasolineTanker.GetDopColor());
+ g2.drawRect(_startPosX + 25, _startPosY + 5, 100, 35);
+ g2.fillRect(_startPosX + 25, _startPosY + 5, 100, 35);
+
+ }
+
+ _startPosX += 10;
+ _startPosY += 5;
+ super.DrawTransport(g);
+ _startPosX -= 10;
+ _startPosY -= 5;
+
+ if (improvedGasolineTanker.Antena)
+ {
+ g2.setColor(Color.RED);
+ g2.drawRect(_startPosX + 130, _startPosY + 5, 10, 5);
+ g2.fillRect(_startPosX + 130, _startPosY + 5, 10, 5);
+
+ }
+ }
+}
diff --git a/src/DrawingMap.java b/src/DrawingMap.java
new file mode 100644
index 0000000..7d151d2
--- /dev/null
+++ b/src/DrawingMap.java
@@ -0,0 +1,71 @@
+import javax.swing.*;
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.util.Random;
+
+public class DrawingMap extends JPanel {
+ private final FormMap Map;
+ private AbstractMap _abstractMap;
+ BufferedImage bufferedImage;
+
+ public DrawingMap(FormMap map){
+ Map=map;
+ _abstractMap = new SimpleMap();
+ }
+
+ @Override
+ protected void paintComponent(Graphics g) {
+ super.paintComponent(g);
+ g.drawImage(bufferedImage,0,0,null);
+ }
+
+ private void SetData(DrawingGasolineTanker gasolineTanker) {
+ Random rand=new Random();
+ gasolineTanker.SetPosition(rand.nextInt(100)+10,rand.nextInt(100)+10,getWidth(),getHeight());
+ Map.SpeedLabel.setText("Speed: "+gasolineTanker.getGasolineTanker().getSpeed());
+ Map.WeightLabel.setText("Weight: "+gasolineTanker.getGasolineTanker().getWeight());
+ Map.BodyColorLabel.setText("Color: "+Integer.toHexString(gasolineTanker.getGasolineTanker().getBodyColor().getRGB()).substring(2));
+ bufferedImage = _abstractMap.CreateMap(700,550,new DrawingObjectGasolineTanker(gasolineTanker));
+ }
+ public void CreateButtonAction(){
+ Random rand=new Random();
+ Color color1=new Color(rand.nextInt(256), rand.nextInt(256), rand.nextInt(256));
+ if(color1==null)
+ color1=new Color(rand.nextInt(256), rand.nextInt(256), rand.nextInt(256));
+ DrawingGasolineTanker gasolineTanker=new DrawingGasolineTanker(rand.nextInt(50)+10,rand.nextInt(3000)+20000,color1,rand.nextInt(3));
+ SetData(gasolineTanker);
+ }
+ public void CreateModifButtonAction(){
+ Random rand=new Random();
+ Color color1=new Color(rand.nextInt(256), rand.nextInt(256), rand.nextInt(256));
+ Color color2=new Color(rand.nextInt(256), rand.nextInt(256), rand.nextInt(256));
+ if(color1==null)
+ color1=new Color(rand.nextInt(256), rand.nextInt(256), rand.nextInt(256));
+ if (color2==null)
+ color2=new Color(rand.nextInt(256), rand.nextInt(256), rand.nextInt(256));
+ DrawingGasolineTanker gasolineTanker = new DrawingImprovedGasolineTanker(rand.nextInt(50) + 10, rand.nextInt(3000) + 20000, color1,
+ color2, rand.nextBoolean(), rand.nextBoolean(),rand.nextInt(3));
+ SetData(gasolineTanker);
+ }
+ public void DirectionButtonAction(Direction side){
+ if(_abstractMap != null){
+ bufferedImage = _abstractMap.MoveObject(side);
+ }
+ }
+
+ public void ComboBoxSelectorMapAction(String name){
+ switch (name){
+ case "Simple map":
+ _abstractMap = new SimpleMap();
+ break;
+ case "Long map":
+ _abstractMap = new LongMap();
+ break;
+ }
+ }
+
+ public void DrawMap(Graphics g){
+ g.drawImage(bufferedImage,0,0,null);
+ }
+
+}
diff --git a/src/DrawingObjectGasolineTanker.java b/src/DrawingObjectGasolineTanker.java
new file mode 100644
index 0000000..7a1c0d7
--- /dev/null
+++ b/src/DrawingObjectGasolineTanker.java
@@ -0,0 +1,39 @@
+import java.awt.*;
+
+public class DrawingObjectGasolineTanker implements IDrawingObject {
+
+ private DrawingGasolineTanker _gasolineTanker=null;
+
+ public DrawingObjectGasolineTanker(DrawingGasolineTanker gasolineTanker)
+ {
+ _gasolineTanker= gasolineTanker;
+ }
+
+ public float Step() {
+ if(_gasolineTanker != null && _gasolineTanker.GasolineTanker != null)
+ return _gasolineTanker.GasolineTanker.Step;
+ return 0;
+ }
+
+ @Override
+ public void SetObject(int x, int y, int width, int height) {
+ _gasolineTanker.SetPosition(x,y,width,height);
+ }
+
+ @Override
+ public void MoveObject(Direction direction) {
+ _gasolineTanker.MoveTransport(direction);
+ }
+
+ @Override
+ public void DrawingObject(Graphics g) {
+ _gasolineTanker.DrawTransport(g);
+ }
+
+ @Override
+ public float[] GetCurrentPosition() {
+ if(_gasolineTanker!=null)
+ return _gasolineTanker.GetCurrentPosition();
+ return null;
+ }
+}
diff --git a/src/DrawingOrnamentWheelsFirst.java b/src/DrawingOrnamentWheelsFirst.java
new file mode 100644
index 0000000..e818a5e
--- /dev/null
+++ b/src/DrawingOrnamentWheelsFirst.java
@@ -0,0 +1,54 @@
+import java.awt.*;
+
+public class DrawingOrnamentWheelsFirst implements IDrawningObjectWheels{
+ private CountWheels _wheels;
+
+ public DrawingOrnamentWheelsFirst(CountWheels wheels){
+ _wheels=wheels;
+ }
+ @Override
+ public void SetCountWheels(int count) {
+ for (CountWheels temp: CountWheels.values())
+ if (temp.getCountWheels() == count){
+ _wheels=temp;
+ return;
+ }
+ }
+
+ @Override
+ public void DrawWheels(Graphics2D g, int _startPosX, int _startPosY) {
+ if (_wheels.getCountWheels() == 2) {
+ g.setColor(Color.BLACK);
+ g.drawOval(_startPosX + 10, _startPosY + 35, 20, 20);
+ g.fillOval(_startPosX + 10, _startPosY + 35, 20, 20);
+ g.setColor(Color.GRAY);
+ g.drawOval(_startPosX + 130, _startPosY + 45, 20, 5);
+ g.drawOval(_startPosX + 10, _startPosY + 45, 20, 5);
+ }
+ if (_wheels.getCountWheels() == 3) {
+ g.setColor(Color.BLACK);
+ g.drawOval(_startPosX + 10, _startPosY + 35, 20, 20);
+ g.fillOval(_startPosX + 10, _startPosY + 35, 20, 20);
+ g.drawOval(_startPosX + 30, _startPosY + 35, 20, 20);
+ g.fillOval(_startPosX + 30, _startPosY + 35, 20, 20);
+ g.setColor(Color.GRAY);
+ g.drawOval(_startPosX + 130, _startPosY + 45, 20, 5);
+ g.drawOval(_startPosX + 30, _startPosY + 45, 20, 5);
+ g.drawOval(_startPosX + 10, _startPosY + 45, 20, 5);
+ }
+ if (_wheels.getCountWheels() == 4) {
+ g.setColor(Color.BLACK);
+ g.drawOval(_startPosX + 10, _startPosY + 35, 20, 20);
+ g.fillOval(_startPosX + 10, _startPosY + 35, 20, 20);
+ g.drawOval(_startPosX + 30, _startPosY + 35, 20, 20);
+ g.fillOval(_startPosX + 30, _startPosY + 35, 20, 20);
+ g.drawOval(_startPosX + 50, _startPosY + 35, 20, 20);
+ g.fillOval(_startPosX + 50, _startPosY + 35, 20, 20);
+ g.setColor(Color.GRAY);
+ g.drawOval(_startPosX + 130, _startPosY + 45, 20, 5);
+ g.drawOval(_startPosX + 50, _startPosY + 45, 20, 5);
+ g.drawOval(_startPosX + 30, _startPosY + 45, 20, 5);
+ g.drawOval(_startPosX + 10, _startPosY + 45, 20, 5);
+ }
+ }
+}
diff --git a/src/DrawingOrnamentWheelsSecond.java b/src/DrawingOrnamentWheelsSecond.java
new file mode 100644
index 0000000..75b725b
--- /dev/null
+++ b/src/DrawingOrnamentWheelsSecond.java
@@ -0,0 +1,55 @@
+import java.awt.*;
+
+public class DrawingOrnamentWheelsSecond implements IDrawningObjectWheels{
+ private CountWheels _wheels;
+
+ public DrawingOrnamentWheelsSecond(CountWheels wheels){
+ _wheels=wheels;
+ }
+ @Override
+ public void SetCountWheels(int count) {
+ for (CountWheels temp: CountWheels.values())
+ if (temp.getCountWheels() == count){
+ _wheels=temp;
+ return;
+ }
+ }
+
+ @Override
+ public void DrawWheels(Graphics2D g, int _startPosX, int _startPosY) {
+
+ if (_wheels.getCountWheels() == 2) {
+ g.setColor(Color.BLACK);
+ g.drawOval(_startPosX + 10, _startPosY + 35, 20, 20);
+ g.fillOval(_startPosX + 10, _startPosY + 35, 20, 20);
+ g.setColor(Color.GRAY);
+ g.drawRect(_startPosX + 130, _startPosY + 45, 20, 5);
+ g.drawRect(_startPosX + 10, _startPosY + 45, 20, 5);
+ }
+ if (_wheels.getCountWheels() == 3) {
+ g.setColor(Color.BLACK);
+ g.drawOval(_startPosX + 10, _startPosY + 35, 20, 20);
+ g.fillOval(_startPosX + 10, _startPosY + 35, 20, 20);
+ g.drawOval(_startPosX + 30, _startPosY + 35, 20, 20);
+ g.fillOval(_startPosX + 30, _startPosY + 35, 20, 20);
+ g.setColor(Color.GRAY);
+ g.drawRect(_startPosX + 130, _startPosY + 45, 20, 5);
+ g.drawRect(_startPosX + 30, _startPosY + 45, 20, 5);
+ g.drawRect(_startPosX + 10, _startPosY + 45, 20, 5);
+ }
+ if (_wheels.getCountWheels() == 4) {
+ g.setColor(Color.BLACK);
+ g.drawOval(_startPosX + 10, _startPosY + 35, 20, 20);
+ g.fillOval(_startPosX + 10, _startPosY + 35, 20, 20);
+ g.drawOval(_startPosX + 30, _startPosY + 35, 20, 20);
+ g.fillOval(_startPosX + 30, _startPosY + 35, 20, 20);
+ g.drawOval(_startPosX + 50, _startPosY + 35, 20, 20);
+ g.fillOval(_startPosX + 50, _startPosY + 35, 20, 20);
+ g.setColor(Color.GRAY);
+ g.drawRect(_startPosX + 130, _startPosY + 45, 20, 5);
+ g.drawRect(_startPosX + 50, _startPosY + 45, 20, 5);
+ g.drawRect(_startPosX + 30, _startPosY + 45, 20, 5);
+ g.drawRect(_startPosX + 10, _startPosY + 45, 20, 5);
+ }
+ }
+}
diff --git a/src/DrawingWheels.java b/src/DrawingWheels.java
index 53f93b4..e50d1ca 100644
--- a/src/DrawingWheels.java
+++ b/src/DrawingWheels.java
@@ -1,8 +1,12 @@
import java.awt.*;
-public class DrawingWheels {
+public class DrawingWheels implements IDrawningObjectWheels{
- private CountWheels _wheels;
+ private CountWheels _wheels = null;
+
+ public DrawingWheels(CountWheels wheels) {
+ _wheels=wheels;
+ }
public void SetCountWheels(int Count){
for (CountWheels temp: CountWheels.values())
@@ -13,29 +17,26 @@ public class DrawingWheels {
}
public void DrawWheels(Graphics2D g,int _startPosX, int _startPosY) {
- switch (_wheels.getCountWheels())
- {
- case 2:
- g.setColor(Color.BLACK);
- g.drawOval(_startPosX + 10, _startPosY + 35, 20, 20);
- g.fillOval(_startPosX + 10, _startPosY + 35, 20, 20);
- break;
- case 3:
- g.setColor(Color.BLACK);
- g.drawOval(_startPosX + 10, _startPosY + 35, 20, 20);
- g.fillOval(_startPosX + 10, _startPosY + 35, 20, 20);
- g.drawOval(_startPosX + 30, _startPosY + 35, 20, 20);
- g.fillOval(_startPosX + 30, _startPosY + 35, 20, 20);
- break;
- case 4:
- g.setColor(Color.BLACK);
- g.drawOval(_startPosX + 10, _startPosY + 35, 20, 20);
- g.fillOval(_startPosX + 10, _startPosY + 35, 20, 20);
- g.drawOval(_startPosX + 30, _startPosY + 35, 20, 20);
- g.fillOval(_startPosX + 30, _startPosY + 35, 20, 20);
- g.drawOval(_startPosX + 50, _startPosY + 35, 20, 20);
- g.fillOval(_startPosX + 50, _startPosY + 35, 20, 20);
- break;
+ if (_wheels.getCountWheels() == 2) {
+ g.setColor(Color.BLACK);
+ g.drawOval(_startPosX + 10, _startPosY + 35, 20, 20);
+ g.fillOval(_startPosX + 10, _startPosY + 35, 20, 20);
+ }
+ if (_wheels.getCountWheels() == 3) {
+ g.setColor(Color.BLACK);
+ g.drawOval(_startPosX + 10, _startPosY + 35, 20, 20);
+ g.fillOval(_startPosX + 10, _startPosY + 35, 20, 20);
+ g.drawOval(_startPosX + 30, _startPosY + 35, 20, 20);
+ g.fillOval(_startPosX + 30, _startPosY + 35, 20, 20);
+ }
+ if (_wheels.getCountWheels() == 4){
+ g.setColor(Color.BLACK);
+ g.drawOval(_startPosX + 10, _startPosY + 35, 20, 20);
+ g.fillOval(_startPosX + 10, _startPosY + 35, 20, 20);
+ g.drawOval(_startPosX + 30, _startPosY + 35, 20, 20);
+ g.fillOval(_startPosX + 30, _startPosY + 35, 20, 20);
+ g.drawOval(_startPosX + 50, _startPosY + 35, 20, 20);
+ g.fillOval(_startPosX + 50, _startPosY + 35, 20, 20);
}
}
}
diff --git a/src/EntityGasolineTanker.java b/src/EntityGasolineTanker.java
index bb890d8..5199730 100644
--- a/src/EntityGasolineTanker.java
+++ b/src/EntityGasolineTanker.java
@@ -14,15 +14,15 @@ public class EntityGasolineTanker {
public Color getBodyColor() {
return BodyColor;
}
- public float Step;
+ public int Step;
- public void Init(int speed, float weight, Color bodyColor){
+ public EntityGasolineTanker(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 * 100/ (int)Weight;
+ Step = Speed * 5000/ (int)Weight;
}
}
diff --git a/src/EntityImprovedGasolineTanker.java b/src/EntityImprovedGasolineTanker.java
new file mode 100644
index 0000000..8786016
--- /dev/null
+++ b/src/EntityImprovedGasolineTanker.java
@@ -0,0 +1,26 @@
+import java.awt.*;
+
+public class EntityImprovedGasolineTanker extends EntityGasolineTanker{
+ public Color DopColor;
+ public Color GetDopColor() {
+ return DopColor;
+ }
+
+ public boolean BodyKit ;
+ public boolean GetBodyKit () {
+ return BodyKit ;
+ }
+
+ public boolean Antena ;
+ public boolean GetAntena () {
+ return Antena ;
+ }
+
+ public EntityImprovedGasolineTanker(int speed, float weight, Color bodyColor, Color dopColor, boolean bodyKit, boolean antena){
+ super(speed,weight,bodyColor);
+ DopColor = dopColor;
+ BodyKit = bodyKit;
+ Antena = antena;
+
+ }
+}
diff --git a/src/FormGasolineTanker.form b/src/FormGasolineTanker.form
new file mode 100644
index 0000000..2c51dc1
--- /dev/null
+++ b/src/FormGasolineTanker.form
@@ -0,0 +1,160 @@
+
+
diff --git a/src/FormGasolineTanker.java b/src/FormGasolineTanker.java
index e01c86b..079ba06 100644
--- a/src/FormGasolineTanker.java
+++ b/src/FormGasolineTanker.java
@@ -2,134 +2,90 @@ import javax.swing.*;
import java.awt.*;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
+
public class FormGasolineTanker extends JFrame{
private int Width;
private int Height;
-
- JPanel BottomPanel = new JPanel();
- JPanel CreatePanel = new JPanel();
- JPanel BottomAndCreatePanel = new JPanel();
- JPanel DimentionPanel = new JPanel();
- JPanel UPanel = new JPanel();
- JPanel DPanel = new JPanel();
- JPanel LRPanel = new JPanel();
-
- JLabel SpeedLabel = new JLabel("Speed: ");
- JLabel WeightLabel = new JLabel("Weight: ");
- JLabel BodyColorLabel = new JLabel("Color: ");
-
DrawingField field = new DrawingField(this);
+ private JButton ButtonDown;
+ private JButton ButtonRight;
+ private JButton ButtonLeft;
+ private JButton ButtonUp;
+ private JButton ButtonCreate;
+ private JButton ButtonCreateModif;
+ public JLabel SpeedLabel;
+ public JLabel WeightLabel;
+ public JLabel BodyColorLabel;
+ private JPanel PictureBox;
- JButton ButtonCreate=new JButton("Create");
-
- Icon iconUp = new ImageIcon("C:\\Users\\kashi\\OneDrive\\Материал\\KeyUp.png");
- JButton ButtonUp=new JButton(iconUp);
-
- Icon iconDown = new ImageIcon("C:\\Users\\kashi\\OneDrive\\Материал\\KeyDown.png");
- JButton ButtonDown=new JButton(iconDown);
-
- Icon iconRight = new ImageIcon("C:\\Users\\kashi\\OneDrive\\Материал\\KeyRight.png");
- JButton ButtonRight=new JButton(iconRight);
-
- Icon iconLeft = new ImageIcon("C:\\Users\\kashi\\OneDrive\\Материал\\KeyLeft.png");
- JButton ButtonLeft=new JButton(iconLeft);
public FormGasolineTanker(){
super("Gasoline Tanker");
- setSize(800,600);
- Width=getWidth();
- Height=getHeight();
+ setContentPane(PictureBox);
+ setSize(1000,700);
+ Width = getWidth();
+ Height = getHeight();
ShowWindow();
- RefreshWindow();
+ field.setBounds(0,0,Width,Height);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
+ ImageIcon spriteUp =new ImageIcon((new ImageIcon("Material\\KeyUp.png")).
+ getImage().getScaledInstance(10,10,Image.SCALE_SMOOTH));
+ ImageIcon spriteDown =new ImageIcon((new ImageIcon("Material\\KeyDown.png")).
+ getImage().getScaledInstance(10,10,Image.SCALE_SMOOTH));
+ ImageIcon spriteLeft =new ImageIcon((new ImageIcon("Material\\KeyLeft.png")).
+ getImage().getScaledInstance(10,10,Image.SCALE_SMOOTH));
+ ImageIcon spriteRight =new ImageIcon((new ImageIcon("Material\\KeyRight.png")).
+ getImage().getScaledInstance(10,10,Image.SCALE_SMOOTH));
+ private void ShowWindow(){
- public void ShowWindow(){
-
- Dimension dimen=new Dimension(30,30);
-
- ButtonUp.setPreferredSize(dimen);
- ButtonUp.addActionListener(e->{
- field.UpButtonAction();
- repaint();
- });
-
- ButtonDown.setPreferredSize(dimen);
- ButtonDown.addActionListener(e->{
- field.DownButtonAction();
- repaint();
- });
-
- ButtonRight.setPreferredSize(dimen);
- ButtonRight.addActionListener(e->{
- field.RightButtonAction();
- repaint();
- });
-
- 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);
-
- UPanel.setLayout(new FlowLayout());
- UPanel.setBackground(new Color(0,0,0,0));
- UPanel.add(ButtonUp);
-
- DPanel.setLayout(new FlowLayout());
- DPanel.setBackground(new Color(0,0,0,0));
- DPanel.add(ButtonDown);
-
- DimentionPanel.setLayout(new BoxLayout(DimentionPanel,BoxLayout.Y_AXIS));
- DimentionPanel.setBackground(new Color(0,0,0,0));
- DimentionPanel.add(UPanel);
- DimentionPanel.add(LRPanel);
- DimentionPanel.add(DPanel);
- add(DimentionPanel);
-
- CreatePanel.setLayout(new FlowLayout());
- CreatePanel.setBackground(new Color(0,0,0,0));
- CreatePanel.add(ButtonCreate);
- ButtonCreate.addActionListener(e->{
+ ButtonCreate.addActionListener(e -> {
field.CreateButtonAction();
- repaint();
+ ReDraw();
+ });
+ ButtonCreateModif.addActionListener(e -> {
+ field.CreateModifButtonAction();
+ ReDraw();
+ });
+ ButtonUp.setIcon(spriteUp);
+ ButtonUp.addActionListener(e -> {
+ field.DirectionButtonAction(Direction.Up);
+ ReDraw();
+ });
+ ButtonLeft.setIcon(spriteLeft);
+ ButtonLeft.addActionListener(e -> {
+ field.DirectionButtonAction(Direction.Left);
+ ReDraw();
+ });
+ ButtonRight.setIcon(spriteRight);
+ ButtonRight.addActionListener(e -> {
+ field.DirectionButtonAction(Direction.Right);
+ ReDraw();
+ });
+ ButtonDown.setIcon(spriteDown);
+ ButtonDown.addActionListener(e -> {
+ field.DirectionButtonAction(Direction.Down);
+ ReDraw();
});
-
- BottomPanel.setLayout(new FlowLayout());
- BottomPanel.setBackground(new Color(0,0,0,0));
- BottomPanel.add(SpeedLabel);
- BottomPanel.add(WeightLabel);
- BottomPanel.add(BodyColorLabel);
-
- 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) {
+ public void componentResized(ComponentEvent e){
super.componentResized(e);
Width=getWidth();
Height=getHeight();
field.ResizeField();
- repaint();
- RefreshWindow();
+ ReDraw();
+ field.setBounds(0,0,Width,Height);
}
});
}
- public void RefreshWindow(){
- field.setBounds(0,0,Width,Height);
- BottomAndCreatePanel.setBounds(-220,Height-110,Width,80);
- DimentionPanel.setBounds(Width-170,Height-170,190,140);
+ private void ReDraw()
+ {
+ Graphics2D graphics = (Graphics2D) PictureBox.getGraphics();
+ graphics.clearRect(0, 0, PictureBox.getWidth(), PictureBox.getHeight());
+ PictureBox.paintComponents(graphics);
+ field.Draw(graphics);
}
}
diff --git a/src/FormMap.form b/src/FormMap.form
new file mode 100644
index 0000000..8826466
--- /dev/null
+++ b/src/FormMap.form
@@ -0,0 +1,171 @@
+
+
diff --git a/src/FormMap.java b/src/FormMap.java
new file mode 100644
index 0000000..accc5f3
--- /dev/null
+++ b/src/FormMap.java
@@ -0,0 +1,87 @@
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ComponentAdapter;
+import java.awt.event.ComponentEvent;
+import java.util.Objects;
+
+public class FormMap extends JFrame {
+ private int Width;
+ private int Height;
+ DrawingMap map = new DrawingMap(this);
+ private JButton ButtonDown;
+ private JButton ButtonRight;
+ private JButton ButtonLeft;
+ private JButton ButtonUp;
+ private JButton ButtonCreate;
+ private JButton ButtonCreateModif;
+ public JLabel SpeedLabel;
+ public JLabel WeightLabel;
+ public JLabel BodyColorLabel;
+ private JComboBox ComboBoxSelectorMap;
+ private JPanel PictureBox;
+ ImageIcon spriteUp =new ImageIcon((new ImageIcon("Material\\KeyUp.png")).
+ getImage().getScaledInstance(10,10,Image.SCALE_SMOOTH));
+ ImageIcon spriteDown =new ImageIcon((new ImageIcon("Material\\KeyDown.png")).
+ getImage().getScaledInstance(10,10,Image.SCALE_SMOOTH));
+ ImageIcon spriteLeft =new ImageIcon((new ImageIcon("Material\\KeyLeft.png")).
+ getImage().getScaledInstance(10,10,Image.SCALE_SMOOTH));
+ ImageIcon spriteRight =new ImageIcon((new ImageIcon("Material\\KeyRight.png")).
+ getImage().getScaledInstance(10,10,Image.SCALE_SMOOTH));
+ public FormMap(){
+ super("Gasoline tanker");
+ setContentPane(PictureBox);
+ setSize(1000,700);
+ Width = getWidth();
+ Height = getHeight();
+ ShowWindow();
+ map.setBounds(0,0,Width,Height);
+ setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ setVisible(true);
+ }
+
+ private void ShowWindow(){
+ ButtonCreate.addActionListener(e -> {
+ map.CreateButtonAction();
+ ReDraw();
+ });
+ ButtonCreateModif.addActionListener(e -> {
+ map.CreateModifButtonAction();
+ ReDraw();
+ });
+ ButtonUp.setIcon(spriteUp);
+ ButtonUp.addActionListener(e -> {
+ map.DirectionButtonAction(Direction.Up);
+ ReDraw();
+ });
+ ButtonLeft.setIcon(spriteLeft);
+ ButtonLeft.addActionListener(e -> {
+ map.DirectionButtonAction(Direction.Left);
+ ReDraw();
+ });
+ ButtonRight.setIcon(spriteRight);
+ ButtonRight.addActionListener(e -> {
+ map.DirectionButtonAction(Direction.Right);
+ ReDraw();
+ });
+ ButtonDown.setIcon(spriteDown);
+ ButtonDown.addActionListener(e -> {
+ map.DirectionButtonAction(Direction.Down);
+ ReDraw();
+ });
+
+ ComboBoxSelectorMap.addActionListener(e -> {
+ map.ComboBoxSelectorMapAction(Objects.requireNonNull(ComboBoxSelectorMap.getSelectedItem()).toString());
+ ReDraw();
+ });
+ }
+ private void ReDraw()
+ {
+ Graphics2D graphics = (Graphics2D) PictureBox.getGraphics();
+ graphics.clearRect(0, 0, PictureBox.getWidth(), PictureBox.getHeight());
+ PictureBox.paintComponents(graphics);
+ map.DrawMap(graphics);
+ }
+
+}
diff --git a/src/IDrawingObject.java b/src/IDrawingObject.java
new file mode 100644
index 0000000..3df3eb3
--- /dev/null
+++ b/src/IDrawingObject.java
@@ -0,0 +1,9 @@
+import java.awt.*;
+
+public interface IDrawingObject {
+ public float Step=0;
+ void SetObject(int x, int y, int width, int height);
+ void MoveObject(Direction direction);
+ void DrawingObject(Graphics g);
+ float[] GetCurrentPosition();
+}
diff --git a/src/IDrawningObjectWheels.java b/src/IDrawningObjectWheels.java
new file mode 100644
index 0000000..b293250
--- /dev/null
+++ b/src/IDrawningObjectWheels.java
@@ -0,0 +1,6 @@
+import java.awt.*;
+
+public interface IDrawningObjectWheels {
+ void SetCountWheels(int count);
+ void DrawWheels(Graphics2D g, int _startPosX, int _startPosY);
+}
diff --git a/src/LongMap.java b/src/LongMap.java
new file mode 100644
index 0000000..61671b6
--- /dev/null
+++ b/src/LongMap.java
@@ -0,0 +1,43 @@
+import java.awt.*;
+
+public class LongMap extends AbstractMap{
+ @Override
+ protected void GenerateMap()
+ {
+ _map = new int[100][100];
+ _size_x = (float)_width / _map[0].length;
+ _size_y = (float)_height / _map[1].length;
+ int counter = 0;
+ for (int i = 0; i < _map[0].length; ++i)
+ {
+ for (int j = 0; j < _map[1].length; ++j)
+ {
+ _map[i][j] = _freeRoad;
+ }
+ }
+ while (counter < 5)
+ {
+ int xStart = _random.nextInt(0, 100);
+ int xEnd = _random.nextInt(80, 100);
+
+ for (int i = xStart; i <= xEnd; ++i)
+ {
+ _map[i] [xStart] = _barrier;
+ }
+
+ counter++;
+ }
+ }
+
+ @Override
+ protected void DrawBarrierPart(Graphics gr, int i, int j) {
+ gr.setColor(Color.GRAY);
+ gr.fillRect((int) (i * _size_x), (int) (j * _size_y), (int) (i * (_size_x + 1)), (int) (j * (_size_y + 1)));
+ }
+
+ @Override
+ protected void DrawRoadPart(Graphics gr, int i, int j) {
+ gr.setColor(Color.BLACK);
+ gr.fillRect((int) (i * _size_x), (int) (j * _size_y), (int) (i * (_size_x + 1)), (int) (j * (_size_y + 1)));
+ }
+}
diff --git a/src/Main.java b/src/Main.java
index 1528646..7b927cf 100644
--- a/src/Main.java
+++ b/src/Main.java
@@ -1,5 +1,5 @@
public class Main {
- public static void main(String[] args){
- new FormGasolineTanker();
+ public static void main(String[] args) {
+ new FormMap();
}
-}
+}
\ No newline at end of file
diff --git a/src/OrnamentForm.java b/src/OrnamentForm.java
new file mode 100644
index 0000000..413c777
--- /dev/null
+++ b/src/OrnamentForm.java
@@ -0,0 +1,9 @@
+public enum OrnamentForm {
+ NoneOrnament(0),
+ GrayOrnament(1),
+ RedOrnament(2);
+ public final int Value;
+ OrnamentForm(int i) {
+ Value=i;
+ }
+}
diff --git a/src/SimpleMap.java b/src/SimpleMap.java
new file mode 100644
index 0000000..9b81ab1
--- /dev/null
+++ b/src/SimpleMap.java
@@ -0,0 +1,36 @@
+import java.awt.*;
+
+public class SimpleMap extends AbstractMap {
+ @Override
+ protected void DrawBarrierPart(Graphics gr, int i, int j) {
+ gr.setColor(Color.GRAY);
+ gr.fillRect((int) (i * _size_x), (int) (j * _size_y), (int) (i * (_size_x + 1)), (int) (j * (_size_y + 1)));
+ }
+
+ @Override
+ protected void DrawRoadPart(Graphics gr, int i, int j) {
+ gr.setColor(Color.BLACK);
+ gr.fillRect((int) (i * _size_x), (int) (j * _size_y), (int) (i * (_size_x + 1)), (int) (j * (_size_y + 1)));
+ }
+
+ @Override
+ protected void GenerateMap() {
+ _map = new int[100][100];
+ _size_x = (float) (_width / _map.length);
+ _size_y = (float) (_height / _map[0].length);
+ int counter = 0;
+ for (int i = 0; i < _map.length; ++i) {
+ for (int j = 0; j < _map[i].length; ++j) {
+ _map[i][j] = _freeRoad;
+ }
+ }
+ while (counter < 50) {
+ int x = _random.nextInt(99);
+ int y = _random.nextInt(99);
+ if (_map[x][y] == _freeRoad) {
+ _map[x][y] = _barrier;
+ counter++;
+ }
+ }
+ }
+}