Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Ejemplo: encuentra intersecciones entre los atributos de varios jugadores
Este ejemplo ilustra cómo utilizar una regla de colección para encontrar intersecciones en dos o más atributos de los jugadores. Cuando trabaje con colecciones, puede utilizar la operación intersection
para un único atributo y la operación reference_intersection_count
para varios atributos.
Para ilustrar este enfoque, este ejemplo evalúa los jugadores de un emparejamiento en función de sus personajes preferidos. El juego de ejemplo es un estilo «free-for-all» en el que todos los jugadores de una partida son oponentes. A cada jugador se le pide que (1) elija un personaje para sí mismo, y (2) elija los personajes contra los que desea jugar. Necesitamos una regla que garantice que cada jugador de un emparejamiento utiliza un personaje que está la lista de oponentes preferidos de todos los demás jugadores.
El conjunto de reglas del ejemplo describe un emparejamiento con las siguientes características:
-
Estructura del equipo: un equipo de cinco jugadores
-
Atributos de los jugadores:
-
myCharacter: el personaje elegido por el jugador.
-
preferredOpponents: lista de personajes contra los que desea jugar el jugador.
-
-
Reglas de emparejamiento: un posible emparejamiento es aceptable si cada uno de los personajes en uso se encuentra en la lista de oponentes preferidos de cada jugador.
Para implementar la regla de emparejamiento, en este ejemplo se utiliza una regla de colección con los siguientes valores de propiedades:
-
Operación: utiliza la operación para evaluar el grado de coincidencia de cada lista de cadenas del valor de medición con la lista de cadenas del valor de referencia.
-
Medición: utiliza la expresión de propiedad
flatten
para crear una lista de listas de cadenas, cada una de las cuales contiene el valor del atributo myCharacter de un jugador. -
Valor de referencia: utiliza la expresión de propiedad
set_intersection
para crear una lista de cadenas de todos los valores del atributo preferredOpponents que son comunes a cada jugador del emparejamiento. -
Restricciones: se establece en 1 para garantizar que el personaje elegido por cada jugador (una lista de cadenas en la medición) coincide al menos con uno de los oponentes preferidos comunes a todos los jugadores (una cadena en el valor de referencia).
-
Expansión: si no se consigue realizar un emparejamiento en 15 segundos, flexibilizar el requisito mínimo de intersección.
El flujo de proceso para esta regla es el siguiente:
-
Se añade un jugador al posible emparejamiento. El valor de referencia (una lista de cadenas) se vuelve a calcular para incluir las intersecciones con la lista de oponentes preferidos del nuevo jugador. El valor de la medición (una lista de listas de cadenas) se vuelve a calcular para añadir el personaje elegido del jugador nuevo como una lista de cadenas nueva.
-
Amazon GameLift verifica que cada lista de cadenas del valor de medición (los personajes elegidos por los jugadores) se cruce con al menos una cadena del valor de referencia (los oponentes preferidos de los jugadores). Dado que en este ejemplo cada lista de cadenas de la medición contiene solo un valor, la intersección es 0 o 1.
-
Si cualquier lista de cadenas de la medición no tiene un valor que coincide con la lista de cadenas de valores de referencia, la regla no se cumple y el jugador nuevo se elimina del posible emparejamiento.
-
Si no se consigue un emparejamiento en un plazo de 15 segundos, se elimina el requisito de emparejamiento con el contrincante para rellenar el resto de ranuras de jugadores en el emparejamiento.
{ "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 }] }] }