From 90cd0c8afbcf0670d792f69b18c0faf2b5a14721 Mon Sep 17 00:00:00 2001 From: Anitonchik Date: Thu, 9 May 2024 20:09:37 +0400 Subject: [PATCH] Lab 01-2 --- CanvasDumpTruck.java | 17 ++++ DirectionType.java | 6 ++ DopEnum.java | 13 +++ DrawningDumpTruck.java | 191 +++++++++++++++++++++++++++++++++++++++++ DrawningWeels.java | 35 ++++++++ EntityDumpTruck.java | 35 ++++++++ FormDumpTruck.java | 129 ++++++++++++++++++++++++++++ Main.java | 8 ++ 8 files changed, 434 insertions(+) create mode 100644 CanvasDumpTruck.java create mode 100644 DirectionType.java create mode 100644 DopEnum.java create mode 100644 DrawningDumpTruck.java create mode 100644 DrawningWeels.java create mode 100644 EntityDumpTruck.java create mode 100644 FormDumpTruck.java create mode 100644 Main.java diff --git a/CanvasDumpTruck.java b/CanvasDumpTruck.java new file mode 100644 index 0000000..18b77df --- /dev/null +++ b/CanvasDumpTruck.java @@ -0,0 +1,17 @@ +import javax.swing.*; +import java.awt.*; + +public class CanvasDumpTruck extends JComponent { + public DrawningDumpTruck _drawningDumpTruck; + public CanvasDumpTruck() {} + + public void paintComponent(Graphics g) { + if (_drawningDumpTruck == null) { + return; + } + super.paintComponents(g); + Graphics2D g2d = (Graphics2D) g; + _drawningDumpTruck.DrawTransport(g2d); + super.repaint(); + } +} diff --git a/DirectionType.java b/DirectionType.java new file mode 100644 index 0000000..95f37e8 --- /dev/null +++ b/DirectionType.java @@ -0,0 +1,6 @@ +public enum DirectionType { + Up, + Down, + Left, + Right, +} diff --git a/DopEnum.java b/DopEnum.java new file mode 100644 index 0000000..22f1a64 --- /dev/null +++ b/DopEnum.java @@ -0,0 +1,13 @@ +public enum DopEnum { + Two (2), + Three (3), + Four (4); + + private int number; + + DopEnum(int n){ + this.number = n; + } + + public int get_number() { return number; } +} diff --git a/DrawningDumpTruck.java b/DrawningDumpTruck.java new file mode 100644 index 0000000..5937cc0 --- /dev/null +++ b/DrawningDumpTruck.java @@ -0,0 +1,191 @@ +import java.awt.*; +import java.util.Random; +//import javax.swing.*; + +public class DrawningDumpTruck { + public EntityDumpTruck EntityDumpTruck; + + private EntityDumpTruck get_EntityDumpTruck() { return EntityDumpTruck; } + public DrawningWeels _drawingWeels = null; + + // Ширина окна + private Integer _pictureWidth; + + // Высота окна + private Integer _pictureHeight; + + // Левая координата прорисовки автомобиля + private Integer _startPosX; + + // Верхняя кооридната прорисовки автомобиля + private Integer _startPosY; + + // Ширина прорисовки самосвала + private final int _drawningDumpTruckWidth = 116; + + // Высота прорисовки самосвала + private final int _drawingDumpTruckHeight = 100; + Random random = new Random(); + + public void Init(int speed, double weight, Color bodyColor, Color additionalColor, Boolean body, Boolean tent) + { + EntityDumpTruck = new EntityDumpTruck(); + EntityDumpTruck.Init(speed, weight, bodyColor, additionalColor, body, tent); + _pictureWidth = null; + _pictureHeight = null; + _startPosX = null; + _startPosY = null; + _drawingWeels = new DrawningWeels(random.nextInt(2, 5)); + + } + + public Boolean SetPictureSize(int width, int height) + { + if (_drawningDumpTruckWidth > width || _drawingDumpTruckHeight > height) + { + return false; + } + + if (_pictureWidth != null && width != _pictureWidth || _pictureHeight != null && height != _pictureHeight) + { + if (_startPosX + _drawningDumpTruckWidth > width) + { + _startPosX -= _drawningDumpTruckWidth; + } + + if (_startPosY + _drawingDumpTruckHeight > height) + { + _startPosY -= _drawingDumpTruckHeight; + } + } + + _pictureWidth = width; + _pictureHeight = height; + return true; + } + + public void SetPosition(int x, int y) + { + if (_pictureHeight == null|| _pictureWidth == null) + { + return; + } + + if (x < 0) + { + x = 0; + } + if (x + _drawningDumpTruckWidth > _pictureWidth) + { + x = _pictureWidth - _drawningDumpTruckWidth; + } + if (y < 0) + { + y = 0; + } + if (y + _drawingDumpTruckHeight > _pictureHeight) + { + y = _pictureHeight - _drawingDumpTruckHeight; + + } + + _startPosX = x; + _startPosY = y; + + } + + public Boolean MoveTransport(DirectionType direction) + { + if (EntityDumpTruck == null || _startPosX == null || _startPosY == null) + { + return false; + } + + switch (direction) + { + //влево + case DirectionType.Left: + if (_startPosX - _drawningDumpTruckWidth > 0) + { + _startPosX -= (int)EntityDumpTruck.Step; + } + return true; + //вверх + case DirectionType.Up: + if (_startPosY - _drawingDumpTruckHeight > 0) + { + _startPosY -= (int)EntityDumpTruck.Step; + } + return true; + // вправо + case DirectionType.Right: + if (_startPosX + _drawningDumpTruckWidth + (int)EntityDumpTruck.Step < _pictureWidth) + { + _startPosX += (int)EntityDumpTruck.Step; + } + return true; + //вниз + case DirectionType.Down: + if (_startPosY + _drawingDumpTruckHeight + (int)EntityDumpTruck.Step < _pictureHeight) + { + _startPosY += (int)EntityDumpTruck.Step; + } + return true; + default: + return false; + } + } + + public void DrawTransport(Graphics2D g) + { + if (EntityDumpTruck == null || _startPosX == null || _startPosY == null) + { + return; + } + + g.setPaint(Color.BLACK); + + if (EntityDumpTruck.Body) + { + int[] x_b = {_startPosX, _startPosX + 77, _startPosX + 77, _startPosX + 20}; + int[] y_b = {_startPosY + 15, _startPosY + 15, _startPosY + 50, _startPosY + 50}; + + g.setPaint(Color.BLACK); + g.drawPolygon(x_b, y_b, 4); + g.setPaint(EntityDumpTruck.AdditionalColor); + g.fillPolygon(x_b, y_b, 4); + } + + if (EntityDumpTruck.Tent && EntityDumpTruck.Body) + { + int[] x_t = {_startPosX, _startPosX + 39, _startPosX + 77}; + int[] y_t = {_startPosY + 13, _startPosY, _startPosY + 13}; + + g.setPaint(Color.BLACK); + g.drawPolygon(x_t, y_t, 3); + g.setPaint(EntityDumpTruck.AdditionalColor); + g.fillPolygon(x_t, y_t, 3); + } + + // Колёса + g.setPaint(Color.BLACK); + if (_drawingWeels != null){ + _drawingWeels.DrawningWeel(g, _startPosX, _startPosY); + } + + //Границы самосвала + g.drawRect( _startPosX + 10, _startPosY + 53, 100, 13); + g.drawRect( _startPosX + 80, _startPosY + 15, 30, 36); + g.drawRect(_startPosX + 85, _startPosY + 20, 20, 20); + + // Кузов + g.setPaint(EntityDumpTruck.BodyColor); + g.fillRect(_startPosX + 10, _startPosY + 53, 100, 13); + g.fillRect(_startPosX + 80, _startPosY + 15, 30, 36); + + //Окно + g.setPaint(Color.CYAN); + g.fillRect(_startPosX + 85, _startPosY + 20, 20, 20); + + } +} diff --git a/DrawningWeels.java b/DrawningWeels.java new file mode 100644 index 0000000..ddd4baf --- /dev/null +++ b/DrawningWeels.java @@ -0,0 +1,35 @@ +import java.awt.*; + +public class DrawningWeels { + + private int count; + DrawningWeels (int n){ + count = n; + } + public int get_countWheels(){ + return count; + } + + public void DrawningWeel (Graphics g, int x, int y){ + g.setColor(Color.BLACK); + //g.fillOval(x, y, 25, 25); + + switch (get_countWheels()){ + case 2: + g.fillOval(x + 10, y + 67, 25, 25); + g.fillOval(x + 85, y + 67, 25, 25); + break; + case 3: + g.fillOval(x + 10, y + 67, 25, 25); + g.fillOval(x + 38, y + 67, 25, 25); + g.fillOval(x + 85, y + 67, 25, 25); + break; + case 4: + g.fillOval(x + 5, y + 67, 25, 25); + g.fillOval(x + 32, y + 67, 25, 25); + g.fillOval(x + 61, y + 67, 25, 25); + g.fillOval(x + 88, y + 67, 25, 25); + break; + } + } +} diff --git a/EntityDumpTruck.java b/EntityDumpTruck.java new file mode 100644 index 0000000..0edb60f --- /dev/null +++ b/EntityDumpTruck.java @@ -0,0 +1,35 @@ +import java.awt.*; + +public class EntityDumpTruck { + public int Speed; + private int get_Speed(){ return Speed; } + + public double Weight; + private double get_Weight(){return Weight; } + + public Color BodyColor; + private Color get_BodyColor(){ return BodyColor; } + + public Color AdditionalColor; + private Color get_AdditionalColor(){ return AdditionalColor; } + + public Boolean Body; + private Boolean get_Body() { return Body; } + + public Boolean Tent; + private Boolean get_Tent() { return Tent; } + + public double Step; + + public void Init(int speed, double weight, Color bodyColor, Color additionalColor, Boolean body, Boolean tent) + { + Speed = speed; + Weight = weight; + BodyColor = bodyColor; + AdditionalColor = additionalColor; + Body = body; + Tent = tent; + Step = speed * 100 / weight; + } + +} diff --git a/FormDumpTruck.java b/FormDumpTruck.java new file mode 100644 index 0000000..3028df0 --- /dev/null +++ b/FormDumpTruck.java @@ -0,0 +1,129 @@ +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.ComponentAdapter; +import java.awt.event.ComponentEvent; +import javax.swing.*; +import java.util.Random; + +public class FormDumpTruck extends JFrame{ + + private CanvasDumpTruck _canvasDumpTruck = new CanvasDumpTruck(); + + // Размер формы + private Dimension dimension; + // Название формы + private String title; + + private JButton CreateButton = new JButton("Создать самосвал"); + private JButton UpButton = new JButton(); + private JButton DownButton = new JButton();; + private JButton LeftButton = new JButton();; + private JButton RightButton = new JButton(); + + public FormDumpTruck(String title, Dimension dimension) { + this.title = title; + this.dimension = dimension; + } + + public void Form() { + CreateButton.setName("CREATE"); + setMinimumSize(dimension); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + UpButton.setName("UP"); + Icon iconUp = new ImageIcon("C:\\Users\\Antonovs\\Downloads\\ArrowUp.png"); + UpButton.setIcon(iconUp); + + DownButton.setName("DOWN"); + Icon iconDown = new ImageIcon("C:\\Users\\Antonovs\\Downloads\\ArrowDown.png"); + DownButton.setIcon(iconDown); + + LeftButton.setName("LEFT"); + Icon iconLeft = new ImageIcon("C:\\Users\\Antonovs\\Downloads\\ArrowLeft.png"); + LeftButton.setIcon(iconLeft); + + RightButton.setName("RIGHT"); + Icon iconRight = new ImageIcon("C:\\Users\\Antonovs\\Downloads\\ArrowRight.png"); + RightButton.setIcon(iconRight); + + CreateButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + Random random = new Random(); + _canvasDumpTruck._drawningDumpTruck = new DrawningDumpTruck(); + Color bodyColor = 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)); + _canvasDumpTruck._drawningDumpTruck.Init(random.nextInt(1000, 3000), random.nextInt(1000, 3000), + bodyColor, additionalColor, + random.nextBoolean(), random.nextBoolean()); + + _canvasDumpTruck._drawningDumpTruck.SetPictureSize(getWidth(), getHeight()); + _canvasDumpTruck._drawningDumpTruck.SetPosition(random.nextInt(10, 100), random.nextInt(10, 100)); + _canvasDumpTruck.repaint(); + } + }); + + ActionListener actionListener = new ActionListener() { + @Override + public void actionPerformed(ActionEvent event) { + if (_canvasDumpTruck._drawningDumpTruck == null) return; + boolean result = false; + switch ((((JButton) (event.getSource())).getName())) { + case "UP": + result = _canvasDumpTruck._drawningDumpTruck.MoveTransport(DirectionType.Up); + break; + case "DOWN": + result = _canvasDumpTruck._drawningDumpTruck.MoveTransport(DirectionType.Down); + break; + case "LEFT": + result = _canvasDumpTruck._drawningDumpTruck.MoveTransport(DirectionType.Left); + break; + case "RIGHT": + result = _canvasDumpTruck._drawningDumpTruck.MoveTransport(DirectionType.Right); + break; + } + if (result) { + _canvasDumpTruck.repaint(); + } + } + }; + + UpButton.addActionListener(actionListener); + DownButton.addActionListener(actionListener); + LeftButton.addActionListener(actionListener); + RightButton.addActionListener(actionListener); + + setSize(dimension.width, dimension.height); + setLayout(null); + _canvasDumpTruck.setBounds(0, 0, getWidth(), getHeight()); + CreateButton.setBounds(10, getHeight() - 90, 160, 40); + UpButton.setBounds(getWidth() - 150, getHeight() - 170, 60, 60); + DownButton.setBounds(getWidth() - 140, getHeight() - 100, 60, 60); + RightButton.setBounds(getWidth() - 85, getHeight() - 100, 60, 60); + LeftButton.setBounds(getWidth() - 215, getHeight() - 100, 60, 60); + add(CreateButton); + add(UpButton); + add(DownButton); + add(RightButton); + add(LeftButton); + add(_canvasDumpTruck); + pack(); + setVisible(true); + + addComponentListener(new ComponentAdapter() { + public void componentResized(ComponentEvent e) { + int Width = getWidth(); + int Height = getHeight(); + if (_canvasDumpTruck._drawningDumpTruck != null) + _canvasDumpTruck._drawningDumpTruck.SetPictureSize(Width, Height); + _canvasDumpTruck.setBounds(0, 0, getWidth(), getHeight()); + CreateButton.setBounds(10, getHeight() - 90, 160, 40); + UpButton.setBounds(getWidth() - 150, getHeight() - 170, 60, 60); + DownButton.setBounds(getWidth() - 150, getHeight() - 100, 60, 60); + RightButton.setBounds(getWidth() - 85, getHeight() - 100, 60, 60); + LeftButton.setBounds(getWidth() - 215, getHeight() - 100, 60, 60); + } + }); + } +} diff --git a/Main.java b/Main.java new file mode 100644 index 0000000..99983af --- /dev/null +++ b/Main.java @@ -0,0 +1,8 @@ +import java.awt.*; + +public class Main { + public static void main(String[] args) { + FormDumpTruck formDumpTruck = new FormDumpTruck("Самосвал", new Dimension(900, 700)); + formDumpTruck.Form(); + } +}