diff --git a/DrawningCrossRollers.java b/DrawningCrossRollers.java new file mode 100644 index 0000000..0292766 --- /dev/null +++ b/DrawningCrossRollers.java @@ -0,0 +1,91 @@ +import java.awt.*; + +public class DrawningCrossRollers implements IDrawningRollers{ + 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 DrawningCrossRollers(int count, Color colorRollers){ + setRollersCount(count); + this.colorRollers = colorRollers; + } + + public void DrawRollers(Graphics2D 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.fillRect((int)_startPosX + 5 + 9, (int)_startPosY + 60 + 5, 5, 14); + // горизонтальное перекрестие + g.fillRect((int)_startPosX + 5 + 5, (int)_startPosY + 60 + 9, 13, 5); + + 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.fillRect((int)_startPosX + 83 + 9, (int)_startPosY + 60 + 5, 5, 14); + // горизонтальное перекрестие + g.fillRect((int)_startPosX + 83 + 5, (int)_startPosY + 60 + 9, 13, 5); + + + // Малые катки - всегда + 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.fillRect((int)_startPosX + 43 + 3, (int)_startPosY + 58 + 2, 1, 3); + // горизонтальное перекрестие + g.fillRect((int)_startPosX + 43 + 2, (int)_startPosY + 58 + 3, 3, 1); + + 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); + // вертикальное перекрестие + g.fillRect((int)_startPosX + 61 + 3, (int)_startPosY + 58 + 2, 1, 3); + // горизонтальное перекрестие + g.fillRect((int)_startPosX + 61 + 2, (int)_startPosY + 58 + 3, 3, 1); + + // Средние катки - не всегда + 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); + // вертикальное перекрестие + g.fillRect((int)_startPosX + 33 + 4, (int)_startPosY + 73 + 2, 2, 6); + // горизонтальное перекрестие + g.fillRect((int)_startPosX + 33 + 2, (int)_startPosY + 73 + 4, 6, 2); + 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.fillRect((int)_startPosX + 68 + 4, (int)_startPosY + 73 + 2, 2, 6); + // горизонтальное перекрестие + g.fillRect((int)_startPosX + 68 + 2, (int)_startPosY + 73 + 4, 6, 2); + } + + // Центры крупных катков + 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/DrawningRollers.java b/DrawningRollers.java index f3b8a41..4ccfb8a 100644 --- a/DrawningRollers.java +++ b/DrawningRollers.java @@ -1,7 +1,6 @@ import java.awt.*; -import java.util.Random; -public class DrawningRollers { +public class DrawningRollers implements IDrawningRollers { private RollersCount rollersCount; private Color colorRollers; diff --git a/DrawningSquaredRollers.java b/DrawningSquaredRollers.java new file mode 100644 index 0000000..f4d9861 --- /dev/null +++ b/DrawningSquaredRollers.java @@ -0,0 +1,128 @@ +import java.awt.*; + +public class DrawningSquaredRollers implements IDrawningRollers { + 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 DrawningSquaredRollers(int count, Color colorRollers){ + setRollersCount(count); + this.colorRollers = colorRollers; + } + + public void DrawRollers(Graphics2D 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); + + // Узор для больших катков + //1 + Polygon bigRomb = new Polygon( + new int[]{(int)_startPosX + 5, (int)_startPosX + 5 + 11, (int)_startPosX + 5 + 22, (int)_startPosX + 5 + 11}, + new int[]{(int)_startPosY + 60 + 11, (int)_startPosY + 60, (int)_startPosY + 60 + 11, (int)_startPosY + 60 + 22}, + 4 + ); + Polygon bigCube = new Polygon( + new int[]{(int)_startPosX + 5 + 5, (int)_startPosX + 5 + 22 - 5, (int)_startPosX + 5 + 22 - 5, (int)_startPosX + 5 + 5}, + new int[]{(int)_startPosY + 60 + 5, (int)_startPosY + 60 + 5, (int)_startPosY + 60 + 22 - 5, (int)_startPosY + 60 + 22 - 5}, + 4 + ); + g.drawPolygon(bigRomb); + g.drawPolygon(bigCube); + // Сдвиг + bigRomb.translate(78,0); + bigCube.translate(78,0); + //2 + 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.drawPolygon(bigRomb); + g.drawPolygon(bigCube); + + // Малые катки - всегда + // + Polygon smallRomb = new Polygon( + new int[]{(int)_startPosX + 43, (int)_startPosX + 43 + 3, (int)_startPosX + 43 + 6, (int)_startPosX + 43 + 3}, + new int[]{(int)_startPosY + 58 + 3, (int)_startPosY + 58, (int)_startPosY + 58 + 3, (int)_startPosY + 58 + 6}, + 4 + ); + Polygon smallCube = new Polygon( + new int[]{(int)_startPosX + 43 + 1, (int)_startPosX + 43 + 6 - 1, (int)_startPosX + 43 + 6 - 1, (int)_startPosX + 43 + 1}, + new int[]{(int)_startPosY + 58 + 1, (int)_startPosY + 58 + 6 - 1, (int)_startPosY + 58 + 6 - 1, (int)_startPosY + 58 + 1}, + 4 + ); + // 1 + 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.drawPolygon(smallRomb); + g.drawPolygon(smallCube); + // Сдвиг + smallRomb.translate(18,0); + smallCube.translate(18,0); + // 2 + 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); + g.drawPolygon(smallRomb); + g.drawPolygon(smallCube); + + + Polygon middleRomb = new Polygon( + new int[]{(int)_startPosX + 33, (int)_startPosX + 33 + 5, (int)_startPosX + 33 + 10, (int)_startPosX + 33 + 5}, + new int[]{(int)_startPosY + 73 + 5, (int)_startPosY + 73, (int)_startPosY + 73 + 5, (int)_startPosY + 73 + 10}, + 4 + ); + Polygon middleCube = new Polygon( + new int[]{(int)_startPosX + 33 + 2, (int)_startPosX + 33 + 8, (int)_startPosX + 33 + 8, (int)_startPosX + 33 + 2}, + new int[]{(int)_startPosY + 73 + 2, (int)_startPosY + 73 + 2, (int)_startPosY + 73 + 8, (int)_startPosY + 73 + 8}, + 4 + ); + // Средние катки - не всегда + 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); + + g.drawPolygon(middleRomb); + g.drawPolygon(middleCube); + + case Five: + // Сдвиг + middleRomb.translate(35,0); + middleCube.translate(35,0); + + + 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.drawPolygon(middleRomb); + g.drawPolygon(middleCube); + } + + // Центры крупных катков + 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 7deb577..bc268bd 100644 --- a/DrawningTracktor.java +++ b/DrawningTracktor.java @@ -13,13 +13,13 @@ public class DrawningTracktor { protected int _tracktorWidth = 110; // Ширина отрисовки трактора protected int _tracktorHeight = 87; // Высота отрисовки трактора - private DrawningRollers drawningRollers; + private IDrawningRollers drawningRollers; // Инициализация свойств public DrawningTracktor(int speed, float weight, Color bodyColor, int countRollers) { Tracktor = new EntityTracktor(speed, weight, bodyColor); - drawningRollers = new DrawningRollers(countRollers, bodyColor); + drawningRollers = RollersType.random(countRollers, bodyColor); } protected DrawningTracktor(int speed, float weight, Color bodyColor, int countRollers, int tracktorWidth, int tracktorHeight){ @@ -138,7 +138,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); - drawningRollers.DrawRollers(g,_startPosX, _startPosY); + drawningRollers.DrawRollers(g, (int) _startPosX, (int) _startPosY); } // Смена границ формы отрисовки diff --git a/IDrawningRollers.java b/IDrawningRollers.java new file mode 100644 index 0000000..7a739d2 --- /dev/null +++ b/IDrawningRollers.java @@ -0,0 +1,6 @@ +import java.awt.*; + +public interface IDrawningRollers { + void setRollersCount(int count); + void DrawRollers(Graphics2D g, float _startPosX, float _startPosY); +} diff --git a/RollersType.java b/RollersType.java new file mode 100644 index 0000000..4890c43 --- /dev/null +++ b/RollersType.java @@ -0,0 +1,17 @@ +import java.awt.*; +import java.util.Random; + +public enum RollersType { + Standard, + Squared, + Cross; + + public static IDrawningRollers random(int rollersCount, Color bodyColor) { + return switch (new Random().nextInt(RollersType.values().length)) { + case 0 -> new DrawningRollers(rollersCount, bodyColor); + case 1 -> new DrawningSquaredRollers(rollersCount, bodyColor); + case 2 -> new DrawningCrossRollers(rollersCount, bodyColor); + default -> null; + }; + } +}