    01: import java.awt.*;
    02: import java.awt.geom.*;
    03: import java.util.*;
    04:
    05: /**
    06:    A car that can be moved around.
    07: */
    08: public class CarShape implements MoveableShape
    09: {
    10:    /**
    11:       Constructs a car item.
    12:       @param x the left of the bounding rectangle
    13:       @param y the top of the bounding rectangle
    14:       @param width the width of the bounding rectangle
    15:    */
    16:    public CarShape(int x, int y, int width)
    17:    {
    18:       this.x = x;
    19:       this.y = y;
    20:       this.width = width;
    21:    }
    22:
    23:    public void translate(double dx, double dy)
    24:    {
    25:       x += dx;
    26:       y += dy;
    27:    }
    28:
    29:    public void draw(Graphics2D g2)
    30:    {
    31:       Rectangle2D.Double body
    32:          = new Rectangle2D.Double(x, y + width / 6,
    33:             width - 1, width / 6);
    34:       Ellipse2D.Double frontTire
    35:          = new Ellipse2D.Double(x + width / 6, y + width / 3,
    36:             width / 6, width / 6);
    37:       Ellipse2D.Double rearTire
    38:          = new Ellipse2D.Double(x + width * 2 / 3, y + width / 3,
    39:             width / 6, width / 6);
    40:
    41:       // the bottom of the front windshield
    42:       Point2D.Double r1
    43:          = new Point2D.Double(x + width / 6, y + width / 6);
    44:       // the front of the roof
    45:       Point2D.Double r2
    46:          = new Point2D.Double(x + width / 3, y);
    47:       // the rear of the roof
    48:       Point2D.Double r3
    49:          = new Point2D.Double(x + width * 2 / 3, y);
    50:       // the bottom of the rear windshield
    51:       Point2D.Double r4
    52:          = new Point2D.Double(x + width * 5 / 6, y + width / 6);
    53:       Line2D.Double frontWindshield
    54:          = new Line2D.Double(r1, r2);
    55:       Line2D.Double roofTop
    56:          = new Line2D.Double(r2, r3);
    57:       Line2D.Double rearWindshield
    58:          = new Line2D.Double(r3, r4);
    59:
    60:       g2.draw(body);
    61:       g2.draw(frontTire);
    62:       g2.draw(rearTire);
    63:       g2.draw(frontWindshield);
    64:       g2.draw(roofTop);
    65:       g2.draw(rearWindshield);
    66:    }
    67:
    68:    private int x;
    69:    private int y;
    70:    private int width;
    71: }