ColorfulAbstractGradient.java
|
package npw;
import painter.SPainter;
import shapes.SCircle;
import javax.swing.*;
import java.awt.*;
import java.util.Random;
import java.util.Scanner;
public class ColorfulAbstractGradient {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new ColorfulAbstractGradient();
}
});
}
public ColorfulAbstractGradient() {
paintTheImange();
}
private void paintTheImange() {
int width = getNumber("width");
int height = getNumber("height");
int colwidth = getNumber("column width");
SPainter painter = new SPainter("Colorful Abstract Gradient", width, height);
SCircle dot = new SCircle(5);
painter.mfd(height / 2);
painter.tl(90);
painter.mfd(width / 2 - 10);
painter.tl(90);
painterGradient(painter, dot, height, width, colwidth);
}
private static int getNumber(String prompt) {
String nss = JOptionPane.showInputDialog(null, prompt + "?");
Scanner scanner = new Scanner(nss);
return scanner.nextInt();
}
private void painterGradient(SPainter painter, SCircle dot, int height, int width, int colwidth) {
int cols = 0;
int nrofcols = (width / colwidth) - 2;
while (cols < nrofcols) {
nextCol(painter, colwidth);
paintColumn(painter, dot, height);
cols = cols + 1;
}
}
private void paintOneDot(SPainter painter, SCircle dot) {
painter.setColor(randomColor());
painter.paint(dot);
}
private void paintColumn(SPainter painter, SCircle dot, int height) {
int travel = 0;
int totalDistanceTraveled = 0;
while (totalDistanceTraveled < height - (dot.radius() * 3)) {
travel = randomDistance((height - totalDistanceTraveled) / 4);
totalDistanceTraveled = totalDistanceTraveled + travel;
painter.mfd(travel);
paintOneDot(painter, dot);
}
painter.mbk(totalDistanceTraveled);
}
private void nextCol(SPainter painter, int colwidth) {
painter.tl(90);
painter.mfd(colwidth);
painter.tr(90);
}
private int randomDistance(int maxDistance) {
Random rgen = new Random();
return rgen.nextInt(maxDistance);
}
private static Color randomColor() {
Random rgen = new Random();
int r = rgen.nextInt(256);
int g = rgen.nextInt(256);
int b = rgen.nextInt(256);
return new Color(r, g, b);
}
}