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(x, y, FACE_WIDTH, FACE_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(leftX, eyeY, EYE_DIAMETER, EYE_DIAMETER);
		leftEye.setFilled(true);
		leftEye.setFillColor(Color.BLUE);
		add(leftEye);

		double rightX = getWidth()/2 + EYE_X_SEPARATION/2;
		GOval rightEye = new GOval(rightX, eyeY, EYE_DIAMETER, EYE_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(mouthX, mouthY, MOUTH_WIDTH, MOUTH_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(label, x, LABEL_Y);
	}
}