Referência: Encontre interseções entre os atributos de vários jogadores - Amazon GameLift

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Referência: Encontre interseções entre os atributos de vários jogadores

Este exemplo ilustra como usar uma regra de coleta para encontrar interseções em dois ou mais atributos do jogador. Ao trabalhar com coleções, você pode usar a operação intersection para um único atributo e a operação reference_intersection_count para vários atributos.

Para ilustrar essa abordagem, o exemplo avalia os jogadores em uma partida com base nas preferências dos seus personagens. O jogo de exemplo é um estilo free-for-all "" no qual todos os jogadores de uma partida são adversários. Cada jogador deve (1) escolher um personagem para si e (2) escolher os personagens adversários. Precisamos de uma regra que garanta que todos os jogadores em uma partida estejam usando um personagem na lista de oponentes preferidos de todos os outros jogadores.

O conjunto de regras de exemplo descreve uma correspondência com as seguintes características:

  • Estrutura da equipe: uma equipe com cinco jogadores

  • Atributos do jogador:

    • myCharacter: O personagem escolhido pelo jogador.

    • preferredOpponents: Lista de personagens contra os quais o jogador quer jogar.

  • Regras de correspondência: uma correspondência potencial é aceitável se cada personagem em uso estiver na lista de oponentes preferidos de todos os jogadores.

Para implementar a regra de correspondência, este exemplo usa uma regra de coleta com os seguintes valores de propriedade:

  • Operação: usa a operação reference_intersection_count para avaliar como cada lista de strings no valor de medição intercepta a lista de strings no valor de referência.

  • Medição — usa a expressão de flatten propriedade para criar uma lista de listas de strings, com cada lista de strings contendo o valor do myCharacteratributo de um jogador.

  • Valor de referência — usa a expressão de set_intersection propriedade para criar uma lista de caracteres de todos os valores de preferredOpponentsatributos que são comuns a cada jogador na partida.

  • Restrições: minCount é definido como 1 para garantir que o personagem escolhido de cada jogador (uma lista strings na medição) corresponda a pelo menos um dos oponentes preferidos comuns a todos os jogadores (uma string no valor de referência).

  • Expansão: Se uma correspondência não for feita em 15 segundos, ajuste o requisito mínimo de interseção.

O fluxo do processo para esta regra é o seguinte:

  1. Um jogador é adicionado ao jogo em potencial. O valor de referência (uma lista de strings) é recalculado para incluir interseções com a lista de oponentes preferidos do novo jogador. O valor de medição (uma lista das listas de strings) é recalculado para adicionar o caractere escolhido do novo jogador como uma nova lista de strings.

  2. A Amazon GameLift verifica se cada lista de sequências no valor de medição (os personagens escolhidos pelos jogadores) se cruza com pelo menos uma sequência no valor de referência (os adversários preferidos dos jogadores). Neste exemplo, como cada lista de strings na medição contém apenas um valor, a interseção é 0 ou 1.

  3. Se alguma lista de strings na medição não fizer interseção com a lista de strings dos valores de referência, a regra falhará e o novo jogador será removido da correspondência em potencial.

  4. Se uma partida não for preenchida em 15 segundos, elimine o requisito de correspondência do oponente para preencher os slots restantes do jogador na partida.

{ "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 }] }] }