diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/PIbd_23_Kislitsa_E.D_AirFighter_Hard.iml b/.idea/PIbd_23_Kislitsa_E.D_AirFighter_Hard.iml new file mode 100644 index 0000000..852166e --- /dev/null +++ b/.idea/PIbd_23_Kislitsa_E.D_AirFighter_Hard.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..432b646 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..598c828 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..2b63946 --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/DownButton.png b/DownButton.png new file mode 100644 index 0000000..01d7c5b Binary files /dev/null and b/DownButton.png differ diff --git a/LeftButton.png b/LeftButton.png new file mode 100644 index 0000000..3a5f2a6 Binary files /dev/null and b/LeftButton.png differ diff --git a/RightButton.png b/RightButton.png new file mode 100644 index 0000000..1d103bb Binary files /dev/null and b/RightButton.png differ diff --git a/UpButton.png b/UpButton.png new file mode 100644 index 0000000..996ae99 Binary files /dev/null and b/UpButton.png differ diff --git a/src/AirFighterHard/DrawningAirFighter.java b/src/AirFighterHard/DrawningAirFighter.java deleted file mode 100644 index 8dcfa4d..0000000 --- a/src/AirFighterHard/DrawningAirFighter.java +++ /dev/null @@ -1,189 +0,0 @@ -package AirFighterHard; - -import javax.swing.*; -import java.awt.*; -import java.util.Random; - -public class DrawningAirFighter { - - JPanel AirFighterPanel; - private EntityAirFighter EntityAirFighter; - private int _pictureWidth; - private int _pictureHeight; - private int _startPosX = 0; - private int _startPosY = 0; - private int _airfighterWidth = 160; - private int _airfighterHeight = 68; - private int _airfighterwingkorpusHeight = 90; - private DrawningEngines DrawningEngines; - - public EntityAirFighter EntityAirFighter(){ - return EntityAirFighter; - } - public boolean Init(int speed, double weight,Color bodyColor, int engineNumb, - int width, int height, boolean racket, boolean wing, JPanel airfighterPanel){ - if(width <= _airfighterWidth || height <= _airfighterHeight) - return false; - _startPosY=70; - _startPosX = 0; - - airfighterPanel.setSize(width, height); - AirFighterPanel = airfighterPanel; - airfighterPanel.paint(AirFighterPanel.getGraphics()); - - _pictureWidth = width; - _pictureHeight = height; - EntityAirFighter = new EntityAirFighter(); - EntityAirFighter.Init(speed, weight, bodyColor, engineNumb, racket, wing); - - DrawningEngines = new DrawningEngines(); - DrawningEngines.Init(_startPosX,_startPosY,airfighterPanel); - Random rand = new Random(); - DrawningEngines.ChangeEnginesNumb(engineNumb); - return true; - } - - public void SetPosition(int x, int y){ - if(EntityAirFighter == null) - return; - _startPosX = x; - _startPosY = y; - if (x + _airfighterWidth >= _pictureWidth || y + _airfighterHeight >= _pictureHeight) { - _startPosX = 0; - _startPosY = 70; - } - } - - public void MoveTransport(DirectionType direction){ - if (EntityAirFighter == null) - return; - AirFighterPanel.paint(AirFighterPanel.getGraphics()); - switch (direction) - { - case Left: - if (_startPosX - EntityAirFighter.Step() >= 0) - _startPosX -= (int) EntityAirFighter.Step(); - - break; - case Up: - if (_startPosY - EntityAirFighter.Step() - _airfighterHeight > 0) - _startPosY -= (int) EntityAirFighter.Step(); - - break; - case Right: - if (_startPosX + EntityAirFighter.Step() + _airfighterWidth < _pictureWidth) - _startPosX += (int) EntityAirFighter.Step(); - else - _startPosX = _pictureWidth - _airfighterWidth; - - break; - case Down: - if (_startPosY + EntityAirFighter.Step() + _airfighterwingkorpusHeight < _pictureHeight) - _startPosY += (int) EntityAirFighter.Step(); - break; - } - DrawningEngines.CurX = _startPosX; - DrawningEngines.CurY = _startPosY; - } - - public void DrawAirFighter(){ - Graphics2D g2d = (Graphics2D) AirFighterPanel.getGraphics(); - if (EntityAirFighter == null) - return; - DrawningEngines.DrawEngines(); -//тело самолёта - g2d.setColor(EntityAirFighter.BodyColor()); - g2d.fillRect(_startPosX + 20,_startPosY +4,140,20); - g2d.setColor(Color.BLACK); - g2d.drawRect(_startPosX + 20,_startPosY +4,140,20); -//Нос самолёта - int[] xPointsArrNose = {_startPosX + 20,_startPosX + 20,_startPosX-3}; - int[] yPointsArrNose = {_startPosY + 4,_startPosY + 24,_startPosY + 12}; - g2d.setColor(Color.BLACK); - g2d.fillPolygon(xPointsArrNose, yPointsArrNose, xPointsArrNose.length); - g2d.setColor(Color.BLACK); - g2d.drawPolygon(xPointsArrNose, yPointsArrNose, xPointsArrNose.length); - -// Правое крыло - int[] xPointsArrRightWing = {_startPosX + 80,_startPosX+80,_startPosX+85,_startPosX + 100}; - int[] yPointsArrRightWing = { _startPosY + 4,_startPosY - 66,_startPosY - 66, _startPosY + 4 }; - g2d.setColor(EntityAirFighter.BodyColor()); - g2d.fillPolygon(xPointsArrRightWing, yPointsArrRightWing, xPointsArrRightWing.length); - g2d.setColor(Color.BLACK); - g2d.drawPolygon(xPointsArrRightWing, yPointsArrRightWing, xPointsArrRightWing.length); - -// Левое крыло - int[] xPointsArrLeftWing = {_startPosX + 80,_startPosX + 100,_startPosX+85,_startPosX+80}; - int[] yPointsArrLeftWing = {_startPosY + 24,_startPosY + 24,_startPosY + 94,_startPosY + 94}; - g2d.setColor(EntityAirFighter.BodyColor()); - g2d.fillPolygon(xPointsArrLeftWing, yPointsArrLeftWing, xPointsArrLeftWing.length); - g2d.setColor(Color.BLACK); - g2d.drawPolygon(xPointsArrLeftWing, yPointsArrLeftWing, xPointsArrLeftWing.length); - -// Правое задние крыло - int[] xPointsArrRightBackWing={_startPosX + 140,_startPosX + 160,_startPosX+160,_startPosX+140}; - int[] yPointsArrRightBackWing={ _startPosY + 4,_startPosY + 4,_startPosY - 22,_startPosY -4}; - g2d.setColor(EntityAirFighter.BodyColor()); - g2d.fillPolygon(xPointsArrRightBackWing, yPointsArrRightBackWing, xPointsArrRightBackWing.length); - g2d.setColor(Color.BLACK); - g2d.drawPolygon(xPointsArrRightBackWing, yPointsArrRightBackWing, xPointsArrRightBackWing.length); -// Заднее левое крыло - int[] xPointsArrLeftBackWing= {_startPosX + 140,_startPosX + 160,_startPosX+160,_startPosX+140}; - int[] yPointsArrLeftBackWing= {_startPosY + 24,_startPosY + 24,_startPosY + 50,_startPosY + 32}; - g2d.setColor(EntityAirFighter.BodyColor()); - g2d.fillPolygon(xPointsArrLeftBackWing, yPointsArrLeftBackWing, xPointsArrLeftBackWing.length); - g2d.setColor(Color.BLACK); - g2d.drawPolygon(xPointsArrLeftBackWing, yPointsArrLeftBackWing, xPointsArrLeftBackWing.length); - //Ракеты - if (EntityAirFighter.Racket()) - { - g2d.setColor(Color.GRAY); - g2d.fillRect(_startPosX + 70, _startPosY - 15, 10, 10); - g2d.setColor(Color.BLACK); - g2d.drawRect(_startPosX + 70, _startPosY - 15, 10, 10); - int[] xPointsArrNoseRacket = {_startPosX + 70,_startPosX + 70,_startPosX + 60}; - int[] yPointsArrNoseRacket = {_startPosY -5,_startPosY - 15,_startPosY -10}; - - g2d.setColor(Color.RED); - g2d.fillPolygon(xPointsArrNoseRacket, yPointsArrNoseRacket, xPointsArrNoseRacket.length); - g2d.setColor(Color.BLACK); - g2d.drawPolygon(xPointsArrNoseRacket, yPointsArrNoseRacket, xPointsArrNoseRacket.length); - g2d.setColor(Color.GRAY); - g2d.fillRect(_startPosX + 70, _startPosY - 40, 10, 10); - g2d.setColor(Color.BLACK); - g2d.drawRect(_startPosX + 70, _startPosY - 40, 10, 10); - int[] xPoints2ArrNoseRacket = {_startPosX + 70,_startPosX + 70,_startPosX + 60}; - int[] yPoints2ArrNoseRacket = {_startPosY -30,_startPosY - 40,_startPosY -35}; - g2d.setColor(Color.RED); - g2d.fillPolygon(xPoints2ArrNoseRacket, yPoints2ArrNoseRacket, xPoints2ArrNoseRacket.length); - g2d.setColor(Color.BLACK); - g2d.drawPolygon(xPoints2ArrNoseRacket, yPoints2ArrNoseRacket, xPoints2ArrNoseRacket.length); - - g2d.setColor(Color.GRAY); - g2d.fillRect(_startPosX + 70, _startPosY + 59, 10, 10); - g2d.setColor(Color.BLACK); - g2d.drawRect(_startPosX + 70, _startPosY + 59, 10, 10); - int[] xPoints3ArrNoseRacket ={_startPosX + 70,_startPosX + 70,_startPosX + 60}; - int[] yPoints3ArrNoseRacket ={_startPosY +59,_startPosY + 69,_startPosY + 64}; - g2d.setColor(Color.RED); - g2d.fillPolygon(xPoints3ArrNoseRacket, yPoints3ArrNoseRacket, xPoints3ArrNoseRacket.length); - g2d.setColor(Color.BLACK); - g2d.drawPolygon(xPoints3ArrNoseRacket, yPoints3ArrNoseRacket, xPoints3ArrNoseRacket.length); - - g2d.setColor(Color.GRAY); - g2d.fillRect(_startPosX + 70, _startPosY + 34, 10, 10); - g2d.setColor(Color.BLACK); - g2d.drawRect(_startPosX + 70, _startPosY + 34, 10, 10); - int[] xPoints4ArrNoseRacket={_startPosX + 70,_startPosX + 70,_startPosX + 60}; - int[] yPoints4ArrNoseRacket={_startPosY +34,_startPosY + 44,_startPosY + 39}; - g2d.setColor(Color.RED); - g2d.fillPolygon(xPoints4ArrNoseRacket, yPoints4ArrNoseRacket, xPoints4ArrNoseRacket.length); - g2d.setColor(Color.BLACK); - g2d.drawPolygon(xPoints4ArrNoseRacket, yPoints4ArrNoseRacket, xPoints4ArrNoseRacket.length); - - } - - } - - -} diff --git a/src/AirFighterHard/EntityAirFighter.java b/src/AirFighterHard/EntityAirFighter.java deleted file mode 100644 index 8743420..0000000 --- a/src/AirFighterHard/EntityAirFighter.java +++ /dev/null @@ -1,38 +0,0 @@ -package AirFighterHard; -import java.awt.*; - -public class EntityAirFighter { - private int Speed, EngineNumb; - private double Weight, Step; - private Color BodyColor; - private boolean Wing; - private boolean Racket; - - public int Speed(){ - return Speed; - } - public int EngineNumb(){ - return EngineNumb; - } - public double Weight(){ - return Weight; - } - public double Step(){ - return Step; - } - public Color BodyColor(){ - return BodyColor; - } - public boolean Racket(){return Racket;} - public boolean Wing(){return Wing;} - public void Init(int speed, double weight, Color bodyColor, int engineNumb, - boolean racket, boolean wing){ - Speed = speed; - Weight = weight; - Step = (double)Speed * 100 / Weight; - BodyColor = bodyColor; - EngineNumb = engineNumb; - Racket = racket; - Wing = wing; - } -} diff --git a/src/AirFighterHard/Main.java b/src/AirFighterHard/Main.java deleted file mode 100644 index d60ae2e..0000000 --- a/src/AirFighterHard/Main.java +++ /dev/null @@ -1,96 +0,0 @@ -package AirFighterHard; -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.image.BufferedImage; -import java.io.File; -import java.io.IOException; -import java.util.Random; -import javax.imageio.ImageIO; -import javax.swing.*; - -public class Main { - public static void main(String[] args) throws IOException { - JFrame AirFighterFrame = new JFrame(); - JPanel AirFighterPanel = new JPanel(); - AirFighterFrame.setLayout(new BorderLayout()); - AirFighterFrame.setSize(900, 500); - AirFighterFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - AirFighterFrame.setLayout(new BorderLayout(1,1)); - DrawningAirFighter DrawningAirFighter = new DrawningAirFighter(); - AirFighterPanel.setLayout(null); - - BufferedImage RightIcon = ImageIO.read(new File("RightButton.png")); - BufferedImage LeftIcon = ImageIO.read(new File("LeftButton.png")); - BufferedImage UpIcon = ImageIO.read(new File("UpButton.png")); - BufferedImage DownIcon = ImageIO.read(new File("DownButton.png")); - - JButton RightButton = new JButton(new ImageIcon(RightIcon)); - JButton LeftButton = new JButton(new ImageIcon(LeftIcon)); - JButton UpButton = new JButton(new ImageIcon(UpIcon)); - JButton DownButton = new JButton(new ImageIcon(DownIcon)); - - JButton CreateButton = new JButton(); - CreateButton.setText("Создать"); - CreateButton.setBounds(12, 401, 90, 40); - RightButton.setBounds(840,411,30,30); - LeftButton.setBounds(768,411,30,30); - UpButton.setBounds(804,375,30,30); - DownButton.setBounds(804,411,30,30); - AirFighterPanel.add(CreateButton); - AirFighterPanel.add(RightButton); - AirFighterPanel.add(LeftButton); - AirFighterPanel.add(UpButton); - AirFighterPanel.add(DownButton); - AirFighterFrame.add(AirFighterPanel, BorderLayout.CENTER); - Random random = new Random(); - CreateButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - DrawningAirFighter.Init(random.nextInt(100, 300), random.nextDouble(1000, 3000), - Color.getHSBColor(random.nextInt(0, 301), random.nextInt(0, 301), random.nextInt(0, 301)), - random.nextInt(1, 4), - AirFighterPanel.getWidth(), AirFighterPanel.getHeight(), random.nextBoolean(), random.nextBoolean(), AirFighterPanel); - DrawningAirFighter.DrawAirFighter(); - } - }); - RightButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if(DrawningAirFighter.EntityAirFighter() == null) - return; - DrawningAirFighter.MoveTransport(DirectionType.Right); - DrawningAirFighter.DrawAirFighter(); - } - }); - LeftButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if(DrawningAirFighter.EntityAirFighter() == null) - return; - DrawningAirFighter.MoveTransport(DirectionType.Left); - DrawningAirFighter.DrawAirFighter(); - } - }); - UpButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if(DrawningAirFighter.EntityAirFighter() == null) - return; - DrawningAirFighter.MoveTransport(DirectionType.Up); - DrawningAirFighter.DrawAirFighter(); - } - }); - DownButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if(DrawningAirFighter.EntityAirFighter() == null) - return; - DrawningAirFighter.MoveTransport(DirectionType.Down); - DrawningAirFighter.DrawAirFighter(); - } - }); - - AirFighterFrame.setVisible(true); - } -} diff --git a/src/AirFighterHard/DirectionType.java b/src/DirectionType.java similarity index 73% rename from src/AirFighterHard/DirectionType.java rename to src/DirectionType.java index 136b40a..6f8ee58 100644 --- a/src/AirFighterHard/DirectionType.java +++ b/src/DirectionType.java @@ -1,5 +1,4 @@ -package AirFighterHard; - +package src; public enum DirectionType { Up, Down, diff --git a/src/DrawningObjects/DrawningAirFighter.java b/src/DrawningObjects/DrawningAirFighter.java new file mode 100644 index 0000000..0908cea --- /dev/null +++ b/src/DrawningObjects/DrawningAirFighter.java @@ -0,0 +1,69 @@ +package src.DrawningObjects; +import src.Entities.EntityAirplane; +import src.Entities.EntityAirFighter; + +import java.awt.*; + +public class DrawningAirFighter extends DrawningAirplane { + public DrawningAirFighter(int speed, double weight, Color bodyColor, Color additionalColor, + boolean dopwings, boolean rackets, int width, int height ){ + super(speed,weight,bodyColor,width,height); + if(EntityAirplane!=null){ + EntityAirplane = new EntityAirFighter(speed, weight, bodyColor, additionalColor, dopwings,rackets); + } + } + @Override + public void DrawAirplane(Graphics2D g2d) { + if (!(EntityAirplane instanceof EntityAirFighter)) { + return; + } + super.DrawAirplane(g2d); + EntityAirFighter _airplaneAirFighter = (EntityAirFighter) EntityAirplane; + if (EntityAirFighter.Racket()) { + g2d.setColor(Color.GRAY); + g2d.fillRect(_startPosX + 70, _startPosY - 15, 10, 10); + g2d.setColor(Color.BLACK); + g2d.drawRect(_startPosX + 70, _startPosY - 15, 10, 10); + int[] xPointsArrNoseRacket = {_startPosX + 70, _startPosX + 70, _startPosX + 60}; + int[] yPointsArrNoseRacket = {_startPosY - 5, _startPosY - 15, _startPosY - 10}; + + g2d.setColor(Color.RED); + g2d.fillPolygon(xPointsArrNoseRacket, yPointsArrNoseRacket, xPointsArrNoseRacket.length); + g2d.setColor(Color.BLACK); + g2d.drawPolygon(xPointsArrNoseRacket, yPointsArrNoseRacket, xPointsArrNoseRacket.length); + g2d.setColor(Color.GRAY); + g2d.fillRect(_startPosX + 70, _startPosY - 40, 10, 10); + g2d.setColor(Color.BLACK); + g2d.drawRect(_startPosX + 70, _startPosY - 40, 10, 10); + int[] xPoints2ArrNoseRacket = {_startPosX + 70, _startPosX + 70, _startPosX + 60}; + int[] yPoints2ArrNoseRacket = {_startPosY - 30, _startPosY - 40, _startPosY - 35}; + g2d.setColor(Color.RED); + g2d.fillPolygon(xPoints2ArrNoseRacket, yPoints2ArrNoseRacket, xPoints2ArrNoseRacket.length); + g2d.setColor(Color.BLACK); + g2d.drawPolygon(xPoints2ArrNoseRacket, yPoints2ArrNoseRacket, xPoints2ArrNoseRacket.length); + + g2d.setColor(Color.GRAY); + g2d.fillRect(_startPosX + 70, _startPosY + 59, 10, 10); + g2d.setColor(Color.BLACK); + g2d.drawRect(_startPosX + 70, _startPosY + 59, 10, 10); + int[] xPoints3ArrNoseRacket = {_startPosX + 70, _startPosX + 70, _startPosX + 60}; + int[] yPoints3ArrNoseRacket = {_startPosY + 59, _startPosY + 69, _startPosY + 64}; + g2d.setColor(Color.RED); + g2d.fillPolygon(xPoints3ArrNoseRacket, yPoints3ArrNoseRacket, xPoints3ArrNoseRacket.length); + g2d.setColor(Color.BLACK); + g2d.drawPolygon(xPoints3ArrNoseRacket, yPoints3ArrNoseRacket, xPoints3ArrNoseRacket.length); + + g2d.setColor(Color.GRAY); + g2d.fillRect(_startPosX + 70, _startPosY + 34, 10, 10); + g2d.setColor(Color.BLACK); + g2d.drawRect(_startPosX + 70, _startPosY + 34, 10, 10); + int[] xPoints4ArrNoseRacket = {_startPosX + 70, _startPosX + 70, _startPosX + 60}; + int[] yPoints4ArrNoseRacket = {_startPosY + 34, _startPosY + 44, _startPosY + 39}; + g2d.setColor(Color.RED); + g2d.fillPolygon(xPoints4ArrNoseRacket, yPoints4ArrNoseRacket, xPoints4ArrNoseRacket.length); + g2d.setColor(Color.BLACK); + g2d.drawPolygon(xPoints4ArrNoseRacket, yPoints4ArrNoseRacket, xPoints4ArrNoseRacket.length); + + } + } +} diff --git a/src/DrawningObjects/DrawningAirplane.java b/src/DrawningObjects/DrawningAirplane.java new file mode 100644 index 0000000..0d726ea --- /dev/null +++ b/src/DrawningObjects/DrawningAirplane.java @@ -0,0 +1,161 @@ +package src.DrawningObjects; + +import java.awt.*; +import java.util.Random; +import src.DirectionType; +import src.Entities.EntityAirplane; +public class DrawningAirplane { + + protected EntityAirplane EntityAirplane; + private int _pictureWidth; + private int _pictureHeight; + private int _startPosX = 0; + private int _startPosY = 0; + private int _airplaneWidth = 160; + private int _airplaneHeight = 68; + private int _airplanekorpusHeight = 90; + protected IDraw DrawningEngines; + + public EntityAirplane EntityAirplane(){ + return EntityAirplane; + } + public DrawningAirplane(int speed, double weight, Color bodyColor, int width, int height){ + if(width <= _airplaneWidth || height <= _airplaneHeight) + return; + _startPosY=70; + _startPosX = 0; + + _pictureWidth = width; + _pictureHeight = height; + EntityAirplane = new EntityAirplane(speed, weight, bodyColor); + + DrawningEngines = new DrawningEngines (_startPosX,_startPosY); + Random rand = new Random(); + int variant = rand.nextInt(0,3); + } + + public void SetPosition(int x, int y){ + if(EntityAirFighter == null) + return; + _startPosX = x; + _startPosY = y; + if (x + _airplaneWidth >= _pictureWidth || y + _airplaneHeight >= _pictureHeight) { + _startPosX = 0; + _startPosY = 70; + } + } + public int GetPosX(){return _startPosX;} + public int GetPosY(){return _startPosY;} + public int GetWidth(){return _airplaneWidth;} + public int GetHeight(){return _airplaneHeight;} + public boolean CanMove(DirectionType direction) + { + if (EntityAirplane == null) + return false; + boolean can = false; + switch (direction) + { + case Left: + can = _startPosX - EntityAirplane.Step() >= 0; + break; + case Right: + can = _startPosX + EntityAirplane.Step() + _airplaneWidth< _pictureWidth; + break; + case Down: + can = _startPosY + EntityAirFighter.Step() + _airplanekorpusHeight < _pictureHeight; + break; + case Up: + can = _startPosY - EntityAirplane.Step() >= 0; + break; + }; + return can; + } + + public void MoveTransport(DirectionType direction){ + if (!CanMove(direction) || EntityAirplane == null) + return; + switch (direction) + { + case Left: + if (_startPosX - EntityAirplane.Step() >= 0) + _startPosX -= (int)EntityAirplane.Step(); + else + _startPosX = 0; + break; + case Up: + if (_startPosY - EntityAirplane.Step() >= 0) + _startPosY -= (int)EntityAirplane.Step(); + else + _startPosY = 0; + break; + case Right: + if (_startPosX + EntityAirplane.Step() + _airplaneWidth < _pictureWidth) + _startPosX += (int)EntityAirplane.Step(); + else + _startPosX = _pictureWidth - _airplaneWidth; + break; + case Down: + if (_startPosY + EntityAirplane.Step() + _airplaneHeight < _pictureHeight) + _startPosY += (int)EntityAirplane.Step(); + else + _startPosY = _pictureHeight - _airplaneHeight; + break; + } + DrawningEngines.ChangeX(_startPosX); + DrawningEngines.ChangeY(_startPosY); + } + public void DrawAirplane(Graphics2D g2d){ + + if (EntityAirFighter == null) + return; + DrawningEngines.DrawEngines(); +//тело самолёта + g2d.setColor(EntityAirFighter.BodyColor()); + g2d.fillRect(_startPosX + 20,_startPosY +4,140,20); + g2d.setColor(Color.BLACK); + g2d.drawRect(_startPosX + 20,_startPosY +4,140,20); +//Нос самолёта + int[] xPointsArrNose = {_startPosX + 20,_startPosX + 20,_startPosX-3}; + int[] yPointsArrNose = {_startPosY + 4,_startPosY + 24,_startPosY + 12}; + g2d.setColor(Color.BLACK); + g2d.fillPolygon(xPointsArrNose, yPointsArrNose, xPointsArrNose.length); + g2d.setColor(Color.BLACK); + g2d.drawPolygon(xPointsArrNose, yPointsArrNose, xPointsArrNose.length); + +// Правое крыло + int[] xPointsArrRightWing = {_startPosX + 80,_startPosX+80,_startPosX+85,_startPosX + 100}; + int[] yPointsArrRightWing = { _startPosY + 4,_startPosY - 66,_startPosY - 66, _startPosY + 4 }; + g2d.setColor(EntityAirFighter.BodyColor()); + g2d.fillPolygon(xPointsArrRightWing, yPointsArrRightWing, xPointsArrRightWing.length); + g2d.setColor(Color.BLACK); + g2d.drawPolygon(xPointsArrRightWing, yPointsArrRightWing, xPointsArrRightWing.length); + +// Левое крыло + int[] xPointsArrLeftWing = {_startPosX + 80,_startPosX + 100,_startPosX+85,_startPosX+80}; + int[] yPointsArrLeftWing = {_startPosY + 24,_startPosY + 24,_startPosY + 94,_startPosY + 94}; + g2d.setColor(EntityAirFighter.BodyColor()); + g2d.fillPolygon(xPointsArrLeftWing, yPointsArrLeftWing, xPointsArrLeftWing.length); + g2d.setColor(Color.BLACK); + g2d.drawPolygon(xPointsArrLeftWing, yPointsArrLeftWing, xPointsArrLeftWing.length); + +// Правое задние крыло + int[] xPointsArrRightBackWing={_startPosX + 140,_startPosX + 160,_startPosX+160,_startPosX+140}; + int[] yPointsArrRightBackWing={ _startPosY + 4,_startPosY + 4,_startPosY - 22,_startPosY -4}; + g2d.setColor(EntityAirFighter.BodyColor()); + g2d.fillPolygon(xPointsArrRightBackWing, yPointsArrRightBackWing, xPointsArrRightBackWing.length); + g2d.setColor(Color.BLACK); + g2d.drawPolygon(xPointsArrRightBackWing, yPointsArrRightBackWing, xPointsArrRightBackWing.length); +// Заднее левое крыло + int[] xPointsArrLeftBackWing= {_startPosX + 140,_startPosX + 160,_startPosX+160,_startPosX+140}; + int[] yPointsArrLeftBackWing= {_startPosY + 24,_startPosY + 24,_startPosY + 50,_startPosY + 32}; + g2d.setColor(EntityAirFighter.BodyColor()); + g2d.fillPolygon(xPointsArrLeftBackWing, yPointsArrLeftBackWing, xPointsArrLeftBackWing.length); + g2d.setColor(Color.BLACK); + g2d.drawPolygon(xPointsArrLeftBackWing, yPointsArrLeftBackWing, xPointsArrLeftBackWing.length); + + + + } + + +} diff --git a/src/AirFighterHard/DrawningEngines.java b/src/DrawningObjects/DrawningEngines.java similarity index 81% rename from src/AirFighterHard/DrawningEngines.java rename to src/DrawningObjects/DrawningEngines.java index 5e9adcf..8bc0121 100644 --- a/src/AirFighterHard/DrawningEngines.java +++ b/src/DrawningObjects/DrawningEngines.java @@ -1,21 +1,24 @@ -package AirFighterHard; - +package src.DrawningObjects; import javax.swing.*; import java.awt.*; +import src.NumberType; + +public class DrawningEngines implements IDraw { -public class DrawningEngines { - JPanel AirFighterPanel; private NumberType EnginesNumb; private Color EngineColor; public int CurX, CurY; - boolean Init( int curX, int curY, JPanel airfighterPanel){ + boolean DrawningEngines( int curX, int curY){ CurX = curX; CurY = curY; EngineColor = Color.BLACK; - AirFighterPanel = airfighterPanel; - - return true; + } + public void ChangeX(int x){ + CurX = x; + } + public void ChangeY(int y){ + CurY = y; } public void ChangeEnginesNumb(int x){ if(x <= 1) diff --git a/src/DrawningObjects/IDraw.java b/src/DrawningObjects/IDraw.java new file mode 100644 index 0000000..2d0c05e --- /dev/null +++ b/src/DrawningObjects/IDraw.java @@ -0,0 +1,10 @@ +package src.DrawningObjects; +import src.NumberType; +import java.awt.*; +public interface IDraw { + public void ChangeEngineNumb(int x); + //public NumberType EngineNumb(); + public void DrawEngines(Graphics2D g2d); + public void ChangeX(int x); + public void ChangeY(int y); +} diff --git a/src/Entities/EntityAirFighter.java b/src/Entities/EntityAirFighter.java new file mode 100644 index 0000000..b6de805 --- /dev/null +++ b/src/Entities/EntityAirFighter.java @@ -0,0 +1,22 @@ +package src.Entities; +import java.awt.*; + +public class EntityAirFighter extends EntityAirplane { + private Color BodyColor; + private boolean Wing; + private boolean Racket; + public Color BodyColor(){ + return BodyColor; + } + public boolean Racket(){return Racket;} + public boolean DopWing(){return Wing;} + public void Init(int speed, double weight, Color bodyColor, + boolean racket, boolean dopwing){ + super(speed, weight, bodyColor); + + BodyColor = bodyColor; + + Racket = racket; + Wing = wing; + } +} diff --git a/src/Entities/EntityAirplane.java b/src/Entities/EntityAirplane.java new file mode 100644 index 0000000..599af01 --- /dev/null +++ b/src/Entities/EntityAirplane.java @@ -0,0 +1,26 @@ +package src.Entities; +import java.awt.*; + +public class EntityAirplane { + private int Speed; + private double Weight, Step; + private Color BodyColor; + public int Speed(){ + return Speed; + } + public double Weight(){ + return Weight; + } + public double Step(){ + return Step; + } + public Color BodyColor(){ + return BodyColor; + } + public EntityAirplane(int speed, double weight, Color bodyColor){ + Speed = speed; + Weight = weight; + Step = (double)Speed * 100 / Weight; + BodyColor = bodyColor; + } +} \ No newline at end of file diff --git a/src/FormAirFighter.java b/src/FormAirFighter.java new file mode 100644 index 0000000..ac2b095 --- /dev/null +++ b/src/FormAirFighter.java @@ -0,0 +1,193 @@ +package src; + +import src.DrawningObjects.DrawningAirplane; + +import src.MovementStrategy.*; +import src.DrawningObjects.DrawningAirFighter; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.Random; + +public class FormAirFighter { + private DrawningAirplane DrawningAirplane; + private AbstractStrategy _abstractStrategy; + Canvas canv; + static int pictureBoxWidth = 882; + static int pictureBoxHeight = 453; + + public void Draw(){ + canv.repaint(); + } + + public FormAirFighter(){ + JFrame MonorailFrame =new JFrame (); + JButton buttonCreate = new JButton("Создать"); + JButton buttonCreateLocomotive = new JButton("Создать самолет с радаром"); + JButton buttonStep = new JButton("Шаг"); + JComboBox comboBoxStrategy = new JComboBox( + new String[]{ + "Довести до центра", + "Довести до края", + }); + JButton UpButton = new JButton(); + UpButton.setIcon(new ImageIcon("UpButton.jpg")); + JButton DownButton = new JButton(); + DownButton.setIcon(new ImageIcon("DownButton.jpg")); + JButton LeftButton = new JButton(); + LeftButton.setIcon(new ImageIcon("LeftButton.jpg")); + JButton RightButton = new JButton(); + RightButton.setIcon(new ImageIcon("RightButton.jpg")); + buttonStep.addActionListener( + new ActionListener() { + public void actionPerformed(ActionEvent e){ + if (DrawningAirplane == null) + { + return; + } + if (comboBoxStrategy.isEnabled()) + { + switch (comboBoxStrategy.getSelectedIndex()) + { + case 0: + _abstractStrategy = new MoveToCenter(); + break; + case 1: + _abstractStrategy = new MoveToBorder(); + break; + default: + _abstractStrategy = null; + break; + }; + if (_abstractStrategy == null) + { + return; + } + _abstractStrategy.SetData(new + DrawningObjectAirplane(DrawningAirplane), pictureBoxWidth, + pictureBoxHeight); + comboBoxStrategy.setEnabled(false); + } + if (_abstractStrategy == null) + { + return; + } + _abstractStrategy.MakeStep(); + Draw(); + if (_abstractStrategy.GetStatus() == Status.Finish) + { + comboBoxStrategy.setEnabled(true); + _abstractStrategy = null; + } + } + } + ); + buttonCreate.addActionListener( + new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + Random random = new Random(); + DrawningAirplane = new DrawningAirplane(random.nextInt(100, 300), random.nextDouble(1000, 3000), + Color.getHSBColor(random.nextInt(0, 301), random.nextInt(0, 301), random.nextInt(0, 301)), + pictureBoxWidth, pictureBoxHeight); + canv.DrawningAirplane = DrawningAirplane; + comboBoxStrategy.enable(true); + Draw(); + } + } + ); + buttonCreateLocomotive.addActionListener( + new ActionListener() { + public void actionPerformed(ActionEvent e){ + Random random = new Random(); + DrawningAirplane = new DrawningAirFighter(random.nextInt(100, 300), random.nextDouble(1000, 3000), + Color.getHSBColor(random.nextInt(0, 301), random.nextInt(0, 301), random.nextInt(0, 301)), + Color.getHSBColor(random.nextInt(0, 301), random.nextInt(0, 301), random.nextInt(0, 301)), + random.nextBoolean(), random.nextBoolean(), + pictureBoxWidth, pictureBoxHeight); + canv.DrawningAirplane = DrawningAirplane; + comboBoxStrategy.enable(true); + Draw(); + } + } + ); + RightButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if(DrawningAirplane.EntityAirplane() == null) { + return; + } + DrawningAirplane.MoveTransport(DirectionType.Right); + Draw(); + } + }); + LeftButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if(DrawningAirplane.EntityAirplane() == null) + return; + DrawningAirplane.MoveTransport(DirectionType.Left); + Draw(); + } + }); + UpButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if(DrawningAirplane.EntityAirplane() == null) + return; + DrawningAirplane.MoveTransport(DirectionType.Up); + Draw(); + } + }); + DownButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if(DrawningAirplane.EntityAirplane() == null) + return; + DrawningAirplane.MoveTransport(DirectionType.Down); + Draw(); + } + }); + + MonorailFrame.setSize (900, 500); + MonorailFrame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); + MonorailFrame.setLayout(null); + canv = new Canvas(); + canv.setSize(pictureBoxWidth, pictureBoxHeight); + buttonCreate.setBounds(198, 401, 180, 40); + buttonCreateLocomotive.setBounds(12, 401, 180, 40); + RightButton.setBounds(840,411,30,30); + LeftButton.setBounds(768,411,30,30); + UpButton.setBounds(804,375,30,30); + DownButton.setBounds(804,411,30,30); + comboBoxStrategy.setBounds(719,12,151,28); + buttonStep.setBounds(768, 46, 94, 29); + MonorailFrame.add(canv); + MonorailFrame.add(buttonCreate); + MonorailFrame.add(buttonCreateLocomotive); + MonorailFrame.add(UpButton); + MonorailFrame.add(DownButton); + MonorailFrame.add(LeftButton); + MonorailFrame.add(RightButton); + MonorailFrame.add(comboBoxStrategy); + MonorailFrame.add(buttonStep); + MonorailFrame.setVisible(true); + } +} +class Canvas extends JComponent{ + public DrawningAirplane DrawningAirplane; + public Canvas(){ + } + public void paintComponent (Graphics g){ + if (DrawningAirplane == null){ + return; + } + super.paintComponents (g) ; + Graphics2D g2d = (Graphics2D)g; + DrawningAirplane.DrawAirplane(g2d); + super.repaint(); + } +} + diff --git a/src/Main.java b/src/Main.java new file mode 100644 index 0000000..7928ef2 --- /dev/null +++ b/src/Main.java @@ -0,0 +1,19 @@ +package src; +import src.DrawningObjects.DrawningAirplaneWithRadar; +import src.DrawningObjects.DrawningAirplane; +import src.MovementStrategy.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.util.Random; +import javax.imageio.ImageIO; +import javax.swing.*; + +public class Main { + public static void main(String[] args) throws IOException { + FormAirFighter form = new FormAirFighter(); + } +} \ No newline at end of file diff --git a/src/MovementStrategy/AbstractStrategy.java b/src/MovementStrategy/AbstractStrategy.java new file mode 100644 index 0000000..9634f7a --- /dev/null +++ b/src/MovementStrategy/AbstractStrategy.java @@ -0,0 +1,69 @@ +package MovementStrategy; +import src.DirectionType; + +public abstract class AbstractStrategy { + private IMoveableObject _moveableObject; + private Status _state = Status.NotInit; + private int FieldWidth; + protected int FieldWidth(){return FieldWidth;} + private int FieldHeight; + protected int FieldHeight(){return FieldHeight;} + public Status GetStatus() { return _state; } + public void SetData(IMoveableObject moveableObject, int width, int + height) + { + if (moveableObject == null) + { + _state = Status.NotInit; + return; + } + _state = Status.InProgress; + _moveableObject = moveableObject; + FieldWidth = width; + FieldHeight = height; + } + public void MakeStep() + { + if (_state != Status.InProgress) + { + return; + } + if (IsTargetDestination()) + { + _state = Status.Finish; + return; + } + MoveToTarget(); + } + protected boolean MoveLeft() {return MoveTo(DirectionType.Left);} + protected boolean MoveRight() {return MoveTo(DirectionType.Right);} + protected boolean MoveUp() {return MoveTo(DirectionType.Up);} + protected boolean MoveDown() {return MoveTo(DirectionType.Down);} + protected ObjectParameters GetObjectParameters(){ + if(_moveableObject != null) + return _moveableObject.GetObjectParameters(); + else return null; + } + protected Integer GetStep() + { + if (_state != Status.InProgress) + { + return null; + } + return _moveableObject.GetStep(); + } + protected abstract void MoveToTarget(); + protected abstract boolean IsTargetDestination(); + private boolean MoveTo(DirectionType directionType) { + if (_state != Status.InProgress) + { + return false; + } + if (_moveableObject.CheckCanMove(directionType)) + { + _moveableObject.MoveObject(directionType); + return true; + } + return false; + } +} diff --git a/src/MovementStrategy/DrawningObjectAirplane.java b/src/MovementStrategy/DrawningObjectAirplane.java new file mode 100644 index 0000000..8182d40 --- /dev/null +++ b/src/MovementStrategy/DrawningObjectAirplane.java @@ -0,0 +1,31 @@ +package MovementStrategy; +import src.DirectionType; +import src.DrawningObjects.DrawningAirplane; + +public class DrawningObjectAirplane implements IMoveableObject{ + private final DrawningAirplane _drawningAirplane; + public DrawningObjectAirplane(DrawningAirplane drawningAirplane){ + _drawningAirplane = drawningAirplane; + } + public ObjectParameters GetObjectParameters(){ + if(_drawningAirplane == null || _drawningAirplane.EntityAirplane() == null) + return null; + return new ObjectParameters(_drawningAirplane.GetPosX(), _drawningAirplane.GetPosY(), + _drawningAirplane.GetWidth(), _drawningAirplane.GetHeight()); + } + public int GetStep(){ + if(_drawningAirplane.EntityAirplane() == null) + return 0; + return (int)_drawningAirplane.EntityAirplane().Step(); + } + public boolean CheckCanMove(DirectionType direction){ + if(_drawningAirplane == null) + return false; + return _drawningAirplane.CanMove(direction); + } + public void MoveObject(DirectionType direction){ + if(_drawningAirplane == null) + return; + _drawningAirplane.MoveTransport(direction); + } +} diff --git a/src/MovementStrategy/IMoveableObject.java b/src/MovementStrategy/IMoveableObject.java new file mode 100644 index 0000000..32d772d --- /dev/null +++ b/src/MovementStrategy/IMoveableObject.java @@ -0,0 +1,10 @@ +package MovementStrategy; + +import src.DirectionType; + +public interface IMoveableObject { + public ObjectParameters GetObjectParameters(); + public int GetStep(); + boolean CheckCanMove(DirectionType direction); + void MoveObject(DirectionType direction); +} diff --git a/src/MovementStrategy/MoveToBorder.java b/src/MovementStrategy/MoveToBorder.java new file mode 100644 index 0000000..2e9bb29 --- /dev/null +++ b/src/MovementStrategy/MoveToBorder.java @@ -0,0 +1,36 @@ +package MovementStrategy; + +public class MoveToBorder extends AbstractStrategy { + @Override + protected boolean IsTargetDestination() { + var objParams = GetObjectParameters(); + if (objParams == null) { + return false; + } + int a = FieldWidth(); + int b = FieldHeight(); + int q = GetStep(); + return objParams.RightBorder <= FieldWidth() && objParams.RightBorder + GetStep() >= FieldWidth() && + objParams.DownBorder <= FieldHeight() && objParams.DownBorder + GetStep() >= FieldHeight(); + } + @Override + protected void MoveToTarget() { + var objParams = GetObjectParameters(); + if (objParams == null) { + return; + } + var diffX = objParams.RightBorder - FieldWidth(); + if (Math.abs(diffX) >= GetStep()) { + if (diffX < 0) { + MoveRight(); + } + } + var diffY = objParams.DownBorder - FieldHeight(); + if (Math.abs(diffY) >= GetStep()) { + if (diffY < 0) { + MoveDown(); + } + } + } +} + diff --git a/src/MovementStrategy/MoveToCenter.java b/src/MovementStrategy/MoveToCenter.java new file mode 100644 index 0000000..18cc240 --- /dev/null +++ b/src/MovementStrategy/MoveToCenter.java @@ -0,0 +1,52 @@ +package MovementStrategy; + +public class MoveToCenter extends AbstractStrategy{ + @Override + protected boolean IsTargetDestination(){ + var objParams = GetObjectParameters(); + if(objParams == null) + return false; + return ((objParams.ObjectMiddleHorizontal <= FieldWidth() / 2 && + objParams.ObjectMiddleHorizontal + GetStep() >= FieldWidth() / 2) + ||(objParams.ObjectMiddleHorizontal >= FieldWidth() / 2 && + objParams.ObjectMiddleHorizontal - GetStep() <= FieldWidth() / 2)) && + + ((objParams.ObjectMiddleVertical <= FieldHeight() / 2 && + objParams.ObjectMiddleVertical + GetStep() >= FieldHeight() / 2) || + (objParams.ObjectMiddleVertical >= FieldHeight() / 2 && + objParams.ObjectMiddleVertical - GetStep() <= FieldHeight() / 2)); + } + @Override + protected void MoveToTarget() + { + var objParams = GetObjectParameters(); + if (objParams == null) + { + return; + } + var diffX = objParams.ObjectMiddleHorizontal - FieldWidth() / 2; + if (Math.abs(diffX) > GetStep()) + { + if (diffX > 0) + { + MoveLeft(); + } + else + { + MoveRight(); + } + } + var diffY = objParams.ObjectMiddleVertical - FieldHeight() / 2; + if (Math.abs(diffY) > GetStep()) + { + if (diffY > 0) + { + MoveUp(); + } + else + { + MoveDown(); + } + } + } +} diff --git a/src/MovementStrategy/ObjectParameters.java b/src/MovementStrategy/ObjectParameters.java new file mode 100644 index 0000000..d7e6958 --- /dev/null +++ b/src/MovementStrategy/ObjectParameters.java @@ -0,0 +1,27 @@ +package MovementStrategy; + +public class ObjectParameters { + private final int _x; + private final int _y; + private final int _width; + private final int _height; + public int LeftBorder; + public int TopBorder; + public int RightBorder; + public int DownBorder; + public int ObjectMiddleHorizontal; + public int ObjectMiddleVertical; + public ObjectParameters(int x, int y, int width, int height) + { + _x = x; + _y = y; + _width = width; + _height = height; + LeftBorder = _x; + TopBorder = _y; + RightBorder = _x + width; + DownBorder = _y + _height * 125 / 1000 + (_height-_height * 125 / 1000)/2 ; + ObjectMiddleHorizontal = _x + _width / 2; + ObjectMiddleVertical = _y +(_height - _height * 125 / 1000) / 2 / 2; + } +} diff --git a/src/MovementStrategy/Status.java b/src/MovementStrategy/Status.java new file mode 100644 index 0000000..586b538 --- /dev/null +++ b/src/MovementStrategy/Status.java @@ -0,0 +1,7 @@ +package MovementStrategy; + +public enum Status { + NotInit, + InProgress, + Finish +} diff --git a/src/AirFighterHard/NumberType.java b/src/NumberType.java similarity index 65% rename from src/AirFighterHard/NumberType.java rename to src/NumberType.java index ebba054..1753235 100644 --- a/src/AirFighterHard/NumberType.java +++ b/src/NumberType.java @@ -1,7 +1,6 @@ -package AirFighterHard; - +package src; public enum NumberType { Two, Four, Six -} +} \ No newline at end of file diff --git a/src/README.md b/src/README.md new file mode 100644 index 0000000..29cea80 --- /dev/null +++ b/src/README.md @@ -0,0 +1,2 @@ +# PIbd-23-Kislitsa E.D.-AirFighter-Hard +