|
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 }