ColorfulAbstractGradient.java
1    package npw;
2    
3    import painter.SPainter;
4    import shapes.SCircle;
5    
6    import javax.swing.*;
7    import java.awt.*;
8    import java.util.Random;
9    import java.util.Scanner;
10   
11   public class ColorfulAbstractGradient {
12   
13       public static void main(String[] args) {
14               SwingUtilities.invokeLater(ColorfulAbstractGradient::new);
15           }
16   
17       public ColorfulAbstractGradient() {
18           paintTheImage();
19       }
20   
21       private void paintTheImage(){
22           int width = getNumber("width");
23           int height = getNumber("height");
24           int dotSpace = getNumber("horizontal space between dots");
25           SPainter painter = new SPainter("Colorful Abstract Gradient", width, height);
26           SCircle dot = new SCircle(5);
27           painter.mfd(height/2.0);
28           painter.tl();
29           painter.mfd(width/2.0);
30           painter.tl();
31           paintGradient(painter, dot, height, width, dotSpace);
32       }
33   
34       private static int getNumber(String prompt) {
35           String nss = JOptionPane.showInputDialog(null,prompt+"?");
36           Scanner scanner = new Scanner(nss);
37           return scanner.nextInt();
38       }
39   
40       private void paintGradient(SPainter painter, SCircle dot, int height, int width, int dotSpace){
41   
42           double colWidth = dot.diameter() + dotSpace;
43           int nrOfCols = (int) Math.floor(( width / colWidth )) - 1;
44           int cols = 0;
45           while (cols < nrOfCols){
46               nextCol(painter, dot, dotSpace);
47               paintColumn(painter, dot, height);
48               cols = cols + 1;
49           }
50       }
51   
52       private void paintOneDot(SPainter painter, SCircle dot){
53           painter.setColor(randomColor());
54           painter.paint(dot);
55       }
56   
57       private static Color randomColor(){
58           Random rgen = new Random();
59           int r = rgen.nextInt(256);
60           int g = rgen.nextInt(256);
61           int b = rgen.nextInt(256);
62           return new Color(r,g,b);
63       }
64   
65       private void paintColumn(SPainter painter, SCircle dot, int height) {
66           int totalDistanceTraveled = 0;
67           while(totalDistanceTraveled < height - (dot.radius() * 3)) {
68               int travel = randomDistance((height - totalDistanceTraveled) / 4);
69               totalDistanceTraveled = totalDistanceTraveled + travel;
70               painter.mfd(travel);
71               paintOneDot(painter, dot);
72           }
73           painter.mbk(totalDistanceTraveled);
74       }
75   
76       private void nextCol(SPainter painter, SCircle dot, int dotSpace){
77           painter.tl();
78           painter.mfd(dot.diameter() + dotSpace);
79           painter.tr();
80       }
81   
82       private int randomDistance(int maxDistance){
83           Random rgen = new Random();
84           return rgen.nextInt(maxDistance);
85       }
86   
87   
88   
89   
90   }