diff --git a/RadarAirplane/src/Canvas.java b/RadarAirplane/src/Canvas.java new file mode 100644 index 0000000..6421b3a --- /dev/null +++ b/RadarAirplane/src/Canvas.java @@ -0,0 +1,15 @@ +import javax.swing.*; +import java.awt.*; + +public class Canvas extends JComponent { + Form form; + public Canvas(Form form) { + this.form = form; + } + + @Override + public void paintComponent(Graphics g) { + Graphics2D g2 = (Graphics2D) g; + form.Draw(g2); + } +} 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..34ad00b --- /dev/null +++ b/RadarAirplane/src/DrawingEntityPlain.java @@ -0,0 +1,130 @@ +import java.awt.*; +import java.util.Random; +class DrawingEntityPlain +{ + public EntityAirPlane Airplane; + public DrawingPorthole drawingPortholes = new DrawingPorthole(); + private float _startPosX; + private float _startPosY; + + private int _pictureWidth = -1; + private int _pictureHeight = -1; + + private int _AirplaneWidth = 240; + private int _AirplaneHeight = 150; + + public void Init(int speed, float weight, Color bodyColor) + { + Random rnd = new Random(); + Airplane = new EntityAirPlane(); + Airplane.Init(speed, weight, bodyColor); + drawingPortholes.Init(rnd.nextInt(1, 35),Airplane.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, 40, 60); + g.drawRect( (int)_startPosX, (int)_startPosY + 60, 200, 60); + g.drawRect( (int)_startPosX+100, (int)_startPosY + 80, 40, 30); + //koleso1 + g.drawRect( (int)_startPosX + 60, (int)_startPosY + 120, 10, 20); + g.drawOval( (int)_startPosX+56,(int) _startPosY+140, 18, 18); + //koleso2 + g.drawRect( (int)_startPosX + 160, (int)_startPosY + 120, 10, 20); + g.drawOval( (int)_startPosX + 156, (int)_startPosY + 140, 18, 18); + + //Korpys + g.setPaint(Airplane.BodyColor); + g.fillRect((int)_startPosX+6, (int)_startPosY + 66, 188, 48); + g.fillRect( (int)_startPosX+2, (int)_startPosY+2, 38, 58); + + //krilya + g.setPaint(Color.black); + g.fillRect((int)_startPosX + 60, (int)_startPosY + 80, 80, 16); + + //cabina + g.setPaint(Color.blue); + g.fillRect( (int)_startPosX + 202, (int)_startPosY + 82, 38, 28); + + drawingPortholes.draw(g, (int)_startPosX+6, (int)_startPosY+70); + } + + 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/DrawingPorthole.java b/RadarAirplane/src/DrawingPorthole.java new file mode 100644 index 0000000..9dd300a --- /dev/null +++ b/RadarAirplane/src/DrawingPorthole.java @@ -0,0 +1,43 @@ +import java.awt.*; + +public class DrawingPorthole { + + private Porthole PortholeCount; + Color color; + + public void SetCount(int count){ + if(count <= 10) PortholeCount = Porthole.Ten; + else if(count >= 30) PortholeCount = Porthole.Twenty; + else PortholeCount = Porthole.Thirty; + } + public void Init(int count, Color bodyColor) { + SetCount(count); + color = bodyColor; + + } + + + public void draw(Graphics2D g, int startPosX, int startPosY) { + g.setPaint(Color.white); + int count = 0; + int i = -1; + int j = 0; + while(true) + { + if(i==14) { + i = 0; + j=30; + } + else i++; + if(PortholeCount == Porthole.Ten && count==10) break; + else if(PortholeCount == Porthole.Twenty && count==20) break; + else if(PortholeCount == Porthole.Thirty && count==30) break; + g.drawOval(startPosX+i*12 , startPosY + j, 10, 10); + g.fillOval(startPosX+i*12, startPosY + j, 10, 10); + count++; + } + + + + } +} 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/Form.java b/RadarAirplane/src/Form.java new file mode 100644 index 0000000..0347fbb --- /dev/null +++ b/RadarAirplane/src/Form.java @@ -0,0 +1,5 @@ +import java.awt.*; + +public interface Form { + void Draw(Graphics2D g); +} diff --git a/RadarAirplane/src/FormAirPlane.form b/RadarAirplane/src/FormAirPlane.form new file mode 100644 index 0000000..9f861cb --- /dev/null +++ b/RadarAirplane/src/FormAirPlane.form @@ -0,0 +1,134 @@ + +
diff --git a/RadarAirplane/src/FormAirPlane.java b/RadarAirplane/src/FormAirPlane.java new file mode 100644 index 0000000..f02cf12 --- /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 implements Form { + 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(); + }); + } + @Override + public void Draw(Graphics2D g) { + if(_airPlane == null) return; + _airPlane.DrawTransport(g); + } +} \ No newline at end of file diff --git a/RadarAirplane/src/Porthole.java b/RadarAirplane/src/Porthole.java new file mode 100644 index 0000000..906bb3f --- /dev/null +++ b/RadarAirplane/src/Porthole.java @@ -0,0 +1,5 @@ +public enum Porthole { + Ten, + Twenty, + Thirty +} 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