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

/**
 * Draw Face
 * ---------
 * Draws an awesome robot face, with label and different colored
 * eyes!!!@#$%#@!
 */
public class DrawFace 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 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();
		drawLeftEye();
		drawRightEye();
		drawMouth();
		drawLabel();
	}

	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.ORANGE);
		add(head);
	}
	
	private void drawLeftEye() {
		double eyeSpacing = (FACE_WIDTH - 2 * EYE_DIAMETER) / 3;
		double headX = (getWidth() - FACE_WIDTH) / 2;
		double headY = (getHeight() - FACE_HEIGHT) / 2;
		double x =  headX + eyeSpacing;
		double y = headY + EYE_Y_OFFSET;
		GOval eye = new GOval(x, y, EYE_DIAMETER, EYE_DIAMETER);
		eye.setFilled(true);
		eye.setFillColor(Color.BLUE);
		add(eye);
	}
	
	private void drawRightEye() {
		double eyeSpacing = (FACE_WIDTH - 2 * EYE_DIAMETER) / 3;
		double headX = (getWidth() - FACE_WIDTH) / 2;
		double headY = (getHeight() - FACE_HEIGHT) / 2;
		double x =  headX + eyeSpacing * 2 + EYE_DIAMETER;
		double y = headY + EYE_Y_OFFSET;
		GOval eye = new GOval(x, y, EYE_DIAMETER, EYE_DIAMETER);
		eye.setFilled(true);
		eye.setFillColor(Color.GREEN);
		add(eye);
	}
	
	private void drawMouth() {
		double headX = (getWidth() - FACE_WIDTH) / 2;
		double headY = (getHeight() - FACE_HEIGHT) / 2;
		double x = headX + (FACE_WIDTH - MOUTH_WIDTH) / 2;
		double y = headY + MOUTH_Y_OFFSET;
		GRect mouth = new GRect(x, y, MOUTH_WIDTH, MOUTH_HEIGHT);
		mouth.setFilled(true);
		add(mouth);
	}
	
	private void drawLabel() {
		GLabel label = new GLabel("Robot Face");
		label.setFont("Courier-50");
		double x = (getWidth() - label.getWidth()) / 2;
		add(label, x, LABEL_Y);
	}
}