diff --git a/src/src.iml b/src/src.iml new file mode 100644 index 0000000..c90834f --- /dev/null +++ b/src/src.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/src/src/CanvasGasolineTanker.java b/src/src/CanvasGasolineTanker.java new file mode 100644 index 0000000..1f5c8a1 --- /dev/null +++ b/src/src/CanvasGasolineTanker.java @@ -0,0 +1,15 @@ +import javax.swing.*; +import java.awt.*; +public class CanvasGasolineTanker extends JComponent{ + public DrawingGasolineTanker _gasolineTanker; + public CanvasGasolineTanker(){} + public void paintComponent(Graphics g) { + if (_gasolineTanker == null) { + return; + } + super.paintComponents(g); + Graphics2D g2d = (Graphics2D) g; + _gasolineTanker.DrawTransport(g2d); + super.repaint(); + } +} diff --git a/src/src/DirectionType.java b/src/src/DirectionType.java new file mode 100644 index 0000000..7672b37 --- /dev/null +++ b/src/src/DirectionType.java @@ -0,0 +1,10 @@ +public enum DirectionType { + //Вверх + Up, + //Вниз + Down, + //Влево + Left, + //Вправо + Right +} diff --git a/src/src/DrawingGasolineTanker.java b/src/src/DrawingGasolineTanker.java new file mode 100644 index 0000000..6d557e7 --- /dev/null +++ b/src/src/DrawingGasolineTanker.java @@ -0,0 +1,192 @@ +import java.awt.*; +public class DrawingGasolineTanker { + public EntityGasolineTanker EntityGasolineTanker; + private DrawingWheels drawingWheels = null; + + // Ширина окна + private Integer _pictureWidth; + + // Высота окна + private Integer _pictureHeight; + + // Левая координата прорисовки бензовоза + private Integer _startPosX; + + // Верхняя координата прорисовки бензовоза + private Integer _startPosY; + + // Ширина прорисовки бензовоза + private int _drawingGasolineTankerWidth = 105; + + // Высота прорисовки бензовоза + private int _drawingGasolineTankerHeight = 70; + + public void Init(int speed, double weight, Color bodyColor, Color additionalColor, boolean gasTank, boolean signalBeacon, int numWheels) + { + EntityGasolineTanker = new EntityGasolineTanker(); + EntityGasolineTanker.Init(speed, weight, bodyColor, additionalColor, gasTank, signalBeacon); + _pictureWidth = null; + _pictureHeight = null; + _startPosX = null; + _startPosY = null; + drawingWheels = new DrawingWheels(); + drawingWheels.setNumWheels(numWheels); + } + + // Установка границ поля + public boolean SetPictureSize(int width, int height) + { + // Проверка "влезает" ли объект в размеры поля + if (_drawingGasolineTankerWidth > width || _drawingGasolineTankerHeight > height) + { + return false; + } + _pictureWidth = width; + _pictureHeight = height; + + if (_startPosX != null || _startPosY != null) + { + if (_drawingGasolineTankerWidth + _startPosX > _pictureWidth) + { + _startPosX = _pictureWidth - _drawingGasolineTankerWidth; + } + else if (_startPosX < 0) + { + _startPosX = 0; + } + if (_drawingGasolineTankerHeight + _startPosY > _pictureHeight) + { + _startPosY = _pictureHeight - _drawingGasolineTankerHeight; + } + else if (_startPosY < 0) + { + _startPosY = 0; + } + } + return true; + } + + // Установка позиции + public void SetPosition(int x, int y) + { + if (!(_pictureHeight != null && _pictureWidth != null)) + { + return; + } + if (x >= 0 && x + _drawingGasolineTankerWidth <= _pictureWidth && y >= 0 && y + _drawingGasolineTankerHeight <= _pictureHeight) + { + _startPosX = x; + _startPosY = y; + + } + if (x < 0) + { + _startPosX = 0; + } + if (y < 0) + { + _startPosY = 0; + } + if (x + _drawingGasolineTankerWidth > _pictureWidth) + { + _startPosX = _drawingGasolineTankerWidth - _pictureWidth; + } + if (y + _drawingGasolineTankerHeight > _pictureHeight) + { + _startPosY = _drawingGasolineTankerHeight - _pictureHeight; + } + } + + // Изменение направления + public boolean MoveTransport(DirectionType direction) + { + if (EntityGasolineTanker == null || _startPosX == null || _startPosY == null) + { + return false; + + } + switch(direction) + { + // влево + case Left: + if (_startPosX - EntityGasolineTanker.Step > 0) + { + _startPosX -= (int)EntityGasolineTanker.Step; + } + return true; + // вверх + case Up: + if (_startPosY - EntityGasolineTanker.Step > 0) + { + _startPosY -= (int)EntityGasolineTanker.Step; + } + return true; + // вправо + case Right: + if (_startPosX + EntityGasolineTanker.Step + _drawingGasolineTankerWidth < _pictureWidth) + { + _startPosX += (int)EntityGasolineTanker.Step; + } + return true; + // вниз + case Down: + if (_startPosY + EntityGasolineTanker.Step + _drawingGasolineTankerHeight < _pictureHeight) + { + _startPosY += (int)EntityGasolineTanker.Step; + } + return true; + default: + return false; + + } + } + + // Прорисовка объекта + public void DrawTransport(Graphics2D g) + { + if (EntityGasolineTanker == null || _startPosX == null || _startPosY == null) + { + return; + } + + // бензобак + if (EntityGasolineTanker.getGasTank()) + { + g.setColor(Color.BLACK); + g.drawOval(_startPosX + 7, _startPosY + 18, 31, 31); + g.drawOval(_startPosX + 47, _startPosY + 18, 31, 31); + g.drawRect(_startPosX + 20, _startPosY+ 20, 45, 30); + + g.setColor(EntityGasolineTanker.getAdditionalColor()); + g.fillOval(_startPosX + 7, _startPosY+18, 31, 31); + g.fillOval( _startPosX+ 47, _startPosY + 18, 31, 31); + g.fillRect(_startPosX + 20, _startPosY+ 18, 45, 30); + + } + // сигнальный маяк + if (EntityGasolineTanker.getSignalBeacon()) + { + g.setColor(Color.BLACK); + g.drawRect(_startPosX + 85, _startPosY + 10, 7, 7); + g.setColor(EntityGasolineTanker.getAdditionalColor()); + g.fillRect( _startPosX + 85, _startPosY + 10, 7, 7); + + } + + // колеса + drawingWheels.drawWheels(g, Color.BLACK, _startPosX, _startPosY); + + // нижняя платформа + g.setColor(EntityGasolineTanker.getBodyColor()); + g.fillRect(_startPosX + 5, _startPosY + 40, 100, 10); + g.setColor(Color.BLACK); + g.drawRect(_startPosX + 5, _startPosY + 40, 100, 10); + + + // кабина + g.setColor(Color.BLUE); + g.fillRect(_startPosX + 80, _startPosY + 15, 25, 25); + g.setColor(Color.BLACK); + g.drawRect(_startPosX + 80, _startPosY + 15, 25, 25); + } +} diff --git a/src/src/DrawingWheels.java b/src/src/DrawingWheels.java new file mode 100644 index 0000000..157a009 --- /dev/null +++ b/src/src/DrawingWheels.java @@ -0,0 +1,57 @@ +import java.awt.*; + +public class DrawingWheels { + private NumWheels numWheels; + + //определяет количество колес + public void setNumWheels(int number) { + switch (number) { + case 1: + numWheels = NumWheels.Two; + break; + case 2: + numWheels = NumWheels.Three; + break; + case 3: + numWheels = NumWheels.Four; + break; + default: + numWheels = NumWheels.Three; + } + } + + public void drawWheels(Graphics2D g2D, Color color, int _startPosX, int _startPosY) { + switch (numWheels) { + case Two: + drawTwoWheels(g2D, color, _startPosX, _startPosY); + break; + case Three: + drawThreeWheels(g2D, color, _startPosX, _startPosY); + break; + case Four: + drawFourWheels(g2D, color, _startPosX, _startPosY); + break; + } + } + + private void drawTwoWheels(Graphics2D g2D, Color color, int _startPosX, int _startPosY) { + g2D.setColor(color); + g2D.fillOval(_startPosX + 5, _startPosY + 50, 20, 20); + g2D.fillOval(_startPosX + 85, _startPosY + 50, 20, 20); + } + + private void drawThreeWheels(Graphics2D g2D, Color color, int _startPosX, int _startPosY) { + g2D.setColor(color); + g2D.fillOval(_startPosX + 5, _startPosY + 50, 20, 20); + g2D.fillOval(_startPosX + 25, _startPosY + 50, 20, 20); + g2D.fillOval(_startPosX + 85, _startPosY + 50, 20, 20); + } + + private void drawFourWheels(Graphics2D g2D, Color color, int _startPosX, int _startPosY) { + g2D.setColor(color); + g2D.fillOval(_startPosX + 5, _startPosY + 50, 20, 20); + g2D.fillOval(_startPosX + 25, _startPosY + 50, 20, 20); + g2D.fillOval(_startPosX + 65, _startPosY + 50, 20, 20); + g2D.fillOval(_startPosX + 85, _startPosY + 50, 20, 20); + } +} diff --git a/src/src/EntityGasolineTanker.java b/src/src/EntityGasolineTanker.java new file mode 100644 index 0000000..fdb6ddb --- /dev/null +++ b/src/src/EntityGasolineTanker.java @@ -0,0 +1,37 @@ +import java.awt.*; +public class EntityGasolineTanker { + // Скорость + private int Speed; + + // Вес + private double Weight; + + // Основной цвет + private Color BodyColor; + public Color getBodyColor() {return BodyColor;} + + // Дополнительный цвет(для опциональныз элементов) + public Color AdditionalColor; + public Color getAdditionalColor() {return AdditionalColor;} + + // Признак (опция) наличия бака под бензин + private boolean GasTank; + public boolean getGasTank() {return GasTank;} + + // Признак (опция) наличия сигнального маяка на кабине + private boolean SignalBeacon; + public boolean getSignalBeacon() {return SignalBeacon;} + + // Шаг перемещения бензовоза + public double Step; + + public void Init(int speed, double weight, Color bodyColor, Color additionalColor, boolean signalBeacon, boolean gasTank){ + Speed = speed; + Weight = weight; + BodyColor = bodyColor; + AdditionalColor = additionalColor; + GasTank = gasTank; + SignalBeacon = signalBeacon; + Step = Speed * 700 / Weight; + } +} diff --git a/src/src/FormGasolineTanker.form b/src/src/FormGasolineTanker.form new file mode 100644 index 0000000..a2fef13 --- /dev/null +++ b/src/src/FormGasolineTanker.form @@ -0,0 +1,62 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/src/FormGasolineTanker.java b/src/src/FormGasolineTanker.java new file mode 100644 index 0000000..83da9c4 --- /dev/null +++ b/src/src/FormGasolineTanker.java @@ -0,0 +1,126 @@ +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.Random; +public class FormGasolineTanker extends JFrame{ + private int Width; + private int Height; + private CanvasGasolineTanker canvasGasolineTanker = new CanvasGasolineTanker(); + private JButton buttonCreate = new JButton("Создание"); + private JButton buttonRight = new JButton(); + private JButton buttonLeft = new JButton(); + private JButton buttonDown = new JButton(); + private JButton buttonUp = new JButton(); + + public void Init(){ + setTitle("Бензовоз"); + setSize(900,600); + setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + + Width = getWidth(); + Height = getHeight(); + + buttonCreate.setName("CREATE"); + + buttonUp.setName("buttonUp"); + Icon iconUp = new ImageIcon("src\\src\\resources\\Up.jpg"); + buttonUp.setIcon(iconUp); + + buttonDown.setName("buttonDown"); + Icon iconDown = new ImageIcon("src\\src\\resources\\Down.jpg"); + buttonDown.setIcon(iconDown); + + buttonLeft.setName("buttonLeft"); + Icon iconLeft = new ImageIcon("src\\src\\resources\\Left.jpg"); + buttonLeft.setIcon(iconLeft); + + buttonRight.setName("buttonRight"); + Icon iconRight = new ImageIcon("src\\src\\resources\\Right.jpg"); + buttonRight.setIcon(iconRight); + + buttonCreate.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + int StartPositionX = 10 + (int)(Math.random() * 90); + int StartPositionY = 10 + (int)(Math.random() * 90); + int speed = 10 + (int)(Math.random() * 90); + double weight = 1000 + (double)(Math.random() * 5000); + Color bodyColor = new Color((int)(Math.random() * 255 + 0), (int)(Math.random() * 255 + 0), (int) (Math.random() * 255 + 0)); + Color additionalColor = new Color((int)(Math.random() * 255 + 0), (int)(Math.random() * 255 + 0), (int) (Math.random() * 255 + 0)); + boolean gasTank = new Random().nextBoolean(); + boolean signalBeacon = new Random().nextBoolean(); + int wheelsNum = new Random().nextInt(3)+1; + canvasGasolineTanker._gasolineTanker = new DrawingGasolineTanker(); + canvasGasolineTanker._gasolineTanker.Init(speed, weight, bodyColor, additionalColor, gasTank, signalBeacon, wheelsNum); + canvasGasolineTanker._gasolineTanker.SetPictureSize(Width, Height); + canvasGasolineTanker._gasolineTanker.SetPosition(StartPositionX, StartPositionY); + canvasGasolineTanker.repaint(); + } + }); + + ActionListener actionListener = new ActionListener() { + @Override + public void actionPerformed(ActionEvent event) { + if (canvasGasolineTanker._gasolineTanker == null) return; + boolean result = false; + switch ((((JButton)(event.getSource())).getName())) { + case "buttonUp": + result = canvasGasolineTanker._gasolineTanker.MoveTransport(DirectionType.Up); + break; + case "buttonDown": + result = canvasGasolineTanker._gasolineTanker.MoveTransport(DirectionType.Down); + break; + case "buttonLeft": + result = canvasGasolineTanker._gasolineTanker.MoveTransport(DirectionType.Left); + break; + case "buttonRight": + result = canvasGasolineTanker._gasolineTanker.MoveTransport(DirectionType.Right); + break; + } + if (result) { + canvasGasolineTanker.repaint(); + } + } + }; + + buttonUp.addActionListener(actionListener); + buttonDown.addActionListener(actionListener); + buttonLeft.addActionListener(actionListener); + buttonRight.addActionListener(actionListener); + + setLayout(null); + canvasGasolineTanker.setBounds(0,0, getWidth(), getHeight()); + buttonCreate.setBounds(15, getHeight() - 95, 200, 35); + buttonUp.setBounds(getWidth() - 140, getHeight() - 160, 45, 45); + buttonDown.setBounds(getWidth() - 140, getHeight() - 100, 45, 45); + buttonRight.setBounds(getWidth() - 80, getHeight() - 100, 45, 45); + buttonLeft.setBounds(getWidth() - 200, getHeight() - 100, 45, 45); + add(buttonCreate); + add(buttonUp); + add(buttonDown); + add(buttonRight); + add(buttonLeft); + add(canvasGasolineTanker); + setVisible(true); + + addComponentListener(new ComponentAdapter() { + public void componentResized(ComponentEvent e) { + Width = getWidth() - 15; + Height = getHeight() - 35; + if (canvasGasolineTanker._gasolineTanker != null) + canvasGasolineTanker._gasolineTanker.SetPictureSize(Width, Height); + canvasGasolineTanker.setBounds(0,0, getWidth(), getHeight()); + buttonCreate.setBounds(15, getHeight() - 95, 200, 35); + buttonUp.setBounds(getWidth() - 140, getHeight() - 160, 45, 45); + buttonDown.setBounds(getWidth() - 140, getHeight() - 100, 45, 45); + buttonRight.setBounds(getWidth() - 80, getHeight() - 100, 45, 45); + buttonLeft.setBounds(getWidth() - 200, getHeight() - 100, 45, 45); + + } + }); + + } +} diff --git a/src/src/Main.java b/src/src/Main.java new file mode 100644 index 0000000..0091087 --- /dev/null +++ b/src/src/Main.java @@ -0,0 +1,7 @@ +import java.awt.*; +public class Main{ + public static void main(String[] args){ + FormGasolineTanker formGasolineTanker = new FormGasolineTanker(); + formGasolineTanker.Init(); + } +} \ No newline at end of file diff --git a/src/src/NumWheels.java b/src/src/NumWheels.java new file mode 100644 index 0000000..abadda7 --- /dev/null +++ b/src/src/NumWheels.java @@ -0,0 +1,5 @@ +public enum NumWheels { + Two, + Three, + Four +} diff --git a/src/src/resources/Down.jpg b/src/src/resources/Down.jpg new file mode 100644 index 0000000..fc21b6a Binary files /dev/null and b/src/src/resources/Down.jpg differ diff --git a/src/src/resources/Left.jpg b/src/src/resources/Left.jpg new file mode 100644 index 0000000..453db80 Binary files /dev/null and b/src/src/resources/Left.jpg differ diff --git a/src/src/resources/Right.jpg b/src/src/resources/Right.jpg new file mode 100644 index 0000000..1f9989a Binary files /dev/null and b/src/src/resources/Right.jpg differ diff --git a/src/src/resources/Up.jpg b/src/src/resources/Up.jpg new file mode 100644 index 0000000..bfdaef6 Binary files /dev/null and b/src/src/resources/Up.jpg differ