From 5f914ddb2204452fa16aff75e34b598393cbc92e Mon Sep 17 00:00:00 2001 From: antoc0der <1@DESKTOP-K1L8ND3> Date: Wed, 8 Nov 2023 22:41:20 +0300 Subject: [PATCH 1/3] antihype commit --- src/DrawningObjects/DrawningAirplane.java | 8 ++- src/FormAirplaneWithRadar.java | 67 ++++++++++++++++------- src/Main.java | 3 +- 3 files changed, 55 insertions(+), 23 deletions(-) diff --git a/src/DrawningObjects/DrawningAirplane.java b/src/DrawningObjects/DrawningAirplane.java index afe5b4d..3430f6a 100644 --- a/src/DrawningObjects/DrawningAirplane.java +++ b/src/DrawningObjects/DrawningAirplane.java @@ -1,7 +1,8 @@ package src.DrawningObjects; - import src.DirectionType; import src.Entities.EntityAirplane; +import src.MovementStrategy.DrawningObjectAirplane; +import src.MovementStrategy.IMoveableObject; import java.awt.*; import java.util.Random; @@ -68,12 +69,17 @@ public class DrawningAirplane { return; _startPosX = x; _startPosY = y; + DrawningIlluminators.ChangeX(_startPosX); + DrawningIlluminators.ChangeY(_startPosY); if (x < 0 || y < 0 || x + _airplaneWidth >= _pictureWidth || y + _airplaneHeight >= _pictureHeight) { x = y = 10; _startPosX = x; _startPosY = y; } } + public IMoveableObject GetMoveableObject(){ + return new DrawningObjectAirplane(this); + } public int GetPosX(){return _startPosX;} public int GetPosY(){return _startPosY;} public int GetWidth(){return _airplaneWidth;} diff --git a/src/FormAirplaneWithRadar.java b/src/FormAirplaneWithRadar.java index a983c05..c6c00ff 100644 --- a/src/FormAirplaneWithRadar.java +++ b/src/FormAirplaneWithRadar.java @@ -1,9 +1,8 @@ package src; - import src.DrawningObjects.DrawningAirplane; - import src.MovementStrategy.*; import src.DrawningObjects.DrawningAirplaneWithRadar; +import org.w3c.dom.ranges.DocumentRange; import javax.swing.*; import java.awt.*; @@ -17,16 +16,25 @@ public class FormAirplaneWithRadar { Canvas canv; static int pictureBoxWidth = 882; static int pictureBoxHeight = 453; - + public JButton buttonSelect; + public JFrame AirplaneFrame; public void Draw(){ canv.repaint(); } - + public Color ChooseColor(JFrame MonorailFrame){ + JColorChooser dialog = new JColorChooser(); + Color res = JColorChooser.showDialog(MonorailFrame, "Выберите цвет", Color.WHITE); + return res; + } + public DrawningAirplane SelectedAirplane(){ + return DrawningAirplane; + } public FormAirplaneWithRadar(){ - JFrame MonorailFrame =new JFrame (); + AirplaneFrame =new JFrame (); JButton buttonCreate = new JButton("Создать"); JButton buttonCreateLocomotive = new JButton("Создать самолет с радаром"); JButton buttonStep = new JButton("Шаг"); + buttonSelect = new JButton ("Выбрать"); JComboBox comboBoxStrategy = new JComboBox( new String[]{ "Довести до центра", @@ -89,8 +97,13 @@ public class FormAirplaneWithRadar { @Override public void actionPerformed(ActionEvent e) { Random random = new Random(); + Color color = new Color(random.nextInt(0, 256), random.nextInt(0, 256), random.nextInt(0, 256)); + Color choosen = ChooseColor(AirplaneFrame); + if(choosen != null){ + color = choosen; + } 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)), + color, pictureBoxWidth, pictureBoxHeight); canv.DrawningAirplane = DrawningAirplane; comboBoxStrategy.enable(true); @@ -102,9 +115,19 @@ public class FormAirplaneWithRadar { new ActionListener() { public void actionPerformed(ActionEvent e){ Random random = new Random(); + Color color = new Color(random.nextInt(0, 256), random.nextInt(0, 256), random.nextInt(0, 256)); + Color additionalColor = new Color(random.nextInt(0, 256), random.nextInt(0, 256), random.nextInt(0, 256)); + Color choosen = ChooseColor(AirplaneFrame); + if(choosen != null){ + color = choosen; + } + choosen = ChooseColor(AirplaneFrame); + if(choosen != null){ + additionalColor = choosen; + } DrawningAirplane = new DrawningAirplaneWithRadar(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)), + color, + additionalColor, random.nextBoolean(), random.nextBoolean(), pictureBoxWidth, pictureBoxHeight); canv.DrawningAirplane = DrawningAirplane; @@ -151,11 +174,12 @@ public class FormAirplaneWithRadar { } }); - MonorailFrame.setSize (900, 500); - MonorailFrame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); - MonorailFrame.setLayout(null); + AirplaneFrame.setSize (900, 500); + AirplaneFrame.setDefaultCloseOperation (JFrame.DISPOSE_ON_CLOSE); + AirplaneFrame.setLayout(null); canv = new Canvas(); canv.setSize(pictureBoxWidth, pictureBoxHeight); + buttonSelect.setBounds(383,401, 180, 40); buttonCreate.setBounds(198, 401, 180, 40); buttonCreateLocomotive.setBounds(12, 401, 180, 40); RightButton.setBounds(840,411,30,30); @@ -164,16 +188,17 @@ public class FormAirplaneWithRadar { 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); + AirplaneFrame.add(canv); + AirplaneFrame.add(buttonCreate); + AirplaneFrame.add(buttonCreateLocomotive); + AirplaneFrame.add(UpButton); + AirplaneFrame.add(DownButton); + AirplaneFrame.add(LeftButton); + AirplaneFrame.add(RightButton); + AirplaneFrame.add(comboBoxStrategy); + AirplaneFrame.add(buttonStep); + AirplaneFrame.add(buttonSelect); + AirplaneFrame.setVisible(true); } } class Canvas extends JComponent{ diff --git a/src/Main.java b/src/Main.java index 246dd76..74fcc09 100644 --- a/src/Main.java +++ b/src/Main.java @@ -14,6 +14,7 @@ import javax.swing.*; public class Main { public static void main(String[] args) throws IOException { - FormAirplaneWithRadar form = new FormAirplaneWithRadar(); + FormAirplaneCollection form =new FormAirplaneCollection(); + //FormForHard form = new FormForHard(); } } \ No newline at end of file -- 2.25.1 From 82bad5c2558e99867def19088e3c7f98813aa34d Mon Sep 17 00:00:00 2001 From: antoc0der <1@DESKTOP-K1L8ND3> Date: Wed, 8 Nov 2023 22:43:00 +0300 Subject: [PATCH 2/3] antihype commit 2.0 --- src/FormAirplaneCollection.java | 122 ++++++++++++++++++++ src/FormForHard.java | 70 +++++++++++ src/Generics/AirplaneGenericCollection.java | 74 ++++++++++++ src/Generics/HardGeneric.java | 61 ++++++++++ src/Generics/SetGeneric.java | 47 ++++++++ 5 files changed, 374 insertions(+) create mode 100644 src/FormAirplaneCollection.java create mode 100644 src/FormForHard.java create mode 100644 src/Generics/AirplaneGenericCollection.java create mode 100644 src/Generics/HardGeneric.java create mode 100644 src/Generics/SetGeneric.java diff --git a/src/FormAirplaneCollection.java b/src/FormAirplaneCollection.java new file mode 100644 index 0000000..62dd853 --- /dev/null +++ b/src/FormAirplaneCollection.java @@ -0,0 +1,122 @@ +package src; + +import src.DrawningObjects.DrawningAirplane; +import src.Generics.AirplaneGenericCollection; +import src.MovementStrategy.DrawningObjectAirplane; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + + +public class FormAirplaneCollection { + private final AirplaneGenericCollection _airplanes; + private int pictureBoxWidth = 630; + private int pictureBoxHeight = 426; + CollectionCanvas canv; + void Draw(){ + if(canv == null) + return; + canv.repaint(); + } + public FormAirplaneCollection(){ + _airplanes = new AirplaneGenericCollection<>(pictureBoxWidth, pictureBoxHeight); + canv = new CollectionCanvas(); + JPanel toolBox = new JPanel(); + JFrame collectionFrame = new JFrame(); + collectionFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + collectionFrame.setSize(880,497); + toolBox.setBounds(623, 12, 227, 426); + canv.setBounds(12,12,pictureBoxWidth,pictureBoxHeight); + JButton addButton = new JButton("Добавить"); + JButton removeButton = new JButton("Удалить"); + JButton refreshButton = new JButton("Обновить"); + JTextField airplaneNumb = new JTextField(); + GridLayout lay = new GridLayout(4,1); + toolBox.setLayout(lay); + toolBox.add(addButton); + toolBox.add(airplaneNumb); + toolBox.add(removeButton); + toolBox.add(refreshButton); + collectionFrame.add(toolBox); + collectionFrame.add(canv); + collectionFrame.setVisible(true); + + addButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if(_airplanes == null) { + return; + } + FormAirplaneWithRadar form = new FormAirplaneWithRadar(); + form.buttonSelect.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (_airplanes.Insert(form.SelectedAirplane()) != -1) + { + JOptionPane.showMessageDialog(null, "Объект добавлен", "Информация", JOptionPane.INFORMATION_MESSAGE); + Draw(); + } + else + { + JOptionPane.showMessageDialog(null, "Не удалось добавить объект", "Информация", JOptionPane.INFORMATION_MESSAGE); + } + canv._airplanes = _airplanes; + form.AirplaneFrame.dispose(); + Draw(); + } + }); + } + }); + removeButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if(_airplanes == null) { + return; + } + String tmp = airplaneNumb.getText(); + int numb; + + try{ + numb = Integer.parseInt(tmp); + } + catch(Exception ex){ + JOptionPane.showMessageDialog(null, "Введите число", "Информация", JOptionPane.INFORMATION_MESSAGE); + return; + } + _airplanes.Remove(numb); + _airplanes.ShowAirplanes(); + JOptionPane.showMessageDialog(null, "Объект удален", "Информация", JOptionPane.INFORMATION_MESSAGE); + Draw(); + } + }); + + refreshButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if(_airplanes == null) { + return; + } + _airplanes.ShowAirplanes(); + Draw(); + } + }); + } +} + +class CollectionCanvas extends JComponent { + public AirplaneGenericCollection _airplanes; + public CollectionCanvas(){ + } + @Override + public void paintComponent (Graphics g){ + if (_airplanes == null){ + return; + } + super.paintComponents (g) ; + Graphics2D g2d = (Graphics2D)g; + g2d.drawImage(_airplanes.ShowAirplanes(), 0, 0, this); + super.repaint(); + } +} diff --git a/src/FormForHard.java b/src/FormForHard.java new file mode 100644 index 0000000..43162eb --- /dev/null +++ b/src/FormForHard.java @@ -0,0 +1,70 @@ +package src; + +import src.DrawningObjects.DrawningAirplane; +import src.DrawningObjects.DrawningIlluminators; +import src.DrawningObjects.IDraw; +import src.Entities.EntityAirplane; +import src.Generics.HardGeneric; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.Random; + +public class FormForHard { + private Canvas canv; + private int pictureBoxWidth; + private int pictureBoxHeight; + private EntityAirplane makeEntity(){ + Random rand = new Random(); + return new EntityAirplane(rand.nextInt(100, 300), rand.nextDouble(1000,3000), + Color.getHSBColor(rand.nextInt(0, 301), rand.nextInt(0, 301), rand.nextInt(0, 301))); + } + void Draw(){ + if(canv == null) + return; + canv.repaint(); + } + private IDraw makeIDraw(EntityAirplane entity){ + Random rand = new Random(); + return new DrawningIlluminators(pictureBoxWidth, pictureBoxHeight, 0, 0); + } + public FormForHard(){ + Random rand = new Random(); + int sz = rand.nextInt(1, 10); + JFrame HardFrame = new JFrame(); + HardFrame.setSize(700, 400); + HardFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + canv = new Canvas(); + canv.setBounds(0,0,pictureBoxWidth,pictureBoxHeight); + JButton makeObject = new JButton("Создать"); + makeObject.setBounds(0, 0, 100, 40); + canv.add(makeObject); + HardFrame.setContentPane(canv); + HardFrame.setVisible(true); + pictureBoxHeight = canv.getHeight(); + pictureBoxWidth = canv.getWidth(); + HardGeneric toDraw= new HardGeneric<>(sz, + sz, pictureBoxWidth, pictureBoxHeight); + for(int i = 0; i < sz; i++){ + EntityAirplane ent = makeEntity(); + toDraw.InsertFirst(ent); + toDraw.InsertSecond(makeIDraw(ent)); + } + makeObject.addActionListener( + new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + DrawningAirplane DrawningAirplane = toDraw.MakeObject(); + DrawningAirplane.SetPosition(pictureBoxWidth / 2 - DrawningAirplane.GetWidth()/2, + pictureBoxHeight / 2 - DrawningAirplane.GetHeight()/2); + canv.DrawningAirplane = DrawningAirplane; + Draw(); + } + } + ); + + } +} + diff --git a/src/Generics/AirplaneGenericCollection.java b/src/Generics/AirplaneGenericCollection.java new file mode 100644 index 0000000..e283998 --- /dev/null +++ b/src/Generics/AirplaneGenericCollection.java @@ -0,0 +1,74 @@ +package src.Generics; +import src.DrawningObjects.DrawningAirplane; +import src.MovementStrategy.IMoveableObject; + +import java.awt.*; +import java.awt.image.BufferedImage; + +public class AirplaneGenericCollection { + private final int _pictureWidth; + private final int _pictureHeight; + private final int _placeSizeWidth = 210; + private final int _placeSizeHeight = 78; + private final SetGeneric _collection; + public AirplaneGenericCollection(int picWidth, int picHeight){ + int width = picWidth / _placeSizeWidth; + int height = picHeight / _placeSizeHeight; + _pictureWidth = picWidth; + _pictureHeight = picHeight; + _collection = new SetGeneric(width * height); + } + public int Insert(T obj){ + if (obj == null) + { + return -1; + } + return _collection.Insert(obj); + } + public boolean Remove(int position){ + return _collection.Remove(position); + } + public U GetU(int pos){ + T ans = _collection.Get(pos); + if(ans == null) + return null; + return (U)ans.GetMoveableObject(); + } + private void DrawBackground(Graphics g) + { + g.setColor(Color.BLACK); + for (int i = 0; i < _pictureWidth / _placeSizeWidth; i++) + { + for (int j = 0; j < _pictureHeight / _placeSizeHeight + + 1; ++j) + { + g.drawLine(i * _placeSizeWidth, j * + _placeSizeHeight, i * _placeSizeWidth + _placeSizeWidth / 2, j * + _placeSizeHeight); + } + g.drawLine(i * _placeSizeWidth, 0, i * + _placeSizeWidth, _pictureHeight / _placeSizeHeight * _placeSizeHeight); + } + } + private void DrawObjects(Graphics g) + { + for (int i = 0; i < _collection.Count; i++) + { + DrawningAirplane airplane = _collection.Get(i); + if (airplane != null) + { + int inRow = _pictureWidth / _placeSizeWidth; + airplane.SetPosition(_pictureWidth - _placeSizeWidth - (i % inRow * _placeSizeWidth), i / inRow * _placeSizeHeight ); + airplane.DrawAirplane((Graphics2D) g); + } + } + } + public BufferedImage ShowAirplanes() + { + BufferedImage bmp = new BufferedImage(_pictureWidth, _pictureHeight, BufferedImage.TYPE_4BYTE_ABGR); + Graphics gr = bmp.createGraphics(); + DrawBackground(gr); + DrawObjects(gr); + return bmp; + } +} diff --git a/src/Generics/HardGeneric.java b/src/Generics/HardGeneric.java new file mode 100644 index 0000000..2f36800 --- /dev/null +++ b/src/Generics/HardGeneric.java @@ -0,0 +1,61 @@ +package src.Generics; + +import src.DrawningObjects.DrawningAirplane; +import src.DrawningObjects.IDraw; +import src.Entities.EntityAirplane; + +import java.util.Random; + +public class HardGeneric { + T[] arrFirst; + U[] arrSecond; + + private int curSz; + private int CountFirst; + private int CountSecond; + + private int pictureBoxWidth; + + private int pictureBoxHeight; + + public HardGeneric(int countFirst, int countSecond, int width, int height){ + curSz = 0; + CountFirst = countFirst; + CountSecond = countSecond; + arrFirst = (T[]) new EntityAirplane[CountFirst]; + arrSecond = (U[]) new IDraw[CountSecond]; + pictureBoxHeight = height; + pictureBoxWidth = width; + } + + public int InsertFirst(T entityMonorail){ + if(arrFirst[CountFirst-1] != null) + return -1; + for(int i = curSz -1; i>= 0; i--) { + arrFirst[i + 1] = arrFirst[i]; + arrSecond[i + 1] = arrSecond[i]; + } + curSz++; + arrFirst[0] = entityMonorail; + + return 0; + } + + public int InsertSecond(U inter){ + if(arrSecond[CountSecond-1] != null) + return -1; + arrSecond[0] = inter; + return 0; + } + + public DrawningAirplane MakeObject(){ + Random rand = new Random(); + int indFirst = rand.nextInt(0, curSz); + int indSecond = rand.nextInt(0,curSz); + EntityAirplane entity = arrFirst[indFirst]; + IDraw inter = arrSecond[indSecond]; + DrawningAirplane airplane = new DrawningAirplane(entity.Speed(), entity.Weight(), entity.BodyColor(), + pictureBoxWidth, pictureBoxHeight); + return airplane; + } +} diff --git a/src/Generics/SetGeneric.java b/src/Generics/SetGeneric.java new file mode 100644 index 0000000..a77ffb7 --- /dev/null +++ b/src/Generics/SetGeneric.java @@ -0,0 +1,47 @@ +package src.Generics; + +public class SetGeneric { + private final Object[] _places; + public int Count; + public SetGeneric(int count){ + _places = new Object[count]; + Count = count; + } + public int Insert(T airplane){ + return Insert(airplane, 0); + } + public int Insert(T airplane, int position){ + if(!(position >= 0 && position < Count)) + return -1; + if(_places[position] == null){ + _places[position] = airplane; + } + else{ + int place = -1; + for(int i = position; i < Count; i++){ + if(_places[i] == null){ + place = i; + break; + } + } + if(place == -1) + return -1; + + for(int i = place - 1; i >= position; i--) + _places[i+1] = _places[i]; + _places[position] = airplane; + } + return position; + } + public boolean Remove(int position){ + if(!(position >= 0 && position < Count)) + return false; + _places[position] = null; + return true; + } + public T Get(int position){ + if(!(position >= 0 && position < Count)) + return null; + return (T)_places[position]; + } +} -- 2.25.1 From 48bd006597291419b97ee3a29f1456a91d7feec5 Mon Sep 17 00:00:00 2001 From: antoc0der <1@DESKTOP-K1L8ND3> Date: Fri, 10 Nov 2023 09:57:08 +0300 Subject: [PATCH 3/3] antihype commit 3.0 --- src/Generics/HardGeneric.java | 31 +++++++++++++------------------ src/Main.java | 3 +-- 2 files changed, 14 insertions(+), 20 deletions(-) diff --git a/src/Generics/HardGeneric.java b/src/Generics/HardGeneric.java index 2f36800..3259073 100644 --- a/src/Generics/HardGeneric.java +++ b/src/Generics/HardGeneric.java @@ -7,44 +7,39 @@ import src.Entities.EntityAirplane; import java.util.Random; public class HardGeneric { - T[] arrFirst; - U[] arrSecond; - + T[] arrAirplanes; + U[] arrIlluminators; private int curSz; private int CountFirst; private int CountSecond; - private int pictureBoxWidth; - private int pictureBoxHeight; - public HardGeneric(int countFirst, int countSecond, int width, int height){ curSz = 0; CountFirst = countFirst; CountSecond = countSecond; - arrFirst = (T[]) new EntityAirplane[CountFirst]; - arrSecond = (U[]) new IDraw[CountSecond]; + arrAirplanes = (T[]) new EntityAirplane[CountFirst]; + arrIlluminators = (U[]) new IDraw[CountSecond]; pictureBoxHeight = height; pictureBoxWidth = width; } - public int InsertFirst(T entityMonorail){ - if(arrFirst[CountFirst-1] != null) + public int InsertFirst(T entityAirplane){ + if(arrAirplanes[CountFirst-1] != null) return -1; for(int i = curSz -1; i>= 0; i--) { - arrFirst[i + 1] = arrFirst[i]; - arrSecond[i + 1] = arrSecond[i]; + arrAirplanes[i + 1] = arrAirplanes[i]; + arrIlluminators[i + 1] = arrIlluminators[i]; } curSz++; - arrFirst[0] = entityMonorail; - + arrAirplanes[0] = entityAirplane; return 0; } public int InsertSecond(U inter){ - if(arrSecond[CountSecond-1] != null) + if(arrIlluminators[CountSecond-1] != null) return -1; - arrSecond[0] = inter; + arrIlluminators[0] = inter; return 0; } @@ -52,8 +47,8 @@ public class HardGeneric { Random rand = new Random(); int indFirst = rand.nextInt(0, curSz); int indSecond = rand.nextInt(0,curSz); - EntityAirplane entity = arrFirst[indFirst]; - IDraw inter = arrSecond[indSecond]; + EntityAirplane entity = arrAirplanes[indFirst]; + IDraw inter = arrIlluminators[indSecond]; DrawningAirplane airplane = new DrawningAirplane(entity.Speed(), entity.Weight(), entity.BodyColor(), pictureBoxWidth, pictureBoxHeight); return airplane; diff --git a/src/Main.java b/src/Main.java index 74fcc09..aaa6d6c 100644 --- a/src/Main.java +++ b/src/Main.java @@ -14,7 +14,6 @@ import javax.swing.*; public class Main { public static void main(String[] args) throws IOException { - FormAirplaneCollection form =new FormAirplaneCollection(); - //FormForHard form = new FormForHard(); + FormForHard form = new FormForHard(); } } \ No newline at end of file -- 2.25.1