Invention1.java
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  }