diff --git a/OOP/.gitignore b/OOP/.gitignore new file mode 100644 index 0000000..f68d109 --- /dev/null +++ b/OOP/.gitignore @@ -0,0 +1,29 @@ +### IntelliJ IDEA ### +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/OOP/.idea/.gitignore b/OOP/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/OOP/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/OOP/.idea/misc.xml b/OOP/.idea/misc.xml new file mode 100644 index 0000000..0548357 --- /dev/null +++ b/OOP/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/OOP/.idea/modules.xml b/OOP/.idea/modules.xml new file mode 100644 index 0000000..98761a0 --- /dev/null +++ b/OOP/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/OOP/.idea/uiDesigner.xml b/OOP/.idea/uiDesigner.xml new file mode 100644 index 0000000..2b63946 --- /dev/null +++ b/OOP/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OOP/.idea/vcs.xml b/OOP/.idea/vcs.xml new file mode 100644 index 0000000..6c0b863 --- /dev/null +++ b/OOP/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/OOP/OOP.iml b/OOP/OOP.iml new file mode 100644 index 0000000..d5b343a --- /dev/null +++ b/OOP/OOP.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/OOP/Resources/arrowDown.png b/OOP/Resources/arrowDown.png new file mode 100644 index 0000000..2d51306 Binary files /dev/null and b/OOP/Resources/arrowDown.png differ diff --git a/OOP/Resources/arrowLeft.png b/OOP/Resources/arrowLeft.png new file mode 100644 index 0000000..2c406e8 Binary files /dev/null and b/OOP/Resources/arrowLeft.png differ diff --git a/OOP/Resources/arrowRight.png b/OOP/Resources/arrowRight.png new file mode 100644 index 0000000..36ad5e5 Binary files /dev/null and b/OOP/Resources/arrowRight.png differ diff --git a/OOP/Resources/arrowUp.png b/OOP/Resources/arrowUp.png new file mode 100644 index 0000000..e3a0383 Binary files /dev/null and b/OOP/Resources/arrowUp.png differ diff --git a/OOP/src/DirectionType.java b/OOP/src/DirectionType.java new file mode 100644 index 0000000..d3a2058 --- /dev/null +++ b/OOP/src/DirectionType.java @@ -0,0 +1,6 @@ +public enum DirectionType { + Up, + Down, + Left, + Right +} \ No newline at end of file diff --git a/OOP/src/DrawningElectricLocomotive.java b/OOP/src/DrawningElectricLocomotive.java new file mode 100644 index 0000000..e560f86 --- /dev/null +++ b/OOP/src/DrawningElectricLocomotive.java @@ -0,0 +1,193 @@ +import java.awt.*; +import java.util.Random; + +public class DrawningElectricLocomotive { + private EntityElectricLocomotive entityElectricLocomotive; + public EntityElectricLocomotive getEntityElectricLocomotive() { + return entityElectricLocomotive; + } + private Integer _pictureWidth; + private Integer _pictureHeight; + private Integer _startPosX; + private Integer _startPosY; + private final int _drawingElectricLocomotiveWidth = 100; + private final int _drawingElectricLocomotiveHight = 100; + + public DrawningElectricLocomotiveWheels _drawningElectricLocomotiveWheels; + + public void Init(int speed, double weight, Color bodyColor, Color additionalColor, boolean pantograph, boolean batteryStorage) { + entityElectricLocomotive = new EntityElectricLocomotive(); + entityElectricLocomotive.Init(speed, weight, bodyColor, additionalColor, pantograph, batteryStorage); + _startPosY = null; + _startPosX = null; + _pictureWidth = null; + _pictureHeight = null; + + _drawningElectricLocomotiveWheels = new DrawningElectricLocomotiveWheels(); + Random random = new Random(); + int[] countwheels = {2, 3, 4}; + int wheelCount = countwheels[random.nextInt(countwheels.length)]; + _drawningElectricLocomotiveWheels.setEnumNumber(wheelCount); + + + } + + public void setPosition(int x, int y) { + if (_pictureHeight == null || _pictureWidth == null) + return; + _startPosX = x; + _startPosY = y; + + if (_drawingElectricLocomotiveWidth + x > _pictureWidth || x < 0) { + _startPosX = 0; + } + if (_drawingElectricLocomotiveHight + y > _pictureHeight || y < 0) { + _startPosY = 0; + } + } + + public boolean setPictureSize(int width, int height) { + + if (_drawingElectricLocomotiveHight > height || _drawingElectricLocomotiveWidth > width) + return false; + _pictureHeight = height; + _pictureWidth = width; + + if (_startPosX != null && _startPosY != null) { + if (_startPosX + _drawingElectricLocomotiveWidth > width) + _startPosX = width - _drawingElectricLocomotiveWidth; + if (_startPosY + _drawingElectricLocomotiveHight > height) + _startPosY = height - _drawingElectricLocomotiveHight; + } + return true; + } + + public boolean moveTransport(DirectionType direction) { + if (entityElectricLocomotive == null || _pictureWidth == null || _pictureHeight == null) + return false; + switch (direction) { + case Left: + if (_startPosX - entityElectricLocomotive.Step() > 0) + _startPosX -= (int) entityElectricLocomotive.Step(); + return true; + case Up: + if (_startPosY - entityElectricLocomotive.Step() > 0) + _startPosY -= (int) entityElectricLocomotive.Step(); + return true; + case Right: + if (_startPosX + entityElectricLocomotive.Step() < _pictureWidth - _drawingElectricLocomotiveWidth) + _startPosX += (int) entityElectricLocomotive.Step(); + return true; + case Down: + if (_startPosY + entityElectricLocomotive.Step() < _pictureHeight - _drawingElectricLocomotiveHight) + _startPosY += (int) entityElectricLocomotive.Step(); + return true; + default: + return false; + } + } + + public void DrawTransport(Graphics g){ + if (entityElectricLocomotive == null || _startPosX == null || _startPosY == null) { + return; + } + + Graphics2D g2d = (Graphics2D) g; + _drawningElectricLocomotiveWheels.drawElectricLocomotiveWheels(g, Color.BLACK, _startPosX, _startPosY); + Point[] Body = new Point[]{ + new Point(_startPosX + 20,_startPosY + 20), + new Point(_startPosX, _startPosY + 25 + 20), + new Point(_startPosX , _startPosY + 50 + 20), + new Point(_startPosX + 100 , _startPosY + 50 + 20), + new Point(_startPosX + 100, _startPosY + 25 + 20), + new Point(_startPosX + 105, _startPosY + 20), + }; + + Polygon BodyPolygon = new Polygon(); + for(Point point:Body){ + BodyPolygon.addPoint(point.x, point.y); + } + g2d.setColor(entityElectricLocomotive.getBodyColor()); + g2d.fillPolygon(BodyPolygon); + + + Point[] line = new Point[]{ + new Point(_startPosX, _startPosY + 25 + 20), + new Point(_startPosX, _startPosY + 30 + 20), + new Point(_startPosX + 100, _startPosY + 30 + 20), + new Point(_startPosX + 100, _startPosY + 25 + 20), + }; + Polygon linePolugon = new Polygon(); + for(Point point: line){ + linePolugon.addPoint(point.x, point.y); + } + g2d.setColor(entityElectricLocomotive.getAdditionalColor()); + g2d.fillPolygon(linePolugon); + + + Point[] glass = new Point[]{ + new Point(_startPosX + 20, _startPosY + 2 + 20), + new Point(_startPosX + 6 , _startPosY + 20 + 20), + new Point(_startPosX + 20, _startPosY + 20 + 20), + new Point(_startPosX + 20, _startPosY + 2 + 20) + }; + Polygon glassPolygon = new Polygon(); + for(Point point: glass){ + glassPolygon.addPoint(point.x, point.y); + } + g2d.setColor(Color.WHITE); + g2d.fillPolygon(glassPolygon); + + + if(entityElectricLocomotive.getBatteryStorage()){ + int mod = 50; + Point[] battery = new Point[]{ + new Point(_startPosX + 40/2 + mod, _startPosY + 2+ 20), + new Point(_startPosX + 40/2 + mod, _startPosY + 4+ 20), + new Point(_startPosX + 35/2 + mod , _startPosY + 4+ 20), + new Point(_startPosX + 35/2 + mod, _startPosY + 16+ 20), + new Point(_startPosX + 60/2 + mod, _startPosY + 16+ 20), + new Point(_startPosX + 60/2 + mod, _startPosY + 4+ 20), + new Point(_startPosX + 55/2 + mod, _startPosY + 4+ 20), + new Point(_startPosX + 55/2 + mod, _startPosY + 2+ 20), + }; + mod += 20; + Point[] battery2 = new Point[]{ + new Point(_startPosX + 40/2 + mod, _startPosY + 2+ 20), + new Point(_startPosX + 40/2 + mod, _startPosY + 4+ 20), + new Point(_startPosX + 35/2 + mod , _startPosY + 4+ 20), + new Point(_startPosX + 35/2 + mod, _startPosY + 16+ 20), + new Point(_startPosX + 60/2 + mod, _startPosY + 16+ 20), + new Point(_startPosX + 60/2 + mod, _startPosY + 4+ 20), + new Point(_startPosX + 55/2 + mod, _startPosY + 4+ 20), + new Point(_startPosX + 55/2 + mod, _startPosY + 2+ 20), + }; + + Polygon batteryPolygon = new Polygon(); + for(Point points : battery){ + batteryPolygon.addPoint(points.x, points.y); + } + Polygon battery2Polygon = new Polygon(); + for(Point points : battery2){ + battery2Polygon.addPoint(points.x, points.y); + } + g2d.setColor(Color.YELLOW); + g2d.fillPolygon(batteryPolygon); + g2d.fillPolygon(battery2Polygon); + } + if(entityElectricLocomotive.getPantograph()){ + g2d.setColor(Color.BLACK); + g.drawRect(_startPosX + 40,_startPosY,10,1); + g.drawRect(_startPosX + 5 + 40, _startPosY ,1,20); + + g.drawRect(_startPosX + 40 + 30,_startPosY,10,1); + g.drawRect(_startPosX + 5 + 40 + 30, _startPosY ,1,20); + + } + + + + } + + +} diff --git a/OOP/src/DrawningElectricLocomotiveWheels.java b/OOP/src/DrawningElectricLocomotiveWheels.java new file mode 100644 index 0000000..a403e62 --- /dev/null +++ b/OOP/src/DrawningElectricLocomotiveWheels.java @@ -0,0 +1,51 @@ +import java.awt.*; + +public class DrawningElectricLocomotiveWheels { + private WheelsCount _wheelCount; + public void setEnumNumber(int wheelCount) { + for (WheelsCount value : WheelsCount.values()) { + if (value.getEnumNumber() == wheelCount) { + _wheelCount = value; + return; + } + } + } + public void drawElectricLocomotiveWheels(Graphics g, Color color, int startPosX, int startPosY) { + Graphics2D g2d = (Graphics2D) g; + g2d.setColor(color); + g2d.setStroke(new BasicStroke(4)); + + if (_wheelCount.getEnumNumber() >= 2){ + g2d.drawOval(startPosX, startPosY + 70,10,10); + g2d.drawOval(startPosX+ 10, startPosY + 70,10,10); + + g2d.drawOval(startPosX + 50, startPosY + 70,10,10); + g2d.drawOval(startPosX+ 10 + 50, startPosY + 70,10,10); + + } + + if (_wheelCount.getEnumNumber() >= 3){ + g2d.drawOval(startPosX, startPosY + 70,10,10); + g2d.drawOval(startPosX+ 10, startPosY + 70,10,10); + g2d.drawOval(startPosX+ 10 +10, startPosY + 70,10,10); + + g2d.drawOval(startPosX + 50, startPosY + 70,10,10); + g2d.drawOval(startPosX + 10 + 50, startPosY + 70,10,10); + g2d.drawOval(startPosX + 10 + 10 + 50, startPosY + 70,10,10); + } + + if (_wheelCount.getEnumNumber() >= 4){ + g2d.drawOval(startPosX, startPosY + 70,10,10); + g2d.drawOval(startPosX+ 10, startPosY + 70,10,10); + g2d.drawOval(startPosX+ 10 +10, startPosY + 70,10,10); + g2d.drawOval(startPosX+ 10 +10 + 10, startPosY + 70,10,10); + + g2d.drawOval(startPosX + 50, startPosY + 70,10,10); + g2d.drawOval(startPosX + 10 + 50, startPosY + 70,10,10); + g2d.drawOval(startPosX + 10 + 10 + 50, startPosY + 70,10,10); + g2d.drawOval(startPosX + 10 + 10 + 10 + 50, startPosY + 70,10,10); + } + + } +} + diff --git a/OOP/src/EntityElectricLocomotive.java b/OOP/src/EntityElectricLocomotive.java new file mode 100644 index 0000000..c8f4f4b --- /dev/null +++ b/OOP/src/EntityElectricLocomotive.java @@ -0,0 +1,39 @@ +import java.awt.*; + +public class EntityElectricLocomotive { + private int Speed; + public int getSpeed() { + return Speed; + } + private double Weight; + public double getWeight() { + return Weight; + } + private Color BodyColor; + public Color getBodyColor() { + return BodyColor; + } + private Color AdditionalColor; + public Color getAdditionalColor() { + return AdditionalColor; + } + public double Step() { + return Speed*100/Weight; + } + private boolean BatteryStorage; + public boolean getBatteryStorage() { + return BatteryStorage; + } + private boolean Pantograph; + public boolean getPantograph() { + return Pantograph; + } + public void Init(int speed, double weight, Color bodyColor, Color additionalColor, boolean pantograph, boolean batteryStorage) { + Speed = speed; + Weight = weight; + BodyColor = bodyColor; + AdditionalColor = additionalColor; + Pantograph = pantograph; + BatteryStorage = batteryStorage; + } +} diff --git a/OOP/src/FormElectricLocomotive.form b/OOP/src/FormElectricLocomotive.form new file mode 100644 index 0000000..5b13c84 --- /dev/null +++ b/OOP/src/FormElectricLocomotive.form @@ -0,0 +1,93 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/OOP/src/FormElectricLocomotive.java b/OOP/src/FormElectricLocomotive.java new file mode 100644 index 0000000..2a90784 --- /dev/null +++ b/OOP/src/FormElectricLocomotive.java @@ -0,0 +1,114 @@ +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.LinkedList; +import java.util.List; +import java.util.Random; + +public class FormElectricLocomotive extends JFrame { + protected DrawningElectricLocomotive _drawningElectricLocomotive = new DrawningElectricLocomotive(); + JPanel PanelWrapper; + private JPanel PictureBox; + private JButton buttonCreate; + private JButton buttonRight; + private JButton buttonDown; + private JButton buttonLeft; + private JButton buttonUp; + + private List controls; + public FormElectricLocomotive() { + buttonUp.setName("buttonUp"); + buttonDown.setName("buttonDown"); + buttonLeft.setName("buttonLeft"); + buttonRight.setName("buttonRight"); + + InitializeControlsRepaintList(); + + buttonCreate.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + _drawningElectricLocomotive = new DrawningElectricLocomotive(); + Random random = new Random(); + + _drawningElectricLocomotive.Init(25, + 200, + new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256)), + new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256)), + random.nextBoolean(), random.nextBoolean() ); + _drawningElectricLocomotive.setPictureSize(PictureBox.getWidth(), PictureBox.getHeight()); + _drawningElectricLocomotive.setPosition(random.nextInt(100), + random.nextInt(100)); + + Draw(); + + } + }); + ActionListener buttonMoveClickedListener = new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + String buttonName = ((JButton) e.getSource()).getName(); + boolean result = false; + + switch (buttonName) { + case "buttonUp": { + result = _drawningElectricLocomotive.moveTransport(DirectionType.Up); + } + break; + case "buttonDown": { + result = _drawningElectricLocomotive.moveTransport(DirectionType.Down); + } + break; + case "buttonLeft": { + result = _drawningElectricLocomotive.moveTransport(DirectionType.Left); + } + break; + case "buttonRight": { + result = _drawningElectricLocomotive.moveTransport(DirectionType.Right); + } + break; + + } + if (result) + Draw(); + + } + }; + buttonRight.addActionListener(buttonMoveClickedListener); + buttonDown.addActionListener(buttonMoveClickedListener); + buttonLeft.addActionListener(buttonMoveClickedListener); + buttonUp.addActionListener(buttonMoveClickedListener); + + } + private void Draw() { + if (_drawningElectricLocomotive.getEntityElectricLocomotive() == null) + return; + if (PictureBox.getWidth() == 0 || PictureBox.getHeight() == 0) { + return; + } + Graphics g = PictureBox.getGraphics(); + g.setColor(PictureBox.getBackground()); + g.fillRect(0,0, PictureBox.getWidth(), PictureBox.getHeight()); + _drawningElectricLocomotive.DrawTransport(g); + + RepaintControls(); + + } + private void RepaintControls() { + for (JComponent control : controls) { + control.repaint(); + } + } + + + private void InitializeControlsRepaintList() { + controls = new LinkedList<>(); + controls.add(buttonCreate); + controls.add(buttonUp); + controls.add(buttonDown); + controls.add(buttonLeft); + controls.add(buttonRight); + } + + +} diff --git a/OOP/src/Main.java b/OOP/src/Main.java new file mode 100644 index 0000000..c8dc57b --- /dev/null +++ b/OOP/src/Main.java @@ -0,0 +1,13 @@ +import javax.swing.*; +public class Main { + public static void main(String[] args) { + JFrame.setDefaultLookAndFeelDecorated(false); + JFrame frame = new JFrame("Поезд"); + frame.setContentPane(new FormElectricLocomotive().PanelWrapper); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.setLocation(500, 200); + frame.pack(); + frame.setSize(700, 500); + frame.setVisible(true); + } +} \ No newline at end of file diff --git a/OOP/src/WheelsCount.java b/OOP/src/WheelsCount.java new file mode 100644 index 0000000..f86dd18 --- /dev/null +++ b/OOP/src/WheelsCount.java @@ -0,0 +1,12 @@ +public enum WheelsCount { + Two(2), + Three(3), + Four(4); + final private int EnumNumber; + WheelsCount(int enumNumber) { + EnumNumber = enumNumber; + } + public int getEnumNumber() { + return EnumNumber; + } +} diff --git a/OOP_Hard/.idea/shelf/Uncommitted_changes_before_Checkout_at_08_06_2024_6_41__Changes_.xml b/OOP_Hard/.idea/shelf/Uncommitted_changes_before_Checkout_at_08_06_2024_6_41__Changes_.xml new file mode 100644 index 0000000..5c4f2fd --- /dev/null +++ b/OOP_Hard/.idea/shelf/Uncommitted_changes_before_Checkout_at_08_06_2024_6_41__Changes_.xml @@ -0,0 +1,4 @@ + + \ No newline at end of file diff --git a/OOP_Hard/.idea/workspace.xml b/OOP_Hard/.idea/workspace.xml new file mode 100644 index 0000000..c1b1ae4 --- /dev/null +++ b/OOP_Hard/.idea/workspace.xml @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + { + "associatedIndex": 3 +} + + + + + + + + + + + + + + + + + + + + + + 1717656751523 + + + + + + + + + + + + + + + + + + + + + + + + file://$PROJECT_DIR$/src/Main.java + 14 + + + + + \ No newline at end of file