diff --git a/RadarAirplane/src/Canvas.java b/RadarAirplane/src/Canvas.java new file mode 100644 index 0000000..e49955e --- /dev/null +++ b/RadarAirplane/src/Canvas.java @@ -0,0 +1,15 @@ +import javax.swing.*; +import java.awt.*; + +public class Canvas extends JComponent { + FormAirPlane form; + public Canvas(FormAirPlane form) { + this.form = form; + } + + @Override + public void paintComponent(Graphics g) { + Graphics2D g2 = (Graphics2D) g; + form.draw(g2); + } +} \ No newline at end of file diff --git a/RadarAirplane/src/Direction.java b/RadarAirplane/src/Direction.java new file mode 100644 index 0000000..870719c --- /dev/null +++ b/RadarAirplane/src/Direction.java @@ -0,0 +1,6 @@ +public enum Direction { + Up, + Right, + Left, + Down +} diff --git a/RadarAirplane/src/DrawingEntityPlain.java b/RadarAirplane/src/DrawingEntityPlain.java new file mode 100644 index 0000000..9cf11c8 --- /dev/null +++ b/RadarAirplane/src/DrawingEntityPlain.java @@ -0,0 +1,127 @@ +import java.awt.*; + +class DrawingEntityPlain +{ + public EntityAirPlane Airplane; + + private float _startPosX; + private float _startPosY; + + private int _pictureWidth = -1; + private int _pictureHeight = -1; + + private int _AirplaneWidth = 120; + private int _AirplaneHeight = 60; + + public void Init(int speed, float weight, Color bodyColor) + { + Airplane = new EntityAirPlane(); + Airplane.Init(speed, weight, bodyColor); + } + + public void SetPosition(int x, int y, int width, int height) + { + if (width < _AirplaneWidth || height < _AirplaneHeight) return; + + if (x + _AirplaneWidth > width || x < 0) return; + if (y + _AirplaneHeight > 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 + _AirplaneWidth + Airplane.Step < _pictureWidth) + { + _startPosX += Airplane.Step; + } + break; + case Left: + if (_startPosX - Airplane.Step > 0) + { + _startPosX -= Airplane.Step; + } + break; + case Up: + if (_startPosY - Airplane.Step > 0) + { + _startPosY -= Airplane.Step; + } + break; + case Down: + if (_startPosY + _AirplaneHeight + Airplane.Step < _pictureHeight) + { + _startPosY += Airplane.Step; + } + break; + } + + } + + public void DrawTransport(Graphics2D g) + { + if (_pictureWidth == -1 || _pictureHeight == -1) + { + return; + } + + + g.drawRect( (int)_startPosX, (int)_startPosY, 20, 30); + g.drawRect( (int)_startPosX, (int)_startPosY + 30, 100, 30); + g.drawRect( (int)_startPosX+100, (int)_startPosY + 40, 20, 15); + //koleso1 + g.drawRect( (int)_startPosX + 30, (int)_startPosY + 60, 5, 10); + g.drawOval( (int)_startPosX+28,(int) _startPosY+70, 9, 9); + //koleso2 + g.drawRect( (int)_startPosX + 80, (int)_startPosY + 60, 5, 10); + g.drawOval( (int)_startPosX + 78, (int)_startPosY + 70, 9, 9); + + //Korpys + g.setPaint(Airplane.BodyColor); + g.fillRect((int)_startPosX+3, (int)_startPosY + 33, 94, 24); + g.fillRect( (int)_startPosX+1, (int)_startPosY+1, 19, 29); + + //krilya + g.setPaint(Color.black); + g.fillRect((int)_startPosX + 30, (int)_startPosY + 40, 40, 8); + + //cabina + g.setPaint(Color.blue); + g.fillRect( (int)_startPosX + 101, (int)_startPosY + 41, 19, 14); + + } + + public void ChangeBorders(int width, int height) + { + _pictureWidth = width; + _pictureHeight = height; + if (_pictureWidth <= _AirplaneWidth || _pictureHeight <= _AirplaneHeight) + { + _pictureWidth = -1; + _pictureHeight = -1; + return; + } + if (_startPosX + _AirplaneWidth > _pictureWidth) + { + _startPosX = _pictureWidth - _AirplaneWidth; + } + if (_startPosY + _AirplaneHeight > _pictureHeight) + { + _startPosY = _pictureHeight - _AirplaneHeight; + } + } + +} \ No newline at end of file diff --git a/RadarAirplane/src/EntityAirPlane.java b/RadarAirplane/src/EntityAirPlane.java new file mode 100644 index 0000000..7559eec --- /dev/null +++ b/RadarAirplane/src/EntityAirPlane.java @@ -0,0 +1,22 @@ +import java.awt.*; +import java.util.Random; + +class EntityAirPlane +{ + 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; + } +} diff --git a/RadarAirplane/src/FormAirPlane.form b/RadarAirplane/src/FormAirPlane.form new file mode 100644 index 0000000..7226820 --- /dev/null +++ b/RadarAirplane/src/FormAirPlane.form @@ -0,0 +1,115 @@ +<?xml version="1.0" encoding="UTF-8"?> +<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="FormAirPlane"> + <grid id="27dc6" binding="mainPanel" layout-manager="GridBagLayout"> + <constraints> + <xy x="20" y="20" width="745" height="400"/> + </constraints> + <properties/> + <border type="none"/> + <children> + <grid id="c3c1c" binding="DrawPlace" layout-manager="CardLayout" hgap="0" vgap="0"> + <constraints> + <grid row="0" column="0" row-span="1" col-span="7" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/> + <gridbag weightx="2.0" weighty="2.0"/> + </constraints> + <properties/> + <border type="none"/> + <children/> + </grid> + <component id="df504" class="javax.swing.JButton" binding="createButton"> + <constraints> + <grid row="1" column="0" row-span="1" col-span="3" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/> + <gridbag weightx="0.0" weighty="0.0"/> + </constraints> + <properties> + <text value="создание"/> + </properties> + </component> + <grid id="e091d" layout-manager="GridBagLayout"> + <constraints> + <grid row="1" column="3" row-span="1" col-span="4" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/> + <gridbag weightx="2.0" weighty="0.0"/> + </constraints> + <properties/> + <border type="none"/> + <children> + <hspacer id="323b6"> + <constraints> + <grid row="0" column="1" row-span="1" col-span="1" vsize-policy="1" hsize-policy="6" anchor="0" fill="1" indent="0" use-parent-layout="false"/> + <gridbag weightx="0.0" weighty="0.0"/> + </constraints> + </hspacer> + <vspacer id="cc4bd"> + <constraints> + <grid row="1" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/> + <gridbag weightx="0.0" weighty="0.0"/> + </constraints> + </vspacer> + <component id="5bf4f" class="javax.swing.JButton" binding="upButton" default-binding="true"> + <constraints> + <grid row="0" column="2" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/> + <gridbag weightx="0.0" weighty="0.0"/> + </constraints> + <properties> + <text value="up"/> + </properties> + </component> + <component id="b31a8" class="javax.swing.JButton" binding="downButton" default-binding="true"> + <constraints> + <grid row="1" column="2" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/> + <gridbag weightx="0.0" weighty="0.0"/> + </constraints> + <properties> + <text value="down"/> + </properties> + </component> + <component id="1d949" class="javax.swing.JButton" binding="leftButton" default-binding="true"> + <constraints> + <grid row="1" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/> + <gridbag weightx="0.0" weighty="0.0"/> + </constraints> + <properties> + <text value="left"/> + </properties> + </component> + <component id="527d2" class="javax.swing.JButton" binding="rightButton" default-binding="true"> + <constraints> + <grid row="1" column="3" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/> + <gridbag weightx="0.0" weighty="0.0"/> + </constraints> + <properties> + <text value="right"/> + </properties> + </component> + </children> + </grid> + <component id="fa09a" class="javax.swing.JLabel" binding="speedLabel"> + <constraints> + <grid row="2" column="3" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/> + <gridbag weightx="0.0" weighty="0.0"/> + </constraints> + <properties> + <text value="Скорость: "/> + </properties> + </component> + <component id="5d314" class="javax.swing.JLabel" binding="weightLabel"> + <constraints> + <grid row="2" column="4" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/> + <gridbag weightx="0.0" weighty="0.0"/> + </constraints> + <properties> + <text value="Вес: "/> + </properties> + </component> + <component id="9494b" class="javax.swing.JLabel" binding="colorLabel"> + <constraints> + <grid row="2" column="5" row-span="1" col-span="2" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/> + <gridbag weightx="0.0" weighty="0.0"/> + </constraints> + <properties> + <text value="Цвет"/> + </properties> + </component> + </children> + </grid> +</form> \ No newline at end of file diff --git a/RadarAirplane/src/FormAirPlane.java b/RadarAirplane/src/FormAirPlane.java new file mode 100644 index 0000000..442cef0 --- /dev/null +++ b/RadarAirplane/src/FormAirPlane.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 FormAirPlane { + 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; + + DrawingEntityPlain _airPlane; + + + 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(); + + _airPlane = new DrawingEntityPlain(); + + _airPlane.Init(rnd.nextInt(100, 300), rnd.nextInt(1000, 2000), + new Color(rnd.nextInt(0, 256), rnd.nextInt(0, 256), rnd.nextInt(0, 256))); + + _airPlane.SetPosition((int)rnd.nextInt(10, 100), (int)rnd.nextInt(10, 100), canvSize.width, canvSize.height); + + Color bodyColor = _airPlane.Airplane.BodyColor; + String colorString = "(" + bodyColor.getRed() + ", " + bodyColor.getGreen() + ", " + bodyColor.getBlue() + ")"; + + speedLabel.setText("Скорость: " + _airPlane.Airplane.Speed + " "); + weightLabel.setText("Вес: " + _airPlane.Airplane.Weight + " "); + colorLabel.setText("Цвет: " + colorString); + + canv.repaint(); + }); + + jframe.addComponentListener(new ComponentAdapter() { + @Override + public void componentResized(ComponentEvent e) { + if(_airPlane == null) return; + _airPlane.ChangeBorders(canv.getSize().width, canv.getSize().height); + jframe.revalidate(); + } + }); + + upButton.addActionListener(e -> { + if(_airPlane == null) return; + _airPlane.MoveTransport(Direction.Up); + canv.repaint(); + }); + rightButton.addActionListener(e -> { + if(_airPlane == null) return; + _airPlane.MoveTransport(Direction.Right); + canv.repaint(); + }); + downButton.addActionListener(e -> { + if(_airPlane == null) return; + _airPlane.MoveTransport(Direction.Down); + canv.repaint(); + }); + leftButton.addActionListener(e -> { + if(_airPlane == null) return; + _airPlane.MoveTransport(Direction.Left); + canv.repaint(); + }); + } + + public void draw(Graphics2D g) { + if(_airPlane == null) return; + _airPlane.DrawTransport(g); + } +} \ No newline at end of file diff --git a/RadarAirplane/src/Program.java b/RadarAirplane/src/Program.java index a30fd5d..113c3d8 100644 --- a/RadarAirplane/src/Program.java +++ b/RadarAirplane/src/Program.java @@ -3,6 +3,6 @@ import java.awt.*; public class Program { public static void main(String[] args) { - System.out.println("Hello world"); + new FormAirPlane().run(); } } \ No newline at end of file