> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Criar um placar de líderes básico

> Crie um placar de líderes básico do PlayFab com o SDK do C#: defina colunas e a direção de classificação, adicione entradas de jogadores, consulte classificações e lide com desempates de pontuação.

# Criar um placar de líderes básico

Neste tutorial, mostramos como criar um placar de líderes básico usando nosso novo serviço de placares de líderes. Vamos começar com um
exemplo de um jogo de arcade cujo objetivo é derrotar o maior número possível de inimigos até ser derrotado. Quando isso acontece,
você recebe uma pontuação. Agora, queremos criar um placar de líderes para ajudar esse jogo a determinar quem é o melhor jogador.

## Criando um placar de líderes

A primeira etapa é criar uma definição de placar de líderes que inclua os principais elementos para classificar os jogadores. Para o nosso jogo de arcade,
precisamos apenas de uma coluna para a pontuação. O exemplo a seguir mostra como criar a definição do placar de líderes usando o SDK do C#.

```C# theme={null}
public static async Task CreateLeaderboardDefinitionAsync(PlayFabAuthenticationContext context, string leaderboardName)
{
    PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);
    CreateLeaderboardDefinitionRequest leaderboardDefinitionRequest = new CreateLeaderboardDefinitionRequest()
    {
        AuthenticationContext = context,
        Name = leaderboardName,
        SizeLimit = 1000,
        EntityType = "title_player_account",
        VersionConfiguration = new VersionConfiguration()
        {
            MaxQueryableVersions = 1,
            ResetInterval = ResetInterval.Manual,
        },
        Columns = new List<LeaderboardColumn>()
        {
            new LeaderboardColumn()
            {
                Name = "arcadeScore",
                SortDirection = LeaderboardSortDirection.Descending,
            }          
        }
    };

    PlayFabResult<PlayFab.LeaderboardsModels.EmptyResponse> createLbDefinitionResult = await leaderboardsAPI.CreateLeaderboardDefinitionAsync(leaderboardDefinitionRequest);
}
```

Agora, vamos explicar alguns elementos importantes deste exemplo:

* `AuthenticationContext`: Este parâmetro lida com toda a autenticação por trás de cada solicitação aos nossos serviços. Para uma explicação detalhada,
  você pode consultar a seguinte página: [Início rápido de placares de líderes](/pt-BR/services/playfab/community/leaderboards/quickstart-leaderboards).
* `Name`: Este parâmetro ajuda você a identificar a definição do placar de líderes. É importante escolher algo relevante aqui, pois ele é usado para fazer outras solicitações para recuperar informações. Além disso, esse nome deve ser exclusivo, portanto um novo deve ser usado cada vez que um placar de líderes for criado.
* `EntityType`: Este parâmetro especifica o tipo de entidade para a qual você deseja criar o seu placar de líderes.
  Saiba mais aqui: [Modelo de programação de entidades](/pt-BR/services/playfab/live-service-management/game-configuration/entities).
  * `title_player_acount`: Este tipo de entidade refere-se a jogadores no PlayFab. Para criar um jogador, você pode usar o método `LoginAsPlayer` descrito aqui: [Início rápido](/pt-BR/services/playfab/community/leaderboards/quickstart-leaderboards).
  * `group`: Este tipo de entidade refere-se a um grupo de jogadores; geralmente, esse conceito se aplica em jogos com "clãs", "guildas" etc. Veja mais informações aqui: [Placares de líderes de grupo](/pt-BR/services/playfab/community/leaderboards/group-leaderboards).
  * `external`: Este tipo de entidade serve para adicionar dados personalizados aos nossos placares de líderes. Cada linha não precisa estar vinculada a nada no PlayFab; são os seus próprios dados. Você pode usar seus próprios identificadores no campo `EntityId`, desde que sejam cadeias de caracteres.
  * `master_player_account`: Este tipo de entidade refere-se a jogadores em vários títulos. Esse conceito se aplica quando um estúdio tem vários títulos e há jogadores que passaram de um título para outro ou que jogam vários títulos do mesmo estúdio. Com base nesse conceito, você pode criar placares de líderes de jogadores em vários títulos do mesmo estúdio. Você precisa usar a ID da conta mestre do jogador, também chamada de PlayFabId, para mapeá-la para o `EntityId`.
  * `character`: Este tipo de entidade está relacionado a jogos que têm uma série de personagens entre os quais um jogador pode escolher para começar sua jornada. Com esse conceito em mente, para criar um placar de líderes de personagens, você precisa primeiro criar um jogador e, em seguida, criar um personagem associado a esse jogador.
    Depois disso, você pode usar o `CharacterId` como a ID da entidade e inserir uma linha com a pontuação correspondente.
