Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Esempio: trova le intersezioni tra gli attributi di più giocatori
Questo esempio illustra come utilizzare una regola di raccolta per trovare intersezioni in due o più attributi giocatore. Quando si utilizzano le raccolte, è possibile utilizzare l'operazione intersection
per un singolo attributo e l'operazione reference_intersection_count
per più attributi.
Per illustrare questo approccio, questo esempio valuta i giocatori in una corrispondenza in base alle loro preferenze di caratteri. Il gioco di esempio è uno stile "free-for-all" in cui tutti i giocatori di una partita sono avversari. A ogni giocatore viene chiesto di (1) scegliere un carattere per se stessi e (2) scegliere i caratteri contro cui desiderano giocare. Abbiamo bisogno di una regola che garantisca che ogni giocatore in una corrispondenza utilizzi un carattere che sia nell'elenco degli avversari preferiti di tutti gli altri giocatori.
Il set di regole di esempio descrive una corrispondenza con le seguenti caratteristiche:
-
Struttura della squadra: una squadra di cinque giocatori
-
Attributi dei giocatori:
-
myCharacter: il carattere scelto dal giocatore.
-
preferredOpponents: elenco di caratteri contro cui il giocatore vuole giocare.
-
-
Regole corrispondenza: una corrispondenza potenziale è accettabile se ogni carattere in uso è nell'elenco di avversari preferiti di ogni giocatore.
Per implementare la regola di corrispondenza, questo esempio utilizza una regola di raccolta con i seguenti valori di proprietà:
-
Operazione: utilizza
reference_intersection_count
l'operazione per valutare come ogni elenco di stringhe nel valore di misurazione si interseca con l'elenco di stringhe nel valore di riferimento. -
Misurazione: utilizza l'espressione della
flatten
proprietà per creare un elenco di elenchi di stringhe, con ogni elenco di stringhe contenente il valore dell'attributo myCharacter di un giocatore. -
Valore di riferimento: utilizza l'espressione della
set_intersection
proprietà per creare un elenco di stringhe di tutti i valori degli attributi PreferredOpponents comuni a tutti i giocatori della partita. -
Restrizioni:
minCount
è impostato su 1 per garantire che il personaggio scelto da ogni giocatore (un elenco di stringhe nella misurazione) corrisponda ad almeno uno degli avversari preferiti comuni a tutti i giocatori. (una stringa nel valore di riferimento). -
Espansione: se una partita non viene riempita entro 15 secondi, allenta il requisito minimo di intersezione.
Il flusso di elaborazione per questa regola è il seguente:
-
Un giocatore viene aggiunto alla corrispondenza potenziale. Il valore di riferimento (un elenco di stringhe) è ricalcolato per includere le intersezioni con l'elenco degli avversari preferiti del nuovo giocatore. Il valore di misurazione (un elenco di elenchi di stringhe) viene ricalcolato per aggiungere il carattere scelto dal nuovo giocatore come un nuovo elenco stringa.
-
Amazon GameLift verifica che ogni elenco di stringhe nel valore di misurazione (i caratteri scelti dai giocatori) si intersechi con almeno una stringa nel valore di riferimento (gli avversari preferiti dai giocatori). Poiché in questo esempio ciascun elenco di stringhe nella misurazione contiene un solo valore, l'intersezione può essere 0 o 1.
-
Se qualsiasi elenco di stringhe nella misurazione non si interseca con l'elenco di stringhe del valore di riferimento, la regola ha esito negativo e il nuovo giocatore viene rimosso dalla corrispondenza potenziale.
-
Se una corrispondenza non viene completata entro 15 secondi, annullare il requisito di corrispondenza dell'avversario per completare gli slot giocatore rimanenti nella corrispondenza.
{ "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 }] }] }