1 2 package npw; 3 4 5 import painter.SPainter; 6 import shapes.SCircle; 7 import shapes.SSquare; 8 import javax.swing.*; 9 import java.awt.*; 10 11 public class Invention1 { 12 13 public static void main(String[] args) { 14 SwingUtilities.invokeLater(new Runnable() { 15 public void run() { 16 new Invention1(); 17 } 18 }); 19 } 20 21 public Invention1() { 22 paintTheImage(); 23 } 24 25 private void paintTheImage() { 26 27 //Information needed. 28 int canvasSide = 900; 29 int columnLength = (canvasSide / 5); 30 int nrOfColumns = 30; 31 int s = 0; 32 int e = 0; 33 34 35 SPainter painter = new SPainter("Invention1", canvasSide - columnLength, canvasSide); 36 SCircle circle2 = new SCircle(30); 37 SCircle inCircle; 38 SSquare square = new SSquare(100); 39 inCircle = square.inscribingCircle(); 40 41 42 43 //Move the painter to the starting position. 44 painter.tr(); 45 painter.mbk((canvasSide / 2) - square.side()); 46 painter.tl(); 47 painter.mbk((canvasSide / 2) - square.side()); 48 painter.tr(); 49 50 //Paint the picture! 51 paintRows(nrOfColumns, s, e, painter, inCircle, square, circle2); 52 } 53 54 //Paint one circle box. 55 private void paintOnePinkBox(SPainter painter, SSquare inSquare,SCircle circle, SCircle circle2) { 56 57 painter.setColor (new Color ( 74, 21, 34)); 58 painter.paint(inSquare); 59 painter.mfd(3 * circle.diameter()); 60 painter.setColor (new Color ( 237, 174, 145)); 61 62 63 } 64 65 //Paint the other one 66 private void paintOneYellowBox(SPainter painter, SSquare inCircle, SCircle circle, SCircle circle2) { 67 68 painter.setColor (new Color ( 237, 174, 145)); 69 painter.paint(circle2); 70 71 painter.mfd(circle.diameter()); 72 } 73 74 //While loop that paints the Pink box 75 76 private void paintColumnBoxes(int nrOfColumns, int i, SPainter painter, SCircle circle, SSquare inSquare, SCircle circle2) { 77 while (i < (nrOfColumns / 3)) { 78 paintOnePinkBox(painter, inSquare, circle, circle2); 79 i = i + 1; 80 } 81 82 //The painter moves from left to right and starts a new line! 83 84 painter.mbk(nrOfColumns * circle.diameter()); 85 } 86 87 //While loop that paints the yellow box and moves painter 88 89 private void paintOtherColumnBoxes(int nrOfColumns, int i, SPainter painter, SCircle circle, SSquare inSquare, SCircle circle2) { 90 while (i < (nrOfColumns / 2)) { 91 painter.mfd(circle.diameter()); 92 paintOneYellowBox(painter, inSquare, circle, circle2); 93 i = i + 1; 94 } 95 painter.mbk(nrOfColumns * circle.diameter()); 96 } 97 98 private void paintOneRow(int nrOfColumns, int i, SPainter painter, SCircle circle, SSquare inSquare, SCircle circle2) { 99 paintColumnBoxes(nrOfColumns, i, painter, circle, inSquare, circle2); 100 paintOtherColumnBoxes(nrOfColumns, i, painter, circle, inSquare, circle2); 101 } 102 103 private void paintRows(int nrOfColumns, int v, int i, SPainter painter, SCircle circle, SSquare inSquare, SCircle circle2) { 104 while (v < nrOfColumns) { 105 106 //Shift the odd-numbered rows. 107 // modulus operator keeps dividing v by two until it cant divide any more 108 // remainder of 1(odd) or 0 (even) 109 110 if (v % 2 != 0) { 111 painter.mfd(circle.radius()); //This line makes the shift. 112 paintOneRow(nrOfColumns, i, painter, circle, inSquare, circle2); 113 painter.mbk(circle.radius()); //This line fixes the shift for the next row. 114 painter.tl(); 115 painter.mfd(circle.diameter()); 116 painter.tr(); 117 } else { 118 paintOneRow(nrOfColumns, i, painter, circle, inSquare, circle2); 119 painter.tl(); 120 painter.mfd(circle.diameter()); 121 painter.tr(); 122 } 123 v = v + 1; 124 } 125 } 126 127 128 }