

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# FlexMatch 規則類型
<a name="match-rules-reference-ruletype"></a>

## 批次距離規則
<a name="match-rules-reference-ruletype-batchdistance"></a>

```
batchDistance
```

批次距離規則會測量兩個屬性值之間的差異。您可以對大型和小型相符項目使用批次距離規則類型。批次距離規則有兩種類型：
+ *比較數值屬性值*。例如，此類型的批次距離規則可能需要配對中的所有玩家彼此在兩個技能層級內。對於此類型，定義所有票證`batchAttribute`的 之間的最大距離。
+ *比較字串屬性值*。例如，此類型的批次距離規則可能需要配對中的所有玩家請求相同的遊戲模式。針對此類型，定義 FlexMatch 用來形成批次`batchAttribute`的值。

**批次距離規則屬性**
+ **`batchAttribute`** – 用來形成批次的玩家屬性值。
+ **`maxDistance`** – 成功配對的最大距離值。用來比較數值屬性。
+ **`partyAggregation`** – 決定 如何處理具有多個玩家 （各方） 之FlexMatch票證的值。有效選項包括門票玩家的最小值 (`min`)、最大值 (`max`) 和平均值 (`avg`)。預設值為 `avg`。

**Example**  
範例  

```
{
  "name":"SimilarSkillRatings",
  "description":"All players must have similar skill ratings",
  "type":"batchDistance",
  "batchAttribute":"SkillRating",
  "maxDistance":"500"
}
```

```
{
  "name":"SameGameMode",
  "description":"All players must have the same game mode",
  "type":"batchDistance",
  "batchAttribute":"GameMode"
}
```

## 比較規則
<a name="match-rules-reference-ruletype-comparison"></a>

```
comparison
```

比較規則會將玩家屬性值與另一個值進行比較。比較規則有兩種類型：
+ *與參考值比較*。例如，此類型的比較規則可能需要符合的玩家具有特定的技能水準或更高。對於此類型，請指定玩家屬性、參考值和比較操作。
+ *比較玩家*。例如，此類型的比較規則可能需要配對中的所有玩家使用不同的字元。對於此類型，請指定玩家屬性和等於 (`=`) 或不等於 (`!=`) 比較操作。請勿指定參考值。

**注意**  
批次距離規則在比較玩家屬性方面更有效率。若要減少配對延遲，請盡可能使用批次距離規則。

**比較規則屬性**
+ **`measurements`** – 要比較的玩家屬性值。
+ **`referenceValue`** – 要針對潛在相符項目比較測量值與 的值。
+ **`operation`** – 決定如何比較測量值與參考值的值。有效操作包括：`<`、`<=`、`=`、`!=`、`>`、`>=`。
+ **`partyAggregation`** – 決定 如何處理具有多個玩家 （各方） 之FlexMatch票證的值。有效選項包括門票玩家的最小值 (`min`)、最大值 (`max`) 和平均值 (`avg`)。預設值為 `avg`。

## 距離規則
<a name="match-rules-reference-ruletype-distance"></a>

```
distance
```

距離規則會測量兩個數值之間的差異，例如玩家技能等級之間的距離。例如，距離規則可能需要所有玩家都玩遊戲至少 30 小時。

**注意**  
批次距離規則在比較玩家屬性方面更有效率。若要減少配對延遲，請盡可能使用批次距離規則。

**距離規則屬性**
+ **`measurements`** – 要測量距離的玩家屬性值。這必須是具有數值的屬性。
+ **`referenceValue`** – 測量潛在配對距離的數值。
+ **`minDistance`/`maxDistance`** – 成功配對的最小或最大距離值。
+ **`partyAggregation`** – 決定 如何處理具有多個玩家 （各方） 之FlexMatch票證的值。有效選項包括門票玩家的最小值 (`min`)、最大值 (`max`) 和平均值 (`avg`)。預設值為 `avg`。

## 集合規則
<a name="match-rules-reference-ruletype-collection"></a>

```
collection
```

集合規則會將一組玩家屬性值與批次中其他玩家的值或參考值進行比較。集合可以包含多個玩家的屬性值、做為字串清單的玩家屬性，或兩者。例如，集合規則可能會查看隊伍中玩家選擇的字元。然後，規則可能要求團隊至少擁有一個特定字元。

**集合規則屬性**
+ **`measurements`** – 要比較的玩家屬性值集合。屬性值必須是字串清單。
+ **`referenceValue`** – 用來比較潛在比對之測量的值 （或值集合）。
+ **`operation`** – 決定如何比較測量集合的值。有效操作包括下列項目：
  + `intersection` – 此操作會測量所有玩家集合中相同的值數量。如需使用交集操作的規則範例，請參閱 [範例：使用明確排序來尋找最佳相符項目](match-examples-4.md)。
  + `contains` – 此操作會測量包含指定參考值的玩家屬性集合數目。如需使用 包含 操作的規則範例，請參閱 [範例：設定團隊層級需求和延遲限制](match-examples-3.md)。
  + `reference_intersection_count` – 此操作會測量玩家屬性集合中符合參考值集合中項目的項目數量。您可以使用此操作來比較多個不同的玩家屬性。如需比較多個玩家屬性集合的規則範例，請參閱 [範例：尋找跨多個玩家屬性的交集](match-examples-5.md)。
