Invention1.java
1    /* 
2     * Program to paint an image subject to the following constraints: 
3     * 1. It uses at least 1 while statement in a non-trivial way 
4     * 2. It uses at least 1 if statement in a non-trivial way 
5     * 3. It features both circles and squares, all created from just 1 circle and 1 square - no rectangles 
6     * 4. It creates the exact same image every time it is run 
7     * 5. It is kinda interesting to look at 
8     */
9    
10   package npw;
11   
12   import painter.SPainter;
13   import shapes.SCircle;
14   import shapes.SSquare;
15   import javax.swing.*;
16   import java.awt.*;
17   
18   public class Invention1 {
19   
20       private void paintTheImage() {
21           SPainter painter = new SPainter("Deterministic Invention Stars", 600, 600);
22           int nrOfStars = 10; //paint 10 stars
23           //make square star object
24           int starSideLength = 10;
25           SSquare squareStar = new SSquare(starSideLength);
26           paintSky(painter, squareStar); //paint black sky
27           //make circle star object
28           int starRadius = 100;
29           SCircle circleSun = new SCircle(starRadius);
30           //paint the sun
31           paintSun(painter, circleSun);
32           paintStars(painter, nrOfStars, squareStar);
33       }
34   
35       private void paintSky(SPainter painter, SSquare squareStar) {
36           squareStar.expand(790);
37           painter.setColor(Color.BLACK);
38           painter.paint(squareStar);
39           squareStar.shrink(790); //make invariant
40       }
41   
42       private void paintSun(SPainter painter, SCircle circleSun) {
43           painter.setColor(Color.ORANGE);
44           painter.paint(circleSun);
45       }
46   
47       private void paintStars(SPainter painter, int nrOfStars, SSquare squareStar) {
48           painter.setColor(Color.WHITE);
49           int i = 1;
50           while ( i <= nrOfStars ) { //counter
51               if (i == 1) {
52                   paintFirstStar(painter, squareStar);
53               } else if (i == 2) {
54                   paintSecondStar(painter, squareStar);
55               } else if (i == 3) {
56                   paintThirdStar(painter, squareStar);
57               } else if (i == 4) {
58                   paintFourthStar(painter, squareStar);
59               } else if (i == 5) {
60                   paintFifthStar(painter, squareStar);
61               } else if (i == 6) {
62                   paintSixthStar(painter, squareStar);
63               } else if (i == 7) {
64                   paintSeventhStar(painter, squareStar);
65               } else if (i == 8) {
66                   paintEighthStar(painter, squareStar);
67               } else if (i == 9) {
68                   paintNinthStar(painter, squareStar);
69               } else {
70                   paintTenthStar(painter, squareStar);
71               }
72               i++;
73           }
74       }
75   
76       private void paintFirstStar(SPainter painter, SSquare squareStar) {
77           painter.mlt(270);
78           painter.mfd(270);
79           painter.paint(squareStar);
80           painter.tl(45);
81           painter.paint(squareStar);
82           painter.tr(45);
83           painter.mrt(270);
84           painter.mbk(270);
85       }
86   
87       private void paintSecondStar(SPainter painter, SSquare squareStar) {
88           painter.mlt(240);
89           painter.mfd(240);
90           painter.paint(squareStar);
91           painter.tl(45);
92           painter.paint(squareStar);
93           painter.tr(45);
94           painter.mrt(240);
95           painter.mbk(240);
96       }
97   
98       private void paintThirdStar(SPainter painter, SSquare squareStar) {
99           painter.mlt(200);
100          painter.mfd(200);
101          painter.paint(squareStar);
102          painter.tl(45);
103          painter.paint(squareStar);
104          painter.tr(45);
105          painter.mrt(200);
106          painter.mbk(200);
107      }
108  
109      private void paintFourthStar(SPainter painter, SSquare squareStar) {
110          painter.mlt(160);
111          painter.mfd(160);
112          painter.paint(squareStar);
113          painter.tl(45);
114          painter.paint(squareStar);
115          painter.tr(45);
116          painter.mrt(160);
117          painter.mbk(160);
118      }
119  
120      private void paintFifthStar(SPainter painter, SSquare squareStar) {
121          painter.mlt(120);
122          painter.mfd(120);
123          painter.paint(squareStar);
124          painter.tl(45);
125          painter.paint(squareStar);
126          painter.tr(45);
127          painter.mrt(120);
128          painter.mbk(120);
129      }
130  
131      private void paintSixthStar(SPainter painter, SSquare squareStar) {
132          painter.mrt(270);
133          painter.mfd(270);
134          painter.paint(squareStar);
135          painter.tl(45);
136          painter.paint(squareStar);
137          painter.tr(45);
138          painter.mlt(270);
139          painter.mbk(270);
140      }
141  
142      private void paintSeventhStar(SPainter painter, SSquare squareStar) {
143          painter.mrt(240);
144          painter.mfd(240);
145          painter.paint(squareStar);
146          painter.tl(45);
147          painter.paint(squareStar);
148          painter.tr(45);
149          painter.mlt(240);
150          painter.mbk(240);
151      }
152  
153      private void paintEighthStar(SPainter painter, SSquare squareStar) {
154          painter.mrt(200);
155          painter.mfd(200);
156          painter.paint(squareStar);
157          painter.tl(45);
158          painter.paint(squareStar);
159          painter.tr(45);
160          painter.mlt(200);
161          painter.mbk(200);
162      }
163  
164      private void paintNinthStar(SPainter painter, SSquare squareStar) {
165          painter.mrt(160);
166          painter.mfd(160);
167          painter.paint(squareStar);
168          painter.tl(45);
169          painter.paint(squareStar);
170          painter.tr(45);
171          painter.mlt(160);
172          painter.mbk(160);
173      }
174  
175      private void paintTenthStar(SPainter painter, SSquare squareStar) {
176          painter.mrt(120);
177          painter.mfd(120);
178          painter.paint(squareStar);
179          painter.tl(45);
180          painter.paint(squareStar);
181          painter.tr(45);
182          painter.mlt(120);
183          painter.mbk(120);
184      }
185  
186      // REQUIRED INFRASTRUCTURE
187      public Invention1() {
188          paintTheImage();
189      }
190  
191      public static void main(String[] args) {
192          SwingUtilities.invokeLater(new Runnable() {
193              public void run() {
194                  new npw.Invention1();
195              }
196          });
197      }
198  }