@Override
 public boolean contains(GridPoint referencePoint, GridPoint targetPoint) {
   return this.relativeLocations.contains(
       new GridPoint(
           targetPoint.getColumn() - referencePoint.getColumn(),
           targetPoint.getRow() - referencePoint.getRow()));
 }
 @Override
 public Set<GridPoint> getAllAffectedLocations(GridPoint referencePoint) {
   Set<GridPoint> results = new HashSet<GridPoint>();
   for (GridPoint relativeLocation : this.relativeLocations) {
     int x = referencePoint.getColumn() + relativeLocation.getColumn();
     int y = referencePoint.getRow() + relativeLocation.getRow();
     if (this.grid.isInBounds(x, y)) {
       results.add(new GridPoint(x, y));
     }
   }
   return results;
 }