* `VersionConfiguration`: Este parâmetro permite definir uma estratégia de controle de versão para placares de líderes que se redefinem
  após um determinado período. Esse conceito é abordado em detalhes aqui: [Placares de líderes sazonais](/pt-BR/services/playfab/community/leaderboards/seasonal-leaderboards).
* `Columns`: Aqui, definimos o número de colunas que o nosso placar de líderes terá. Neste exemplo, definimos apenas uma coluna para a pontuação.
  Também definimos a `SortDirection` como decrescente, o que significa que o jogador com a maior pontuação ficará no topo. O número máximo de colunas permitido por definição é 5.

Com todas essas informações, você está pronto para executar o exemplo e criar o seu primeiro placar de líderes.

### Obtendo uma definição de placar de líderes

Antes de adicionar dados a este placar de líderes, queremos garantir que ele foi criado corretamente. Para fazer isso, fornecemos um exemplo de
como você pode recuperar a definição do seu placar de líderes.

```C# theme={null}
public static async Task GetLeaderboardDefinition(PlayFabAuthenticationContext context, string leaderboardName)
{
    PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);
    GetLeaderboardDefinitionRequest leaderboardDefReq = new GetLeaderboardDefinitionRequest()
    {
        Name = leaderboardName
    };

    PlayFabResult<GetLeaderboardDefinitionResponse> getleaderboardDefResult = await leaderboardsAPI.GetLeaderboardDefinitionAsync(leaderboardDefReq);
}
```

Para recuperar a definição do placar de líderes, especifique o nome do placar de líderes que você criou. Se você tiver várias
definições de placares de líderes, poderá usar o próximo exemplo para obter um conjunto delas.

```C# theme={null}

 public static async Task ListLeaderboards(PlayFabAuthenticationContext context)
 {
     PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);
     ListLeaderboardDefinitionsRequest listLbRequest = new ListLeaderboardDefinitionsRequest()  
     {
         AuthenticationContext = context,                
     };
     PlayFabResult<PlayFab.LeaderboardsModels.ListLeaderboardDefinitionsResponse> lbResponse = await leaderboardsAPI.ListLeaderboardDefinitionsAsync(listLbRequest);
    
 }
```

### Atualizando uma definição de placar de líderes

Se você quiser atualizar a definição do seu placar de líderes, faça o seguinte:

```C# theme={null}

 public static async Task UpdateLeaderboardDefinitionAsync(PlayFabAuthenticationContext context, string leaderboardName, int sizeLimit, VersionConfiguration version)
 {
    PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);
    UpdateLeaderboardDefinitionRequest updateLbDefinitionRequest = new UpdateLeaderboardDefinitionRequest()
    {
        AuthenticationContext = context,
        Name = leaderboardName,
        SizeLimit = sizeLimit,
        VersionConfiguration = version,
     };
     PlayFabResult<PlayFab.ProgressionModels.EmptyResponse> updateLbDefinitionResult = await leaderboardsAPI.UpdateLeaderboardDefinitionAsync(updateLbDefinitionRequest);
           
 }
```

Observe que Columns, EntityType e `ResetInterval` não podem ser modificados como parte da atualização.

### Excluindo a definição do placar de líderes

Se você quiser excluir a definição do seu placar de líderes, faça o seguinte:

```C# theme={null}

public static async Task DeleteLeaderboard(PlayFabAuthenticationContext context, string leaderboardName)
{
    PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);
    DeleteLeaderboardDefinitionRequest deleteLbRequest = new DeleteLeaderboardDefinitionRequest()
    {
        AuthenticationContext = context,
        Name = leaderboardName,
    };

    PlayFabResult<PlayFab.LeaderboardsModels.EmptyResponse> lbResponse = await leaderboardsAPI.DeleteLeaderboardDefinitionAsync(deleteLbRequest);
}
```

## Adicionando dados a um placar de líderes

Continuando com o nosso exemplo de jogo de arcade, agora sabemos como criar uma definição de placar de líderes, recuperá-la e excluí-la, se necessário.
Nossa próxima etapa é começar a adicionar dados ao nosso placar de líderes.

Lembre-se de que esses são placares de líderes baseados em entidades, o que significa que as entradas são entidades. Também oferecemos suporte para trazer suas próprias identidades externas, o que é discutido em detalhes em [Fazendo mais com placares de líderes](/pt-BR/services/playfab/community/leaderboards/doing-more-with-leaderboards).

