> ## 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.

# Classements saisonniers

> Configurez des classements PlayFab saisonniers avec VersionConfiguration pour réinitialiser les classements selon une fréquence mensuelle ou personnalisée et interroger les versions précédentes des tournois.

Dans ce didacticiel, nous expliquons le concept de gestion des versions des classements. Il existe de nombreux cas où nous voulons disposer de
différentes versions d'un classement donné. Par exemple, dans un jeu proposant un mode tournoi mensuel, la structure du classement
reste la même, mais les joueurs changent très probablement, en particulier dans un jeu très compétitif.

Nous poursuivons avec l'exemple de [Créer un classement de base](/fr/services/playfab/community/leaderboards/create-basic-leaderboard). Imaginez que notre jeu d'arcade soit désormais très populaire. Un nouveau mode appelé « Top of the Mountain » est donc introduit. Chaque mois, le jeu propose un
tournoi auquel n'importe quel joueur peut participer. Les joueurs qui se classent dans le top 100 seront affichés dans un classement spécial du menu principal,
afin que tout le monde puisse voir qui est le meilleur au jeu.

## Création d'une définition de classement pour la gestion des versions

Dans l'exemple précédent, lors de la création d'une définition de classement, nous avions évoqué l'importance du paramètre `VersionConfiguration`
pour la gestion des versions. Nous détaillons ici comment l'utiliser et comment il fonctionne.

```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 = 12,
            ResetInterval = ResetInterval.Month,
        },
        Columns = new List<LeaderboardColumn>()
        {
            new LeaderboardColumn()
            {
                Name = "arcadeScoreTournament",
                SortDirection = LeaderboardSortDirection.Descending,
            }          
        }
    };

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

La principale différence de cet exemple par rapport au classement de base est le paramètre `VersionConfiguration`. Ce paramètre nous permet de définir un
réglage `MaxQueryableVersions`, qui spécifie le nombre de versions d'un même classement que nous pouvons interroger. Ici, nous l'avons défini sur 12 versions,
ce qui permet d'interroger les 12 classements les plus récents. Le paramètre `ResetInterval` définit la fréquence du processus de réinitialisation. Cette action consiste à
créer un classement avec la même configuration que précédemment, mais vide, et le paramètre de version change comme suit : N = N + 1, avec N = 0 lors de la
création de la définition du classement.

Par exemple, supposons que nous ayons un classement dont le paramètre de version est égal à deux, avec une centaine d'entrées. Lorsque
nous incrémentons la version de ce classement, nous obtenons un nouveau classement vide dont le paramètre de version est égal à trois.
Pendant ce temps, le classement précédent reste dans le système et peut être interrogé.

Le `ResetInterval` peut fonctionner de plusieurs manières. Dans cet exemple, il est mensuel, mais il peut être modifié selon les besoins du développeur. Dans ce cas
particulier, cela signifie que le classement sera réinitialisé automatiquement chaque mois à partir du moment où il a été configuré. Nous prenons en charge les stratégies de réinitialisation suivantes :

* Day
* Hour
* Manual
* Month
* Week

Pour plus d'informations sur toutes les configurations disponibles, consultez la documentation de l'API ici :
[Référence de l'API - Création d'un classement](https://learn.microsoft.com/en-us/rest/api/playfab/progression/leaderboards/create-leaderboard-definition)

## Incrémentation de la version d'un classement

Grâce à cette nouvelle configuration, nous pouvons avoir plusieurs versions du même classement pour le mode tournoi.
Mais que se passe-t-il si nous devons réinitialiser manuellement le classement en raison d'un problème et recommencer le tournoi ?
Dans ce cas, nous pouvons effectuer une réinitialisation manuelle à l'aide de l'API. Voici un exemple utilisant le SDK :

```C# theme={null}

public static async Task ResetLeaderboards(PlayFabAuthenticationContext context, string leaderboardName)
{
    PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);
    IncrementLeaderboardVersionRequest resetLeaderboardRequest = new IncrementLeaderboardVersionRequest()
    {
        AuthenticationContext = context,
        Name = leaderboardName,
    };

    PlayFabResult<PlayFab.LeaderboardsModels.IncrementLeaderboardVersionResponse> resetLeaderboardResponse = await leaderboardsAPI.IncrementLeaderboardVersionAsync(resetLeaderboardRequest);
}

```

## Interrogation des versions antérieures

Si nous devons interroger une version antérieure d'un classement, nous pouvons utiliser le paramètre `version` disponible dans toutes les API GetLeaderboards.
Voici un exemple utilisant le SDK :

```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,
        Version = 1
    };

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

Nous sommes maintenant prêts à relever tous les défis liés à la gestion des versions des classements. Un point important ici est que le nombre de définitions de classement
que nous décidons de conserver en tant que versions fera l'objet d'un comptage, car elles utilisent du stockage dans le service. Pour en savoir plus :

* [Écritures dans les classements](/fr/services/playfab/pricing/meters/leaderboard-meters).

## Conclusions

Dans ce didacticiel, nous avons appris à effectuer les opérations suivantes :

* Créer un classement avec la stratégie de réinitialisation appropriée.
* Incrémenter la version d'un classement.
* Interroger les versions antérieures d'un classement.

## Voir aussi

* [Aller plus loin avec les classements](/fr/services/playfab/community/leaderboards/doing-more-with-leaderboards).
* [Créer un classement de base](/fr/services/playfab/community/leaderboards/create-basic-leaderboard).
* [Classer les joueurs selon les statistiques](/fr/services/playfab/community/leaderboards/leaderboards-linked-to-stats).
* [Classements de groupes](/fr/services/playfab/community/leaderboards/group-leaderboards).
* [Niveaux manuels](/fr/services/playfab/community/leaderboards/manual-tiers).
* [Limites](/fr/services/playfab/community/leaderboards/limits-leaderboards).
* [Quota](/fr/services/playfab/community/leaderboards/quota-leaderboards).
* [Ajouter des données contextuelles aux classements](/fr/services/playfab/community/leaderboards/metadata-leaderboards).
* [Référence de l'API](/fr/services/playfab/community/leaderboards/api-reference).
* [Classements et CloudScript](/fr/services/playfab/community/leaderboards/leaderboards-cloudscript).
* [Classements avec PlayStream](/fr/services/playfab/community/leaderboards/leaderboards-with-playstream-and-telemetry)


## Related topics

- [PFLeaderboardsGetLeaderboardDefinitionResponse](/fr-CA/services/playfab/api-references/c/pfleaderboardstypes/structs/pfleaderboardsgetleaderboarddefinitionresponse.md)
- [PFLeaderboardsLeaderboardDefinition](/fr-CA/services/playfab/api-references/c/pfleaderboardstypes/structs/pfleaderboardsleaderboarddefinition.md)
- [PFLeaderboardsGetEntityLeaderboardResponse](/fr-CA/services/playfab/api-references/c/pfleaderboardstypes/structs/pfleaderboardsgetentityleaderboardresponse.md)
- [PFLeaderboardsLeaderboardEntryUpdate](/fr/services/playfab/api-references/c/pfleaderboardstypes/structs/pfleaderboardsleaderboardentryupdate.md)
- [Vue d'ensemble de l'API C Services - PFLeaderboards.h](/fr/services/playfab/api-references/c/pfleaderboards/pfleaderboards_members.md)
