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++; + } + } + } +}