+ **`minCount`/`maxCount`** – 成功配對的最小或最大計數值。
+ **`partyAggregation`** – 決定 如何處理具有多個玩家 （各方） 之FlexMatch票證的值。對於此值，您可以使用 `union`來合併隊伍中所有玩家的玩家屬性。或者，您可以使用 `intersection` 來使用一方共同的玩家屬性。預設值為 `union`。

## 複合規則
<a name="match-rules-reference-ruletype-compound"></a>

```
compound
```

複合規則使用邏輯陳述式來形成 40 名或更少玩家的配對。您可以在單一規則集中使用多個複合規則。使用多個複合規則時，所有複合規則都必須為 true 才能形成相符項目。

您無法使用擴展規則[擴展複合規則](match-rulesets-components-algorithm.md#match-rulesets-components-algorithm-expansion)，但您可以擴展基礎或支援規則。

**複合規則屬性**
+ **`statement`** – 用來結合個別規則以形成複合規則的邏輯。您在此屬性中指定的規則必須已在規則集的先前定義。您無法在複合`batchDistance`規則中使用規則。

  此屬性支援下列邏輯運算子：
  + `and` – 如果兩個提供的引數為 true，表示表達式為 true。
  + `or` – 如果兩個提供的引數之一為 true，則表達式為 true。
  + `not` – 反轉表達式中引數的結果。
  + `xor` – 如果只有一個引數為 true，則表達式為 true。

**Example 範例**  
下列範例會根據玩家選取的遊戲模式，比對不同技能等級的玩家。  

```
{
    "name": "CompoundRuleExample",
    "type": "compound",
    "statement": "or(and(SeriousPlayers, VeryCloseSkill), and(CasualPlayers, SomewhatCloseSkill))"
}
```

## 延遲規則
<a name="match-rules-reference-ruletype-latency"></a>

```
latency
```

延遲規則會測量每個位置的玩家延遲。延遲規則會忽略延遲高於最大值的任何位置。玩家在至少一個位置的延遲值必須低於最大值，延遲規則才能接受它們。您可以指定 `maxLatency` 屬性，將此規則類型與大型相符項目搭配使用。

**延遲規則屬性**
+ **`maxLatency`** – 位置可接受的延遲上限值。如果票證沒有延遲低於最大值的位置，則票證不符合延遲規則。
+ **`maxDistance`** – 每個票證的延遲與距離參考值之間的最大值。
+ **`distanceReference`** – 要比較票證延遲的延遲值。在距離參考值最大距離內的票證會導致成功配對。有效選項包括最低 (`min`) 和平均 (`avg`) 玩家延遲值。
+ **`partyAggregation`** – 決定 如何處理具有多個玩家 （各方） 之FlexMatch票證的值。有效選項包括門票玩家的最小值 (`min`)、最大值 (`max`) 和平均值 (`avg`)。預設值為 `avg`。

**注意**  
佇列可以將遊戲工作階段放置在不符合延遲規則的區域。如需佇列延遲政策的詳細資訊，請參閱[建立玩家延遲政策](https://docs.aws.amazon.com/gameliftservers/latest/developerguide/queues-design.html#queues-design-latency)。

## 絕對排序規則
<a name="match-rules-reference-ruletype-absolute"></a>

```
absoluteSort
```

相較於新增至批次的第一個票證，絕對排序規則會根據指定的玩家屬性來排序一批配對票證。

**絕對排序規則屬性**
+ **`sortDirection`** – 排序配對票證的順序。有效選項包括 `ascending`和 `descending`。
+ **`sortAttribute`** – 排序票證的玩家屬性。
+ **`mapKey`** – 排序玩家屬性的選項，如果是地圖的話。有效的選項包含：
  + `minValue` – 值最低的金鑰為第一個。
  + `maxValue` – 具有最高值的金鑰優先。
+ **`partyAggregation`** – 決定 如何處理具有多個玩家 （各方） 之FlexMatch票證的值。有效選項包括玩家屬性下限 (`min`)、玩家屬性上限 (`max`)，以及隊伍中玩家所有玩家屬性的平均值 (`avg`)。預設值為 `avg`。

**Example**  
範例  
下列範例規則會依技能層級排序玩家，並平均各方的技能層級。  

```
{
    "name":"AbsoluteSortExample",
    "type":"absoluteSort",
    "sortDirection":"ascending",
    "sortAttribute":"skill",
    "partyAggregation":"avg"
}
```

## 距離排序規則
<a name="match-rules-reference-ruletype-distancesort"></a>

```
distanceSort
```

距離排序規則會根據指定玩家屬性與新增至批次的第一個票證的距離，來排序一批配對票證。

**距離排序規則屬性**
+ **`sortDirection`** – 排序配對票證的方向。有效選項包括 `ascending`和 `descending`。
+ **`sortAttribute`** – 排序票證的玩家屬性。
+ **`mapKey`** – 排序玩家屬性的選項，如果是地圖的話。有效的選項包含：
  + `minValue` – 針對新增至批次的第一個票證，尋找值最低的索引鍵。
  + `maxValue` – 針對新增至批次的第一個票證，尋找具有最高值的金鑰。
+ **`partyAggregation`** – 決定 如何處理具有多個玩家 （各方） 之FlexMatch票證的值。有效選項包括門票玩家的最小值 (`min`)、最大值 (`max`) 和平均值 (`avg`)。預設值為 `avg`。