Invention1.java
package npw;

import painter.SPainter;
import shapes.SCircle;
import shapes.SSquare;

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

public class Invention1{
    private void paintTheImage() {
        int nrOfRows = 10;
        int nrOfColumns = 10;
        int sizeOfSquare =40;
        int height = nrOfRows * sizeOfSquare;
        int width = nrOfColumns * sizeOfSquare;
        SPainter miro = new SPainter("Invention1",width+50,height+50);
        miro.setBrushWidth(4);
        SSquare square = new SSquare(sizeOfSquare);
        SCircle circle=new SCircle(sizeOfSquare/2);
        paintRectangle(miro,square,circle,nrOfRows,nrOfColumns);
    }

    private static void paintRectangle(SPainter miro, SSquare square,SCircle circle,
                                       int nrOfRows, int nrOfColumns) {
        // Position the painter to paint the rectangle of squares.
        miro.mlt(((nrOfColumns-1)/2.0) * square.side());
        miro.mbk(((nrOfRows-1)/2.0) * square.side());
        // Paint the rectangle of squares.
        int i = 1;
        while ( i <= nrOfRows) {
            if (i % 2 == 0){
                paintOneRow(miro, nrOfColumns, square, circle);
            }else{paintAnotherRow(miro,nrOfColumns,square,circle);}
            miro.mfd(square.side());
            i = i + 1;
        }
        // Make the method invariant with respect to painter position.
        miro.mrt(((nrOfColumns-1)/2.0) * square.side());
        miro.mfd(((nrOfRows-1)/2.0) * square.side());
    }

    private static void paintOneRow(SPainter miro, int nrOfColumns, SSquare square,SCircle circle) {
        int i = 1;
        while ( i <= nrOfColumns ) {
            if (i%2 == 0){
                paintOneSquare(miro,square);
            }else{
                paintOne(miro,circle);
            }

            miro.mrt(square.side());
            i = i + 1;
        }
        miro.mlt(nrOfColumns*square.side());
    }
    private static void paintAnotherRow(SPainter miro, int nrOfColumns, SSquare square,SCircle circle) {
        int i = 1;
        while ( i <= nrOfColumns ) {
            if (i%2 == 0){
                paintAnotherSquare(miro,circle);
            }else{
                paintAnother(miro,square);
            }


            miro.mrt(square.side());
            i = i + 1;
        }
        miro.mlt(nrOfColumns*square.side());
    }

    private static void paintOneSquare(SPainter miro, SSquare square) {
        miro.setColor(Color.RED);
        miro.paint(square);
        miro.setColor(Color.BLACK);
        miro.draw(square);
    }
    private static void paintOne(SPainter miro,SCircle circle){
        miro.setColor(Color.GREEN);
        miro.paint(circle);
        miro.setColor(Color.BLACK);
        miro.draw(circle);
    }
    private static void paintAnotherSquare(SPainter miro, SCircle circle) {
        miro.setColor(Color.GREEN);
        miro.paint(circle);
        miro.setColor(Color.BLACK);
        miro.draw(circle);
    }
    private static void paintAnother(SPainter miro,SSquare square){
        miro.setColor(Color.RED);
        miro.paint(square);
        miro.setColor(Color.BLACK);
        miro.draw(square);
    }

    public Invention1(){
        paintTheImage();
    }

    public static void main(String[] args){
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Invention1();
            }
        });
    }
}