No nosso exemplo específico, estamos usando o tipo de entidade title\_player\_account, portanto o nosso placar de líderes é preenchido com jogadores.
No entanto, lembre-se de que há outros tipos de entidade que você também pode usar.
Você pode conferi-los aqui: [Tipos de entidade internos disponíveis](/pt-BR/services/playfab/live-service-management/game-configuration/entities/available-built-in-entity-types).

Agora, vamos ver como podemos adicionar dados ao nosso placar de líderes.

```C# theme={null}
public static async Task UpdateLeaderboardForPlayer(PlayFabAuthenticationContext context, string leaderboardName, string entityId, int score)
{
    PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);
    UpdateLeaderboardEntriesRequest updateLeaderboardRequest = new UpdateLeaderboardEntriesRequest()
    {
        Entries = new List<LeaderboardEntryUpdate>()
        {
            new LeaderboardEntryUpdate()
            {
                EntityId = entityId,
                Scores = new List<string> { score.ToString()}                
            }
        },
        AuthenticationContext = context,
        LeaderboardName = leaderboardName,
    };

    PlayFabResult<PlayFab.LeaderboardsModels.EmptyResponse> updateResult = await leaderboardsAPI.UpdateLeaderboardEntriesAsync(updateLeaderboardRequest);
}
```

Agora, vamos explicar alguns elementos importantes deste exemplo:

* `Entries`: Este parâmetro corresponde à linha real adicionada ao placar de líderes. Ele tem um `EntityId`, que é uma cadeia de caracteres que
  identifica a entidade dentro do placar de líderes. Como esse serviço é um componente independente, você pode usar seus próprios identificadores aqui.
  No entanto, se você estiver usando outros serviços do PlayFab, esse valor deve ser consistente em todos os serviços.
* `Scores`: Este parâmetro corresponde à lista de pontuações que você pode adicionar a uma entidade. Lembre-se de que os placares de líderes podem ter mais de uma coluna.
  Você pode conferir esses conceitos em detalhes aqui: [Fazendo mais com placares de líderes](/pt-BR/services/playfab/community/leaderboards/doing-more-with-leaderboards)
* `Name`: Este parâmetro corresponde ao nome do placar de líderes definido quando você criou a definição do placar de líderes.

Agora você está pronto para adicionar dados ao seu placar de líderes.

## Recuperando dados de um placar de líderes

Vamos fazer uma rápida recapitulação. Neste ponto, você criou um placar de líderes, verificou todos os detalhes de configuração
e começou a adicionar entidades a ele. Agora, vamos imaginar que alguns jogadores já começaram a jogar o seu jogo,
todos com pontuações impressionantes. Queremos determinar quem é o melhor jogador. No exemplo a seguir,
mostramos como fazer isso.

```C# theme={null}
public static async Task<List<EntityLeaderboardEntry>> GetLeaderboard(PlayFabAuthenticationContext context, string leaderboardName)
{
    PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);
    GetEntityLeaderboardRequest getLbRequest = new GetEntityLeaderboardRequest()
    {
        LeaderboardName = leaderboardName,
        StartingPosition = 1,
        PageSize = 20,
        AuthenticationContext = context,
    };

    PlayFabResult<GetEntityLeaderboardResponse> lbResponse = await leaderboardsAPI.GetLeaderboardAsync(getLbRequest);
    
    return lbResponse.Result.Rankings;
}
```

Agora, vamos explicar alguns elementos importantes deste exemplo:

* `StartingPosition`: Este parâmetro refere-se à posição a partir da qual você deseja começar a consultar os dados. Neste caso,
  queremos o melhor jogador, então definimos este parâmetro como 1. Este parâmetro também funciona com o parâmetro `PageSize` para consultar
  todo o placar de líderes conforme necessário.
* `PageSize`: Este parâmetro especifica quantos registros são obtidos nessa solicitação.
* `Name`: Este parâmetro corresponde ao nome do placar de líderes definido quando você criou a definição do placar de líderes.

### Desempate

Agora, vamos imaginar que alguns jogadores do seu jogo estão disputando para ver quem é o melhor.
Enfrentamos um problema: dois jogadores têm a mesma pontuação porque derrotaram o mesmo número de inimigos.
Então, quem deve ser o melhor jogador?

Para responder a essa pergunta, temos uma política de desempate simples por padrão. Escolhemos o melhor jogador com base
no carimbo de data/hora em que a pontuação foi alcançada. Quem a alcançou primeiro é o melhor jogador. No entanto,
dependendo do contexto do jogo, isso pode não ser suficiente ou preciso.
Para recursos de desempate mais complexos, consulte: [Fazendo mais com placares de líderes](/pt-BR/services/playfab/community/leaderboards/doing-more-with-leaderboards).

