diff --git a/laba1Loco/Direction.java b/laba1Loco/Direction.java
new file mode 100644
index 0000000..f6f3a67
--- /dev/null
+++ b/laba1Loco/Direction.java
@@ -0,0 +1,21 @@
+package laba1Loco;
+
+public enum Direction
+ {
+ ///
+ /// Вверх
+ ///
+ Up,
+ ///
+ /// Вниз
+ ///
+ Down,
+ ///
+ /// Влево
+ ///
+ Left,
+ ///
+ /// Вправо
+ ///
+ Right
+ }
\ No newline at end of file
diff --git a/laba1Loco/DrawingLoco.java b/laba1Loco/DrawingLoco.java
new file mode 100644
index 0000000..8e4c1be
--- /dev/null
+++ b/laba1Loco/DrawingLoco.java
@@ -0,0 +1,244 @@
+package laba1Loco;
+
+import java.awt.*;
+import java.util.*;
+import javax.swing.*;
+import javax.swing.Timer;
+import java.awt.event.*;
+
+public class DrawingLoco{
+
+ private WheelDrawing wheelDrawing;
+
+ ///
+ /// Класс-сущность
+ ///
+ public EntityLoco _EntityLoco;
+ ///
+ /// Ширина окна
+ ///
+ private int _pictureWidth;
+ ///
+ /// Высота окна
+ ///
+ private int _pictureHeight;
+ ///
+ /// Левая координата прорисовки локомотива
+ ///
+ private int _startPosX;
+ ///
+ /// Верхняя кооридната прорисовки локомотива
+ ///
+ private int _startPosY;
+ ///
+ /// Ширина прорисовки локомотива
+ ///
+ private int _locoWidth = 83;
+ ///
+ /// Высота прорисовки локомотива
+ ///
+ private int _locoHeight = 41;
+ ///
+ /// Инициализация свойств
+ ///
+ /// Скорость
+ /// Вес
+ /// Цвет кузова
+ /// Дополнительный цвет
+ /// Признак наличия трубы
+ /// Признак наличия бака
+ /// Признак наличия паровозной полосы
+ /// Ширина картинки
+ /// Высота картинки
+ /// true - объект создан, false - проверка не пройдена, нельзя создать объект в этих размерах
+ public boolean Init(int speed, double weight, Color bodyColor, Color additionalColor, boolean tube, boolean fuelTank, boolean locoLine, int numWheel, int width, int height)
+ {
+ _pictureWidth = width;
+ _pictureHeight = height;
+ if (_pictureHeight < _locoHeight || _pictureWidth < _locoWidth)
+ return false;
+ _EntityLoco = new EntityLoco();
+ _EntityLoco.Init(speed, weight, bodyColor, additionalColor, tube, fuelTank, locoLine, numWheel);
+ if (fuelTank)
+ _locoWidth = 169;
+ wheelDrawing = new WheelDrawing();
+ wheelDrawing.setNumWheel(numWheel);
+ return true;
+ }
+ ///
+ /// Установка позиции
+ ///
+ /// Координата X
+ /// Координата Y
+ public void SetPosition(int x, int y)
+ {
+ _startPosX = Math.min(x, _pictureWidth-_locoWidth);
+ _startPosY = Math.min(y, _pictureHeight-_locoHeight);
+ }
+ ///
+ /// Изменение направления перемещения
+ ///
+ /// Направление
+ public void MoveTransport(Direction direction)
+ {
+ if (_EntityLoco == null){
+ return;
+ }
+ switch (direction)
+ {
+ //влево
+ case Left:
+ if (_startPosX - _EntityLoco.Step > 0)
+ {
+ _startPosX -= (int)_EntityLoco.Step;
+ }
+ break;
+ //вверх
+ case Up:
+ if (_startPosY - _EntityLoco.Step > 0)
+ {
+ _startPosY -= (int)_EntityLoco.Step;
+ }
+ break;
+ // вправо
+ case Right:
+ if (_startPosX + _locoWidth + _EntityLoco.Step < _pictureWidth)
+ {
+ _startPosX += (int)_EntityLoco.Step;
+ }
+ break;
+ //вниз
+ case Down:
+ if (_startPosY + _locoHeight + _EntityLoco.Step < _pictureHeight)
+ {
+ _startPosY += (int)_EntityLoco.Step;
+ }
+ break;
+ }
+ }
+ ///
+ /// Прорисовка объекта
+ ///
+ ///
+ public void DrawTransport(Graphics2D g2d)
+ {
+
+ if (_EntityLoco == null)
+ {
+ return;
+ }
+
+ // body
+ g2d.setColor(_EntityLoco.BodyColor);
+ g2d.drawPolyline(new int[]{
+ _startPosX + 8, _startPosX + 79, _startPosX + 79, _startPosX + 4, _startPosX + 4, _startPosX + 8,
+ }, new int[]{
+ _startPosY+10, _startPosY+10, _startPosY+32, _startPosY+32, _startPosY+20, _startPosY+10
+ }, 6);
+ g2d.drawPolyline(new int[]{
+ _startPosX + 4, _startPosX + 29, _startPosX + 29, _startPosX + 37, _startPosX + 37, _startPosX + 79, _startPosX + 37, _startPosX + 37, _startPosX + 29, _startPosX + 29,
+ }, new int[]{
+ _startPosY+21, _startPosY+21, _startPosY+14, _startPosY+14, _startPosY+21, _startPosY+21, _startPosY+21, _startPosY+29, _startPosY+29, _startPosY+21
+ }, 10);
+
+ // trucks
+ g2d.fillPolygon(new int[]{
+_startPosX + 0,_startPosX + 5,_startPosX + 32,_startPosX + 36,
+ }, new int[]{
+_startPosY+37,_startPosY+33,_startPosY+33,_startPosY+37
+ }, 4);
+ g2d.fillPolygon(new int[]{
+_startPosX + 44,_startPosX + 49,_startPosX + 76,_startPosX + 80,
+ }, new int[]{
+_startPosY+37,_startPosY+33,_startPosY+33,_startPosY+37
+ }, 4);
+
+ //back
+ g2d.fillPolygon(new int[]{
+_startPosX + 79,_startPosX + 82,_startPosX + 82,_startPosX + 79,
+ }, new int[]{
+_startPosY+12,_startPosY+12,_startPosY+30,_startPosY+30
+ }, 4);
+
+
+ //windows
+ g2d.setColor(Color.BLUE);
+ g2d.drawRect(_startPosX + 10, _startPosY + 12, 6, 7);
+ g2d.drawRect(_startPosX + 19, _startPosY + 12, 6, 7);
+ g2d.drawRect(_startPosX + 72, _startPosY + 12, 6, 7);
+
+ //wheels
+ wheelDrawing.Draw(_startPosX, _startPosY, _EntityLoco.FuelTank, _EntityLoco.BodyColor, g2d);
+
+ g2d.setColor(_EntityLoco.AdditionalColor);
+ if (_EntityLoco.Tube)
+ {
+ g2d.drawPolyline(new int[] {
+_startPosX + 40,_startPosX + 40,_startPosX + 45,_startPosX + 41,_startPosX + 41,_startPosX + 44,_startPosX + 44,_startPosX + 45,_startPosX + 45,
+ },new int[] {
+_startPosY+9,_startPosY+3,_startPosY+3,_startPosY+3,_startPosY,_startPosY,_startPosY+3,_startPosY+3,_startPosY+9,
+ },9);
+ }
+ if (_EntityLoco.LocoLine)
+ {
+ g2d.drawPolyline(new int[] {
+ _startPosX + 60,_startPosX + 38,
+ },new int[] {
+ _startPosY+10,_startPosY+32
+ },2);
+ g2d.drawPolyline(new int[] {
+ _startPosX + 65,_startPosX + 43,
+ },new int[] {
+ _startPosY+10,_startPosY+32
+ },2);
+ g2d.drawPolyline(new int[] {
+ _startPosX + 70,_startPosX + 48,
+ },new int[] {
+ _startPosY+10,_startPosY+32
+ },2);
+ }
+ if (_EntityLoco.FuelTank)
+ {
+ // body
+ g2d.setColor(_EntityLoco.BodyColor);
+ g2d.drawPolyline(new int[]{
+ _startPosX + 89, _startPosX + 164, _startPosX + 164, _startPosX + 89, _startPosX + 89,
+ }, new int[]{
+ _startPosY+10, _startPosY+10, _startPosY+32, _startPosY+32, _startPosY+10
+ }, 5);
+ g2d.drawPolyline(new int[]{
+ _startPosX + 89, _startPosX + 164,
+ }, new int[]{
+ _startPosY+21, _startPosY+21,
+ }, 2);
+
+ // trucks
+ g2d.fillPolygon(new int[]{
+_startPosX + 0+85,_startPosX + 5+85,_startPosX + 32+85,_startPosX + 36+85,
+ }, new int[]{
+_startPosY+37,_startPosY+33,_startPosY+33,_startPosY+37
+ }, 4);
+ g2d.fillPolygon(new int[]{
+_startPosX + 44+85,_startPosX + 49+85,_startPosX + 76+85,_startPosX + 80+85,
+ }, new int[]{
+_startPosY+37,_startPosY+33,_startPosY+33,_startPosY+37
+ }, 4);
+
+ //back
+ g2d.fillPolygon(new int[]{
+_startPosX + 79+85,_startPosX + 82+85,_startPosX + 82+85,_startPosX + 79+85,
+ }, new int[]{
+_startPosY+12,_startPosY+12,_startPosY+30,_startPosY+30
+ }, 4);
+
+
+ //front
+ g2d.fillPolygon(new int[]{
+_startPosX + 86,_startPosX + 89,_startPosX + 89,_startPosX + 86,
+ }, new int[]{
+_startPosY+12,_startPosY+12,_startPosY+30,_startPosY+30
+ }, 4);
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/laba1Loco/EntityLoco.java b/laba1Loco/EntityLoco.java
new file mode 100644
index 0000000..fa6f254
--- /dev/null
+++ b/laba1Loco/EntityLoco.java
@@ -0,0 +1,69 @@
+package laba1Loco;
+
+import java.awt.*;
+import java.util.*;
+import javax.swing.*;
+import javax.swing.Timer;
+import java.awt.event.*;
+
+public class EntityLoco{
+ ///
+ /// Скорость
+ ///
+ public int Speed;
+ ///
+ /// Вес
+ ///
+ public double Weight;
+ ///
+ /// Основной цвет
+ ///
+ public Color BodyColor;
+ ///
+ /// Дополнительный цвет (для опциональных элементов)
+ ///
+ public Color AdditionalColor;
+ ///
+ /// Признак (опция) наличия трубы
+ ///
+ public boolean Tube;
+ ///
+ /// Признак (опция) наличия бака
+ ///
+ public boolean FuelTank;
+ ///
+ /// Признак (опция) наличия паровозной полосы
+ ///
+ public boolean LocoLine;
+ ///
+ /// Шаг перемещения автомобиля
+ ///
+ public double Step;
+ ///
+ /// количество колёс [2;4]
+ ///
+ public int numWheel;
+ ///
+ /// Инициализация полей объекта-класса спортивного автомобиля
+ ///
+ /// Скорость
+ /// Вес автомобиля
+ /// Основной цвет
+ /// Дополнительный цвет
+ /// Признак наличия трубы
+ /// Признак наличия бака
+ /// Признак паровозной гоночной полосы
+ public void Init(int speed, double weight, Color bodyColor, Color
+ additionalColor, boolean tube, boolean fuelTank, boolean locoLine, int _numWheel)
+ {
+ numWheel = _numWheel;
+ Speed = speed;
+ Weight = weight;
+ BodyColor = bodyColor;
+ AdditionalColor = additionalColor;
+ Tube = tube;
+ FuelTank = fuelTank;
+ LocoLine = locoLine;
+ Step = (double)Speed * 100 / Weight;
+ }
+}
\ No newline at end of file
diff --git a/laba1Loco/FormTrain.java b/laba1Loco/FormTrain.java
new file mode 100644
index 0000000..1e9ad91
--- /dev/null
+++ b/laba1Loco/FormTrain.java
@@ -0,0 +1,124 @@
+package laba1Loco;
+
+import java.awt.*;
+import java.util.*;
+import javax.swing.*;
+import javax.swing.Timer;
+import java.awt.event.*;
+
+public class FormTrain{
+ private DrawingLoco _drawingLoco;
+ Canvas canv;
+
+ public void Draw(){
+ canv.repaint();
+ }
+
+ public FormTrain(){
+ JFrame w=new JFrame ("Loco");
+ JButton buttonCreate = new JButton("create");
+ JButton up = new JButton();
+ up.setBorderPainted(false);
+ up.setFocusPainted(false);
+ up.setContentAreaFilled(false);
+ up.setName("up");
+ up.setIcon(new ImageIcon("D:\\Coffee\\PIbd-21_Kouvshinoff_T._A._WarmlyLocomotive._Harder\\laba1Loco\\images\\arowUp340x259.png"));
+ JButton down = new JButton();
+ down.setBorderPainted(false);
+ down.setFocusPainted(false);
+ down.setContentAreaFilled(false);
+ down.setName("down");
+ down.setIcon(new ImageIcon("D:\\Coffee\\PIbd-21_Kouvshinoff_T._A._WarmlyLocomotive._Harder\\laba1Loco\\images\\arowDown340x259.png"));
+ JButton left = new JButton();
+ left.setBorderPainted(false);
+ left.setFocusPainted(false);
+ left.setContentAreaFilled(false);
+ left.setName("left");
+ left.setIcon(new ImageIcon("D:\\Coffee\\PIbd-21_Kouvshinoff_T._A._WarmlyLocomotive._Harder\\laba1Loco\\images\\arowL340x259.png"));
+ JButton right = new JButton();
+ right.setBorderPainted(false);
+ right.setFocusPainted(false);
+ right.setContentAreaFilled(false);
+ right.setName("right");
+ right.setIcon(new ImageIcon("D:\\Coffee\\PIbd-21_Kouvshinoff_T._A._WarmlyLocomotive._Harder\\laba1Loco\\images\\arowR340x259.png"));
+
+ buttonCreate.addActionListener(
+ new ActionListener() {
+ public void actionPerformed(ActionEvent e){
+ System.out.println(e.getActionCommand());
+ Random random = new Random();
+ _drawingLoco = new DrawingLoco();
+ _drawingLoco.Init(random.nextInt(100, 300), random.nextInt(1000, 3000),
+ new Color(random.nextInt(0, 256), random.nextInt(0, 256), random.nextInt(0, 256)),
+ new Color(random.nextInt(0, 256), random.nextInt(0, 256), random.nextInt(0, 256)),
+ random.nextInt(0, 2) == 1, random.nextInt(0, 2) == 1, random.nextInt(0, 2) == 1,
+ random.nextInt(2, 5), 1000, 560);
+ _drawingLoco.SetPosition(random.nextInt(10, 100), random.nextInt(10, 100));
+ canv._drawingLoco = _drawingLoco;
+ Draw();
+ }
+ }
+ );
+ ActionListener actioListener = new ActionListener() {
+ public void actionPerformed(ActionEvent e){
+ System.out.println(((JButton)(e.getSource())).getName());
+ if (_drawingLoco == null)
+ {
+ return;
+ }
+ switch(((JButton)(e.getSource())).getName()){
+ case "up":
+ _drawingLoco.MoveTransport(Direction.Up);
+ break;
+ case "down":
+ _drawingLoco.MoveTransport(Direction.Down);
+ break;
+ case "left":
+ _drawingLoco.MoveTransport(Direction.Left);
+ break;
+ case "right":
+ _drawingLoco.MoveTransport(Direction.Right);
+ break;
+ }
+ Draw();
+ }
+ };
+ up.addActionListener(actioListener);
+ down.addActionListener(actioListener);
+ left.addActionListener(actioListener);
+ right.addActionListener(actioListener);
+
+ w.setSize (1000, 600);
+ w.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
+ w.setLayout(null);
+ canv = new Canvas();
+ canv.setBounds(0, 0, 1000, 600);
+ buttonCreate.setBounds(2, 540, 100, 20);
+ up.setBounds(900, 480, 40, 40);
+ down.setBounds(900, 520, 40, 40);
+ left.setBounds(860, 520, 40, 40);
+ right.setBounds(940, 520, 40, 40);
+ w.add(canv);
+ w.add(buttonCreate);
+ w.add(up);
+ w.add(down);
+ w.add(left);
+ w.add(right);
+ w.setVisible (true);
+ }
+}
+
+class Canvas extends JComponent{
+ public DrawingLoco _drawingLoco;
+ public Canvas(){
+ }
+ public void paintComponent (Graphics g){
+ if (_drawingLoco == null){
+ return;
+ }
+ super.paintComponents (g) ;
+ Graphics2D g2d = (Graphics2D)g;
+ _drawingLoco.DrawTransport(g2d);
+ super.repaint();
+ }
+}
\ No newline at end of file
diff --git a/laba1Loco/Main.java b/laba1Loco/Main.java
new file mode 100644
index 0000000..3367941
--- /dev/null
+++ b/laba1Loco/Main.java
@@ -0,0 +1,7 @@
+package laba1Loco;
+
+public class Main{
+ public static void main(String[] args) {
+ FormTrain formTrain = new FormTrain();
+ }
+}
\ No newline at end of file
diff --git a/laba1Loco/NumWheel.java b/laba1Loco/NumWheel.java
new file mode 100644
index 0000000..fff8072
--- /dev/null
+++ b/laba1Loco/NumWheel.java
@@ -0,0 +1,17 @@
+package laba1Loco;
+
+public enum NumWheel
+ {
+ ///
+ /// 2 колеса
+ ///
+ TwoWheel,
+ ///
+ /// 3 колеса
+ ///
+ ThreeWheel,
+ ///
+ /// 4 колеса
+ ///
+ FourWheel
+ }
\ No newline at end of file
diff --git a/laba1Loco/WheelDrawing.java b/laba1Loco/WheelDrawing.java
new file mode 100644
index 0000000..33935fb
--- /dev/null
+++ b/laba1Loco/WheelDrawing.java
@@ -0,0 +1,90 @@
+package laba1Loco;
+
+import java.awt.*;
+import java.util.*;
+import javax.swing.*;
+import javax.swing.Timer;
+import java.awt.event.*;
+
+public class WheelDrawing{
+ private NumWheel numWheel;
+
+ public NumWheel getSomeProperty() {
+ return numWheel;
+ }
+
+ public void setNumWheel(int kwheel){
+ switch(kwheel){
+ case 2:
+ numWheel = NumWheel.TwoWheel;
+ break;
+ case 3:
+ numWheel = NumWheel.ThreeWheel;
+ break;
+ case 4:
+ numWheel = NumWheel.FourWheel;
+ break;
+ default:
+ numWheel = NumWheel.TwoWheel;
+ System.out.println("ВСё плохо, колво колёс почему то не соответтвовало критериям, количество колёс:" + Integer.toString(kwheel) + "но вывели мы как будто их было 2");
+ break;
+ }
+ }
+
+ void Draw(int _startPosX, int _startPosY, boolean fuelTank, Color color, Graphics2D g2d){
+
+ g2d.setColor(color);
+
+ g2d.fillOval(_startPosX + 3, _startPosY + 34, 8, 8);
+ g2d.fillOval(_startPosX + 4, _startPosY + 35, 6, 6);
+ g2d.fillOval(_startPosX + 26, _startPosY + 34, 8, 8);
+ g2d.fillOval(_startPosX + 27, _startPosY + 35, 6, 6);
+ g2d.fillOval(_startPosX + 46, _startPosY + 34, 8, 8);
+ g2d.fillOval(_startPosX + 47, _startPosY + 35, 6, 6);
+ g2d.fillOval(_startPosX + 72, _startPosY + 34, 8, 8);
+ g2d.fillOval(_startPosX + 73, _startPosY + 35, 6, 6);
+ if (numWheel == NumWheel.TwoWheel){
+ g2d.fillOval(_startPosX + 14, _startPosY + 34, 8, 8);
+ g2d.fillOval(_startPosX + 15, _startPosY + 35, 6, 6);
+ g2d.fillOval(_startPosX + 59, _startPosY + 34, 8, 8);
+ g2d.fillOval(_startPosX + 60, _startPosY + 35, 6, 6);
+ }
+ if (numWheel == NumWheel.FourWheel){
+ g2d.fillOval(_startPosX + 11, _startPosY + 34, 8, 8);
+ g2d.fillOval(_startPosX + 12, _startPosY + 35, 6, 6);
+ g2d.fillOval(_startPosX + 18, _startPosY + 34, 8, 8);
+ g2d.fillOval(_startPosX + 19, _startPosY + 35, 6, 6);
+ g2d.fillOval(_startPosX + 55, _startPosY + 34, 8, 8);
+ g2d.fillOval(_startPosX + 56, _startPosY + 35, 6, 6);
+ g2d.fillOval(_startPosX + 63, _startPosY + 34, 8, 8);
+ g2d.fillOval(_startPosX + 64, _startPosY + 35, 6, 6);
+ }
+
+ if (fuelTank){
+ g2d.fillOval(_startPosX + 3+85, _startPosY + 34, 8, 8);
+ g2d.fillOval(_startPosX + 4+85, _startPosY + 35, 6, 6);
+ g2d.fillOval(_startPosX + 26+85, _startPosY + 34, 8, 8);
+ g2d.fillOval(_startPosX + 27+85, _startPosY + 35, 6, 6);
+ g2d.fillOval(_startPosX + 46+85, _startPosY + 34, 8, 8);
+ g2d.fillOval(_startPosX + 47+85, _startPosY + 35, 6, 6);
+ g2d.fillOval(_startPosX + 72+85, _startPosY + 34, 8, 8);
+ g2d.fillOval(_startPosX + 73+85, _startPosY + 35, 6, 6);
+ if (numWheel == NumWheel.TwoWheel){
+ g2d.fillOval(_startPosX + 14+85, _startPosY + 34, 8, 8);
+ g2d.fillOval(_startPosX + 15+85, _startPosY + 35, 6, 6);
+ g2d.fillOval(_startPosX + 59+85, _startPosY + 34, 8, 8);
+ g2d.fillOval(_startPosX + 60+85, _startPosY + 35, 6, 6);
+ }
+ if (numWheel == NumWheel.FourWheel){
+ g2d.fillOval(_startPosX + 11+85, _startPosY + 34, 8, 8);
+ g2d.fillOval(_startPosX + 12+85, _startPosY + 35, 6, 6);
+ g2d.fillOval(_startPosX + 18+85, _startPosY + 34, 8, 8);
+ g2d.fillOval(_startPosX + 19+85, _startPosY + 35, 6, 6);
+ g2d.fillOval(_startPosX + 55+85, _startPosY + 34, 8, 8);
+ g2d.fillOval(_startPosX + 56+85, _startPosY + 35, 6, 6);
+ g2d.fillOval(_startPosX + 63+85, _startPosY + 34, 8, 8);
+ g2d.fillOval(_startPosX + 64+85, _startPosY + 35, 6, 6);
+ }
+ }
+ }
+ }
diff --git a/laba1Loco/images/arowDown340x259.png b/laba1Loco/images/arowDown340x259.png
new file mode 100644
index 0000000..1aef4dc
Binary files /dev/null and b/laba1Loco/images/arowDown340x259.png differ
diff --git a/laba1Loco/images/arowL340x259.png b/laba1Loco/images/arowL340x259.png
new file mode 100644
index 0000000..a2e6f8b
Binary files /dev/null and b/laba1Loco/images/arowL340x259.png differ
diff --git a/laba1Loco/images/arowR340x259.png b/laba1Loco/images/arowR340x259.png
new file mode 100644
index 0000000..464963a
Binary files /dev/null and b/laba1Loco/images/arowR340x259.png differ
diff --git a/laba1Loco/images/arowUp340x259.png b/laba1Loco/images/arowUp340x259.png
new file mode 100644
index 0000000..3d8743b
Binary files /dev/null and b/laba1Loco/images/arowUp340x259.png differ