diff --git a/DrawningRollers.java b/DrawningRollers.java new file mode 100644 index 0000000..10d8a2e --- /dev/null +++ b/DrawningRollers.java @@ -0,0 +1,65 @@ +import java.awt.*; +import java.util.Random; + +public class DrawningRollers { + private RollersCount rollersCount; + private Color colorRollers; + + public void setRollersCount(int count){ + switch (count) { + case 4 -> rollersCount = RollersCount.Four; + case 5 -> rollersCount = RollersCount.Five; + case 6 -> rollersCount = RollersCount.Six; + default -> rollersCount = RollersCount.Four; + } + } + + public void Init(int count, Color colorRollers){ + setRollersCount(count); + this.colorRollers = colorRollers; + } + + public void DrawRollers(Graphics g, float _startPosX, float _startPosY){ + Color penColor = Color.BLACK; + Color mainColor = colorRollers==null ? Color.LIGHT_GRAY : colorRollers; + + // Крупные катки - всегда + g.setColor(mainColor); + g.fillOval((int)_startPosX + 5, (int)_startPosY + 60, 22, 22); + g.setColor(penColor); + g.drawOval((int)_startPosX + 5, (int)_startPosY + 60, 22, 22); + g.setColor(mainColor); + g.fillOval((int)_startPosX + 83, (int)_startPosY + 60, 22, 22); + g.setColor(penColor); + g.drawOval((int)_startPosX + 83, (int)_startPosY + 60, 22, 22); + + // Малые катки - всегда + g.setColor(mainColor); + g.fillOval((int)_startPosX + 43, (int)_startPosY + 58, 6, 6); + g.setColor(penColor); + g.drawOval((int)_startPosX + 43, (int)_startPosY + 58, 6, 6); + g.setColor(mainColor); + g.fillOval((int)_startPosX + 61, (int)_startPosY + 58, 6, 6); + g.setColor(penColor); + g.drawOval((int)_startPosX + 61, (int)_startPosY + 58, 6, 6); + + // Средние катки - не всегда + switch (rollersCount){ + case Six: + g.setColor(mainColor); + g.fillOval((int)_startPosX + 33, (int)_startPosY + 73, 10, 10); + g.setColor(penColor); + g.drawOval((int)_startPosX + 33, (int)_startPosY + 73, 10, 10); + case Five: + g.setColor(mainColor); + g.fillOval((int)_startPosX + 68, (int)_startPosY + 73, 10, 10); + g.setColor(penColor); + g.drawOval((int)_startPosX + 68, (int)_startPosY + 73, 10, 10); + } + + // Центры крупных катков + g.setColor(Color.BLACK); + g.fillOval((int)_startPosX + 13, (int)_startPosY + 68, 6, 6); + g.fillOval((int)_startPosX + 91, (int)_startPosY + 68, 6, 6); + } +} diff --git a/DrawningTracktor.java b/DrawningTracktor.java index cb25994..e06d3b6 100644 --- a/DrawningTracktor.java +++ b/DrawningTracktor.java @@ -13,11 +13,15 @@ public class DrawningTracktor { private final int _tracktorWidth = 110; // Ширина отрисовки трактора private final int _tracktorHeight = 87; // Высота отрисовки трактора + private DrawningRollers drawningRollers; + // Инициализация свойств - public void Init(int speed, float weight, Color bodyColor) + public void Init(int speed, float weight, Color bodyColor, int countRollers) { Tracktor = new EntityTracktor(); Tracktor.Init(speed, weight, bodyColor); + drawningRollers = new DrawningRollers(); + drawningRollers.Init(countRollers, bodyColor); } // Установка позиции Трактора @@ -129,44 +133,7 @@ public class DrawningTracktor { g.drawLine((int)_startPosX + 1, (int)_startPosY + 65, (int)_startPosX + 1, (int)_startPosY + 75); g.drawLine((int)_startPosX + 110, (int)_startPosY + 65, (int)_startPosX + 110, (int)_startPosY + 75); - // Крупные катки - g.setColor(Color.LIGHT_GRAY); - g.fillOval((int)_startPosX + 5, (int)_startPosY + 60, 22, 22); - g.setColor(penColor); - g.drawOval((int)_startPosX + 5, (int)_startPosY + 60, 22, 22); - g.setColor(Color.LIGHT_GRAY); - g.fillOval((int)_startPosX + 83, (int)_startPosY + 60, 22, 22); - g.setColor(penColor); - g.drawOval((int)_startPosX + 83, (int)_startPosY + 60, 22, 22); - - // Средние катки - g.setColor(Color.LIGHT_GRAY); - g.fillOval((int)_startPosX + 33, (int)_startPosY + 73, 10, 10); - g.setColor(penColor); - g.drawOval((int)_startPosX + 33, (int)_startPosY + 73, 10, 10); - g.setColor(Color.LIGHT_GRAY); - g.fillOval((int)_startPosX + 50, (int)_startPosY + 73, 10, 10); - g.setColor(penColor); - g.drawOval((int)_startPosX + 50, (int)_startPosY + 73, 10, 10); - g.setColor(Color.LIGHT_GRAY); - g.fillOval((int)_startPosX + 68, (int)_startPosY + 73, 10, 10); - g.setColor(penColor); - g.drawOval((int)_startPosX + 68, (int)_startPosY + 73, 10, 10); - - // Малые катки - g.setColor(Color.LIGHT_GRAY); - g.fillOval((int)_startPosX + 43, (int)_startPosY + 58, 6, 6); - g.setColor(penColor); - g.drawOval((int)_startPosX + 43, (int)_startPosY + 58, 6, 6); - g.setColor(Color.LIGHT_GRAY); - g.fillOval((int)_startPosX + 61, (int)_startPosY + 58, 6, 6); - g.setColor(penColor); - g.drawOval((int)_startPosX + 61, (int)_startPosY + 58, 6, 6); - - // Центры крупных катков - g.setColor(Color.BLACK); - g.fillOval((int)_startPosX + 13, (int)_startPosY + 68, 6, 6); - g.fillOval((int)_startPosX + 91, (int)_startPosY + 68, 6, 6); + drawningRollers.DrawRollers(g,_startPosX, _startPosY); } // Смена границ формы отрисовки diff --git a/FormTracktor.java b/FormTracktor.java index b0d7973..3d092b2 100644 --- a/FormTracktor.java +++ b/FormTracktor.java @@ -1,5 +1,9 @@ import javax.swing.*; import java.awt.*; +import java.awt.event.ComponentAdapter; +import java.awt.event.ComponentEvent; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; import java.util.Random; public class FormTracktor extends JFrame { @@ -28,7 +32,8 @@ public class FormTracktor extends JFrame { _tracktor.Init( rnd.nextInt(100, 300), rnd.nextInt(1000, 2000), - new Color(rnd.nextInt(0, 256), rnd.nextInt(0, 256), rnd.nextInt(0, 256)) + new Color(rnd.nextInt(0, 256), rnd.nextInt(0, 256), rnd.nextInt(0, 256)), + rnd.nextInt(3,8) ); _tracktor.SetPosition( rnd.nextInt(10, 100), @@ -38,7 +43,6 @@ public class FormTracktor extends JFrame { speedLabel.setText("Скорость: " + _tracktor.getTracktor().getSpeed()); weightLabel.setText("Вес: " + _tracktor.getTracktor().getWeight()); colorLabel.setText("Цвет: " + String.format("%h",_tracktor.getTracktor().getBodyColor())); - repaint(); }); @@ -69,6 +73,17 @@ public class FormTracktor extends JFrame { repaint(); } }); + + pictureBox.addComponentListener(new ComponentAdapter() { + @Override + public void componentResized(ComponentEvent e) { + super.componentResized(e); + if (_tracktor != null){ + _tracktor.ChangeBorders(e.getComponent().getWidth(), e.getComponent().getHeight()); + repaint(); + } + } + }); } @Override diff --git a/RollersCount.java b/RollersCount.java new file mode 100644 index 0000000..7b9cdbe --- /dev/null +++ b/RollersCount.java @@ -0,0 +1,5 @@ +public enum RollersCount { + Four, + Five, + Six +}