Write a program that draws this picture. You should use the constants provided, but feel free to change them (or recolor any part of the face).

A few constants are provided. Use them so that you don't have "magic" numbers in your program.

/*The width of the robot face:*/
private static final int FACE_WIDTH = 300;

/*The height of the robot face:*/
private static final int FACE_HEIGHT = 350;

/*The diameter of each robot eye:*/
private static final int EYE_DIAMETER = 70;

/*The distance from the top of the head to the top of the eyes:*/
private static final int EYE_Y_OFFSET = 40;

/*The width of the mouth:*/
private static final int MOUTH_WIDTH = 150;

/*The height of the mouth:*/
private static final int MOUTH_HEIGHT = 30;

/*The distance from the top of the head to the top of the mouth:*/
private static final int MOUTH_Y_OFFSET = 200;

/*The distance from the top of the screen to the base of the label:*/
private static final int LABEL_Y = 50;

Solution

/**
 * Robot Face
 * ---------
 * Draws an awesome robot face, with label and different colored
 * eyes!!!@#$%#@!
 */
public class RobotFace extends GraphicsProgram {
    private static final int FACE_WIDTH = 300;
    private static final int FACE_HEIGHT = 350;
    private static final int EYE_DIAMETER = 70;
    private static final int EYE_Y_OFFSET = 40;
    private static final int EYE_X_SEPARATION = 40;
    
    private static final int MOUTH_WIDTH = 150;
    private static final int MOUTH_HEIGHT = 30;
    private static final int MOUTH_Y_OFFSET = 200;
    
    private static final int LABEL_Y = 50;
    public void run() {
        drawHead();
        drawLabel();
        drawMouth();
        drawEyes();
    }
    private void drawHead() {
        double x = (getWidth() - FACE_WIDTH) / 2;
        double y = (getHeight() - FACE_HEIGHT) / 2;
        GRect head = new GRect(xyFACE_WIDTHFACE_HEIGHT);
        head.setFilled(true);
        head.setFillColor(Color.YELLOW);
        add(head);
    }
    
    private void drawEyes() {
        double headY = (getHeight() - FACE_HEIGHT) / 2;
        double eyeY = headY + EYE_Y_OFFSET;
        
        double leftX = getWidth()/2 - EYE_X_SEPARATION/2 - EYE_DIAMETER;
        GOval leftEye = new GOval(leftXeyeYEYE_DIAMETEREYE_DIAMETER);
        leftEye.setFilled(true);
        leftEye.setFillColor(Color.BLUE);
        add(leftEye);
        double rightX = getWidth()/2 + EYE_X_SEPARATION/2;
        GOval rightEye = new GOval(rightXeyeYEYE_DIAMETEREYE_DIAMETER);
        rightEye.setFilled(true);
        rightEye.setFillColor(Color.GREEN);
        add(rightEye);
    }
    
    private void drawMouth() {
        double headX = (getWidth() - FACE_WIDTH) / 2;
        double headY = (getHeight() - FACE_HEIGHT) / 2;
        
        double mouthX = headX + (FACE_WIDTH - MOUTH_WIDTH) / 2;
        double mouthY = headY + MOUTH_Y_OFFSET// we did this!!!
        
        GRect mouth = new GRect(mouthXmouthYMOUTH_WIDTHMOUTH_HEIGHT);
        mouth.setFilled(true);
        add(mouth);
    }
    
    private void drawLabel() {
        GLabel label = new GLabel("Robot Face");
        label.setFont("Times New Roman-44");
        double x = (getWidth() - label.getWidth()) / 2;
        add(labelxLABEL_Y);
    }
}
X