Problem written by Eric Roberts. Updated by Chris Piech and Lisa Yan.
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;
/** * 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); } }