HirstDots.java
package assignment4;

import painter.SPainter;
import shapes.SCircle;

import javax.swing.*;
import java.awt.*;
import java.util.Scanner;

public class HirstDots {
    public HirstDots() {
        paintTheImage();
    }
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new HirstDots();
            }
        });
    }

    private void paintTheImage(){

        int width = getNumber("width");
        int height = getNumber("height");
        int colWidth = 20;

        SPainter painter = new SPainter("Hirst Dots", width, height);
        SCircle dot = new SCircle(5);

        painter.mfd(height/2);
        painter.tl(90);
        painter.mfd(width/2 - 10);
        painter.tl(90);

        paintGradient(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 paintGradient(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 = Distance;
            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);
    }

    int Distance = 50;

    private static Color randomColor(){
        int r = (int)(Math.random()*256);
        int g = (int)(Math.random()*256);
        int b = (int)(Math.random()*256);
        return new Color(r,g,b);
    }

}