View a markdown version of this page

Beispiel: Finde Überschneidungen zwischen mehreren Spielerattributen - GameLift Amazon-Server

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Beispiel: Finde Überschneidungen zwischen mehreren Spielerattributen

Dieses Beispiel veranschaulicht, wie Sie mit einer Sammlungsregel Schnittmengen in zwei oder mehreren Spielerattributen finden. Beim Arbeiten mit Sammlungen können Sie die intersection-Operation für ein einzelnes Attribut und die reference_intersection_count-Operation für mehrere Attribute verwenden.

Um diesen Ansatz zu verdeutlichen, wertet dieses Beispiel Spieler in einem Match basierend auf ihren Charakter-Präferenzen aus. Das Beispielspiel ist ein „Jeder-gegen-jeden“-(Free-for-all)-Spiel, wobei alle Spieler in einem Match Gegner sind. Jeder Spieler wird aufgefordert, (1) einen Charakter für sich zu wählen, und (2) Charaktere zu wählen, gegen die er spielen möchte. Wir brauchen eine Regel, die gewährleistet, dass jeder Spieler in einem Match einen Charakter verwendet, der auf der Liste bevorzugter Gegner der anderen Spieler steht.

Der Beispielregelsatz beschreibt ein Match mit den folgenden Eigenschaften:

  • Team-Struktur: Ein Team mit fünf Spielern

  • Spielerattribute:

    • myCharacter: Der vom Spieler ausgewählte Charakter.

    • preferredOpponents: Liste der Charaktere, gegen die der Spieler spielen will.

  • Match-Regeln: Ein potenzielles Match ist akzeptabel, wenn sich jeder der verwendeten Charaktere auf der Liste der bevorzugten Gegner aller Spieler befindet.

Um die Match-Regeln zu implementieren, verwendet dieses Beispiel eine Sammlungsregel mit den folgenden Eigenschaftswerten:

  • Operation — Nutzt die reference_intersection_count Operation, um zu ermitteln, wie sich jede Zeichenkettenliste im Messwert mit der Zeichenkettenliste im Referenzwert überschneidet.

  • Messung — Verwendet den flatten Eigenschaftsausdruck, um eine Liste von Zeichenkettenlisten zu erstellen, wobei jede Stringliste den MyCharacter-Attributwert eines Players enthält.

  • Referenzwert — Verwendet den set_intersection Eigenschaftsausdruck, um eine Zeichenkettenliste aller PreferredOwners-Attributwerte zu erstellen, die allen Spielern im Spiel gemeinsam sind.

  • Einschränkungen — minCount wird auf 1 gesetzt, um sicherzustellen, dass der von jedem Spieler gewählte Charakter (eine Zeichenkettenliste in der Messung) mit mindestens einem der bevorzugten Gegner übereinstimmt, der allen Spielern gemeinsam ist. (eine Zeichenfolge im Referenzwert).

  • Erweiterung — Wenn eine Übereinstimmung nicht innerhalb von 15 Sekunden gefüllt ist, lockern Sie die Mindestanforderung an die Schnittmenge.

Der Verarbeitungsablauf für diese Regel sieht wie folgt aus:

  1. Ein Spieler wird dem potenziellen Match hinzugefügt. Der Referenzwert (eine Zeichenfolgenliste) wird neu berechnet, um die Schnittmengen mit der Liste der bevorzugten Gegner des neuen Spielers zu beinhalten. Der Messwert (eine Liste von Zeichenfolgenlisten) wird neu berechnet, um den von dem neuen Spieler gewählten Charakter als neue Zeichenfolgenliste hinzuzufügen.

  2. Amazon GameLift Servers stellt sicher, dass jede Zeichenfolgenliste im Messwert (die von den Spielern gewählten Charaktere) eine Schnittmenge mit mindestens einer Zeichenfolge im Referenzwert (die bevorzugten Gegner der Spieler) bildet. Da in diesem Beispiel jede Zeichenfolgenliste in der Messung nur einen Wert enthält, ist die Schnittmenge entweder 0 oder 1.

  3. Wenn eine Zeichenfolgenliste in der Messung keine Schnittmenge mit der Referenzwert-Zeichenfolgenliste hat, schlägt die Regel fehl und der neue Spieler wird aus dem potenziellen Match entfernt.

  4. Wird ein Match nicht innerhalb von 15 Sekunden gefüllt, wird die Match-Anforderung des Gegners verworfen, die restlichen Spielerplätze im Match zu füllen.

{ "name": "preferred_characters", "ruleLanguageVersion": "1.0", "playerAttributes": [{ "name": "myCharacter", "type": "string_list" }, { "name": "preferredOpponents", "type": "string_list" }], "teams": [{ "name": "red", "minPlayers": 5, "maxPlayers": 5 }], "rules": [{ "description": "Make sure that all players in the match are using a character that is on all other players' preferred opponents list.", "name": "OpponentMatch", "type": "collection", "operation": "reference_intersection_count", "measurements": ["flatten(teams[*].players.attributes[myCharacter])"], "referenceValue": "set_intersection(flatten(teams[*].players.attributes[preferredOpponents]))", "minCount":1 }], "expansions": [{ "target": "rules[OpponentMatch].minCount", "steps": [{ "waitTimeSeconds": 15, "value": 0 }] }] }