diff --git a/Canvas.java b/Canvas.java new file mode 100644 index 0000000..be5f0df --- /dev/null +++ b/Canvas.java @@ -0,0 +1,15 @@ +import javax.swing.*; +import java.awt.*; + +public class Canvas extends JComponent { + FormAircraft form; + public Canvas(FormAircraft form) { + this.form = form; + } + + @Override + public void paintComponent(Graphics g) { + Graphics2D g2 = (Graphics2D) g; + form.draw(g2); + } +} diff --git a/Direction.java b/Direction.java new file mode 100644 index 0000000..870719c --- /dev/null +++ b/Direction.java @@ -0,0 +1,6 @@ +public enum Direction { + Up, + Right, + Left, + Down +} diff --git a/DrawingAircraft.java b/DrawingAircraft.java new file mode 100644 index 0000000..c7011d0 --- /dev/null +++ b/DrawingAircraft.java @@ -0,0 +1,146 @@ +import java.awt.*; + +class DrawingAircraft +{ + public EntityAircraft AirFighter; + + private float _startPosX; + private float _startPosY; + + private int _pictureWidth = -1; + private int _pictureHeight = -1; + + private int _airFighterWidth = 195; + private int _airFighterHeight = 166; + + public void Init(int speed, float weight, Color bodyColor) + { + AirFighter = new EntityAircraft(); + AirFighter.Init(speed, weight, bodyColor); + } + + public void SetPosition(int x, int y, int width, int height) + { + if (width < _airFighterWidth || height < _airFighterHeight) return; + + if (x + _airFighterWidth > width || x < 0) return; + if (y + _airFighterHeight > height || y < 0) return; + + _startPosX = x; + _startPosY = y; + + _pictureWidth = width; + _pictureHeight = height; + } + + public void MoveTransport(Direction direction) + { + if (_pictureWidth == -1 || _pictureHeight == -1) + { + return; + } + + + switch (direction) + { + case Right: + if (_startPosX + _airFighterWidth + AirFighter.Step < _pictureWidth) + { + _startPosX += AirFighter.Step; + } + break; + case Left: + if (_startPosX - AirFighter.Step > 0) + { + _startPosX -= AirFighter.Step; + } + break; + case Up: + if (_startPosY - AirFighter.Step > 0) + { + _startPosY -= AirFighter.Step; + } + break; + case Down: + if (_startPosY + _airFighterHeight + AirFighter.Step < _pictureHeight) + { + _startPosY += AirFighter.Step; + } + break; + } + + } + + public void DrawTransport(Graphics2D g) + { + if (_pictureWidth == -1 || _pictureHeight == -1) + { + return; + } + + g.setPaint(AirFighter.BodyColor); + + Polygon front = new Polygon(); + front.addPoint((int)(_startPosX + 160), (int)(_startPosY + 70)); + front.addPoint((int)(_startPosX + 195), (int)(_startPosY + 83)); + front.addPoint((int)(_startPosX + 160), (int)(_startPosY + 96)); + + + Polygon tailTop = new Polygon(); + tailTop.addPoint((int)(_startPosX), (int)(_startPosY + 30)); + tailTop.addPoint((int)(_startPosX), (int)(_startPosY + 70)); + tailTop.addPoint((int)(_startPosX + 25), (int)(_startPosY + 70)); + tailTop.addPoint((int)(_startPosX + 25), (int)(_startPosY + 55)); + + + Polygon tailBottom = new Polygon(); + tailBottom.addPoint((int)(_startPosX), (int)(_startPosY + 96)); + tailBottom.addPoint((int)(_startPosX), (int)(_startPosY + 136)); + tailBottom.addPoint((int)(_startPosX + 25), (int)(_startPosY + 111)); + tailBottom.addPoint((int)(_startPosX + 25), (int)(_startPosY + 96)); + + + Polygon wingTop = new Polygon(); + wingTop.addPoint((int)(_startPosX + 100), (int)(_startPosY)); + wingTop.addPoint((int)(_startPosX + 100), (int)(_startPosY + 70)); + wingTop.addPoint((int)(_startPosX + 75), (int)(_startPosY + 70)); + wingTop.addPoint((int)(_startPosX + 90), (int)(_startPosY)); + + + + Polygon wingBottom = new Polygon(); + wingBottom.addPoint((int)(_startPosX + 100), (int)(_startPosY + 96)); + wingBottom.addPoint((int)(_startPosX + 100), (int)(_startPosY + 166)); + wingBottom.addPoint((int)(_startPosX + 90), (int)(_startPosY + 166)); + wingBottom.addPoint((int)(_startPosX + 75), (int)(_startPosY + 96)); + + g.fillPolygon(front); + g.drawPolygon(tailTop); + g.drawPolygon(tailBottom); + g.drawPolygon(wingTop); + g.drawPolygon(wingBottom); + g.drawRect((int)_startPosX, (int)_startPosY + 70, 160, 26); + } + + public void ChangeBorders(int width, int height) + { + _pictureWidth = width; + _pictureHeight = height; + if (_pictureWidth <= _airFighterWidth || _pictureHeight <= _airFighterHeight) + { + _pictureWidth = -1; + _pictureHeight = -1; + return; + } + if (_startPosX + _airFighterWidth > _pictureWidth) + { + _startPosX = _pictureWidth - _airFighterWidth; + } + if (_startPosY + _airFighterHeight > _pictureHeight) + { + _startPosY = _pictureHeight - _airFighterHeight; + } + } + +} + diff --git a/EntityAircraft.java b/EntityAircraft.java new file mode 100644 index 0000000..2988375 --- /dev/null +++ b/EntityAircraft.java @@ -0,0 +1,22 @@ +import java.awt.*; +import java.util.Random; + +class EntityAircraft +{ + public int Speed; + public float Weight; + public Color BodyColor; + + public float Step; + + public void Init(int speed, float weight, Color bodyColor) + { + Random rnd = new Random(); + + Speed = speed <= 0 ? rnd.nextInt(50, 150) : speed; + Weight = weight <= 0 ? rnd.nextInt(50, 70) : weight; + BodyColor = bodyColor; + + Step = Speed * 100 / Weight; + } +} \ No newline at end of file diff --git a/FormAircraft.form b/FormAircraft.form new file mode 100644 index 0000000..fedb5cb --- /dev/null +++ b/FormAircraft.form @@ -0,0 +1,115 @@ + +
diff --git a/FormAircraft.java b/FormAircraft.java new file mode 100644 index 0000000..9441cf7 --- /dev/null +++ b/FormAircraft.java @@ -0,0 +1,95 @@ +import javax.swing.*; +import javax.swing.border.LineBorder; +import java.awt.*; +import java.awt.event.ComponentAdapter; +import java.awt.event.ComponentEvent; +import java.util.Random; + +public class FormAircraft { + private JButton createButton; + private JButton upButton; + private JButton rightButton; + private JButton downButton; + private JButton leftButton; + private JPanel mainPanel; + private JPanel DrawPlace; + private JLabel speedLabel; + private JLabel weightLabel; + private JLabel colorLabel; + + DrawingAircraft _airFighter; + + + private JFrame jframe = getFrame(); + + private JFrame getFrame() { + JFrame frame = new JFrame(); + frame.setVisible(true); + frame.setBounds(300, 100, 800, 600); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + return frame; + } + + public void run() { + jframe.add(mainPanel); + Canvas canv = new Canvas(this); + DrawPlace.add(canv); + + + createButton.addActionListener(e -> { + Dimension canvSize = canv.getSize(); + Random rnd = new Random(); + + _airFighter = new DrawingAircraft(); + + _airFighter.Init(rnd.nextInt(100, 300), rnd.nextInt(1000, 2000), + new Color(rnd.nextInt(0, 256), rnd.nextInt(0, 256), rnd.nextInt(0, 256))); + + _airFighter.SetPosition((int)rnd.nextInt(10, 100), (int)rnd.nextInt(10, 100), canvSize.width, canvSize.height); + + Color bodyColor = _airFighter.AirFighter.BodyColor; + String colorString = "(" + bodyColor.getRed() + ", " + bodyColor.getGreen() + ", " + bodyColor.getBlue() + ")"; + + speedLabel.setText("Скорость: " + _airFighter.AirFighter.Speed + " "); + weightLabel.setText("Вес: " + _airFighter.AirFighter.Weight + " "); + colorLabel.setText("Цвет: " + colorString); + + canv.repaint(); + }); + + jframe.addComponentListener(new ComponentAdapter() { + @Override + public void componentResized(ComponentEvent e) { + if(_airFighter == null) return; + _airFighter.ChangeBorders(canv.getSize().width, canv.getSize().height); + jframe.revalidate(); + } + }); + + upButton.addActionListener(e -> { + if(_airFighter == null) return; + _airFighter.MoveTransport(Direction.Up); + canv.repaint(); + }); + rightButton.addActionListener(e -> { + if(_airFighter == null) return; + _airFighter.MoveTransport(Direction.Right); + canv.repaint(); + }); + downButton.addActionListener(e -> { + if(_airFighter == null) return; + _airFighter.MoveTransport(Direction.Down); + canv.repaint(); + }); + leftButton.addActionListener(e -> { + if(_airFighter == null) return; + _airFighter.MoveTransport(Direction.Left); + canv.repaint(); + }); + } + + public void draw(Graphics2D g) { + if(_airFighter == null) return; + _airFighter.DrawTransport(g); + } +} diff --git a/Main.java b/Main.java new file mode 100644 index 0000000..420ccca --- /dev/null +++ b/Main.java @@ -0,0 +1,5 @@ +public class Main { + public static void main(String[] args) { + new FormAircraft().run(); + } +}