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 HirstDots { 12 13 public static void main(String[] args) { 14 SwingUtilities.invokeLater(HirstDots::new); 15 } 16 17 public HirstDots() { 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 int dotSpace2 = getNumber("vertical space between dots"); 26 SPainter painter = new SPainter("Hirst Dot", width, height); 27 SCircle dot = new SCircle(5); 28 painter.mfd(height/2.0); 29 painter.tl(); 30 painter.mfd(width/2.0); 31 painter.tl(); 32 paintGradient(painter, dot, height, width, dotSpace, dotSpace2); 33 } 34 35 private static int getNumber(String prompt) { 36 String nss = JOptionPane.showInputDialog(null,prompt+"?"); 37 Scanner scanner = new Scanner(nss); 38 return scanner.nextInt(); 39 } 40 41 private void paintGradient(SPainter painter, SCircle dot, int height, int width, int dotSpace, int vertical){ 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, vertical); 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, int vertical) { 66 int totalDistanceTraveled = 0; 67 while(totalDistanceTraveled < height - (dot.radius() * 3)) { 68 int travel = vertical; 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 }