public ArrayList<Piece> getValidMoves(PieceColor color) {
    HashSet<Piece> moveSet = new HashSet<Piece>();
    ArrayList<Piece> moves = new ArrayList<Piece>();
    ArrayList<Piece> opposingPieces = getPieces(color.getOpposite());
    
    for(Piece opposingPiece : opposingPieces) {
      ArrayList<Piece> freeNeighbors = opposingPiece.getEmptyNeighbors(this);
      for(Piece free : freeNeighbors) {
        free.setColor(color);
        if(free.getCapturedPieces(this).size() > 0) {
          moveSet.add(free);
        }
      }
    }
    
    moves.addAll(moveSet);
    return moves;
  }