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
+
+
+ 1717656751523
+
+
+
+ 1717663084303
+
+
+
+ 1717663084303
+
+
+
+ 1717764105573
+
+
+
+ 1717764105573
+
+
+
+ 1717768092738
+
+
+
+ 1717768092738
+
+
+
+ 1717770679679
+
+
+
+ 1717770679679
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ file://$PROJECT_DIR$/src/Main.java
+ 14
+
+
+
+
+
+
\ No newline at end of file