No nosso exemplo atual, a classificação seria:

| Classificação | ID da entidade | Pontuação | LastUpdated |
| - | - | - | - |
| 1 | "player 3" | 103 | "2024-08-27T20:24:36.738Z" |
| 2 | "player 2" | 102 | "2024-08-27T20:24:29.251Z" |
| 3 | **"player 1"** | 100 | "2024-08-27T19:52:26.642Z" |
| 4 | **"player 4"** | 100 | "2024-08-27T20:24:44.552Z" |

Neste exemplo específico, tanto "player 1" quanto "player 4" têm a mesma pontuação. A decisão de quem fica à frente depende do carimbo de data/hora.
Como "player 1" alcançou a pontuação primeiro, esse é o motivo pelo qual ele está no topo.

## Excluindo linhas do placar de líderes

Seus placares de líderes estão funcionando conforme o esperado, e você tem muitos jogadores no seu jogo. No entanto,
você começa a notar um comportamento incomum, pois parece que alguns jogadores estão trapaceando para chegar ao topo do
placar de líderes. Você não vai tolerar esse comportamento, então deseja removê-los dos seus placares de líderes. No próximo exemplo, você pode ver como excluir linhas do seu placar de líderes.

```C# theme={null}

public static async Task DeleteLeaderboardEntries(PlayFabAuthenticationContext context, string leaderboardName, List<string> entityIds)
{
    PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);
    DeleteLeaderboardEntriesRequest leaderboardsDelReq = new DeleteLeaderboardEntriesRequest() {
        Name = leaderboardName,
        EntityIds = entityIds
    };

    PlayFabResult<PlayFab.LeaderboardsModels.EmptyResponse> delLeaderboardDefResult = await leaderboardsAPI.DeleteLeaderboardEntriesAsync(leaderboardsDelReq);
}

```

Agora, vamos explicar alguns elementos importantes deste exemplo:

* `EntityIds`: Este parâmetro é a lista de IDs de entidade que você deseja excluir.
* `Name`: Este parâmetro corresponde ao nome do placar de líderes definido quando você criou a definição do placar de líderes.

## Conclusões

Neste tutorial, aprendemos a realizar as seguintes operações:

* Criar um placar de líderes.
* Verificar a configuração de um placar de líderes.
* Atualizar a configuração do placar de líderes.
* Excluir a configuração do placar de líderes.
* Preencher o placar de líderes.
* Entender como funciona o desempate.
* Excluir entradas do placar de líderes.

## Consulte também

* [Fazendo mais com placares de líderes](/pt-BR/services/playfab/community/leaderboards/doing-more-with-leaderboards).
* [Limites ](/pt-BR/services/playfab/community/leaderboards/limits-leaderboards).
* [Cota ](/pt-BR/services/playfab/community/leaderboards/quota-leaderboards).
* [Placares de líderes sazonais](/pt-BR/services/playfab/community/leaderboards/seasonal-leaderboards).
* [Classificando jogadores por estatísticas](/pt-BR/services/playfab/community/leaderboards/leaderboards-linked-to-stats).
* [Adicionar dados contextuais aos placares de líderes](/pt-BR/services/playfab/community/leaderboards/metadata-leaderboards).
* [Placares de líderes de grupo](/pt-BR/services/playfab/community/leaderboards/group-leaderboards).
* [Níveis manuais](/pt-BR/services/playfab/community/leaderboards/manual-tiers).
* [Referência de API](/pt-BR/services/playfab/community/leaderboards/api-reference).
* [Placares de líderes e CloudScript](/pt-BR/services/playfab/community/leaderboards/leaderboards-cloudscript).
* [Placares de líderes com PlayStream](/pt-BR/services/playfab/community/leaderboards/leaderboards-with-playstream-and-telemetry)


## Related topics

- [Referência de API de placares de líderes](/pt-BR/services/playfab/community/leaderboards/api-reference.md)
- [Fazendo mais com placares de líderes](/pt-BR/services/playfab/community/leaderboards/doing-more-with-leaderboards.md)
- [Placares de líderes](/pt-BR/build/steam-porting-guide/features/steam-leaderboards.md)
- [Configurar placares de líderes no Partner Center](/pt-BR/publishing/game-publishing/how-to/data-platform-2013/how-to-configure-leaderboards-2013.md)
- [XblLeaderboardQuery](/pt-BR/reference/live/xsapi-c/leaderboard_c/structs/xblleaderboardquery.md)
