    01: import java.awt.*;
    02: import java.awt.geom.*;
    03:
    04: /**
    05:    A house shape.
    06: */
    07: public class HouseShape extends SelectableShape
    08: {
    09:    /**
    10:       Constructs a house shape.
    11:       @param x the left of the bounding rectangle
    12:       @param y the top of the bounding rectangle
    13:       @param width the width of the bounding rectangle
    14:    */
    15:    public HouseShape(int x, int y, int width)
    16:    {
    17:       this.x = x;
    18:       this.y = y;
    19:       this.width = width;
    20:    }
    21:
    22:    public void draw(Graphics2D g2)
    23:    {
    24:       Rectangle2D.Double base
    25:          = new Rectangle2D.Double(x, y + width, width, width);
    26:
    27:       // the left bottom of the roof
    28:       Point2D.Double r1
    29:          = new Point2D.Double(x, y + width);
    30:       // the top of the roof
    31:       Point2D.Double r2
    32:          = new Point2D.Double(x + width / 2, y);
    33:       // the right bottom of the roof
    34:       Point2D.Double r3
    35:          = new Point2D.Double(x + width, y + width);
    36:
    37:       Line2D.Double roofLeft
    38:          = new Line2D.Double(r1, r2);
    39:       Line2D.Double roofRight
    40:          = new Line2D.Double(r2, r3);
    41:
    42:       g2.draw(base);
    43:       g2.draw(roofLeft);
    44:       g2.draw(roofRight);
    45:    }
    46:
    47:    public boolean contains(Point2D p)
    48:    {
    49:       return x <= p.getX() && p.getX() <= x + width
    50:          && y <= p.getY() && p.getY() <= y + 2 * width;
    51:    }
    52:
    53:    public void translate(double dx, double dy)
    54:    {
    55:       x += dx;
    56:       y += dy;
    57:    }
    58:
    59:    private int x;
    60:    private int y;
    61:    private int width;
    62: }