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