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

# Exemples de code pour les classements basés sur les événements

> Exemples de code XSAPI pour les classements XBOX Live basés sur les événements, notamment les meilleurs résultats, la pagination et le centrage autour d'un rang ou d'un joueur spécifié.

Cette rubrique fournit des exemples de code pour l'affichage de base d'un classement, l'obtention d'une page de résultats spécifiée, le saut jusqu'à un joueur spécifié dans le classement et l'obtention de la page suivante des classements.

Cette rubrique couvre les points suivants :

* [Obtenir le haut d'un classement](#gttoal)
* [Obtenir un classement autour d'un rang spécifié](#galaasr)
* [Obtenir un classement autour d'un joueur spécifié](#galaasp)
* [Obtenir la page suivante des classements](#gtnpol)

<a id="gttoal" />

## Obtenir le haut d'un classement

Utilisez [XblLeaderboardGetLeaderboardAsync](/fr-CA/reference/live/xsapi-c/leaderboard_c/functions/xblleaderboardgetleaderboardasync) pour retourner les valeurs du classement spécifié, en commençant par le haut du classement. Lorsque vous interrogez un classement reposant sur une statistique utilisateur basée sur les événements, veillez à définir le champ `queryType` sur `XblLeaderboardQueryType::UserStatBacked`.

### Affichage de base d'un classement (API C plate)

#### API C plate

```cpp theme={null}
auto asyncBlock = std::make_unique<XAsyncBlock>();
asyncBlock->queue = queue;
asyncBlock->context = nullptr;
asyncBlock->callback = [](XAsyncBlock* asyncBlock)
{
    std::unique_ptr<XAsyncBlock> asyncBlockPtr{ asyncBlock }; // Take over ownership of XAsyncBlock*.
    size_t resultSize;
    HRESULT hr = XblLeaderboardGetLeaderboardResultSize(asyncBlock, &resultSize);

    if (SUCCEEDED(hr))
    {
        leaderboardBuffer.resize(resultSize);
        XblLeaderboardResult* leaderboard{};

        hr = XblLeaderboardGetLeaderboardResult(asyncBlock, resultSize, leaderboardBuffer.data(), &leaderboard, nullptr);

        if (SUCCEEDED(hr))
        {
            // Use XblLeaderboardResult in result.
            for (auto row = 0u; row < leaderboard->rowsCount; ++row)
            {
                std::stringstream rowText;
                rowText << leaderboard->rows[row].xboxUserId << "\t";

                for (auto column = 0u; column < leaderboard->rows[row].columnValuesCount; ++column)
                {
                    rowText << leaderboard->rows[row].columnValues[column] << "\t";
                }
            }
        }
    }
};

// Instantiate and configure the leaderboard query.
XblLeaderboardQuery leaderboardQuery = {}; 
pal::strcpy(leaderboardQuery.scid, sizeof(leaderboardQuery.scid), scid.c_str()) 
leaderboardQuery.leaderboardName = leaderboardName.c_str(); 
leaderboardQuery.queryType = XblLeaderboardQueryType::UserStatBacked;
// For more leaderboard query options, replace the 4-line code block 
// that precedes this comment as indicated in other examples.

HRESULT hr = XblLeaderboardGetLeaderboardAsync(
    xboxLiveContext,
    leaderboardQuery,
    asyncBlock.get());
if (SUCCEEDED(hr))
{
    // The call succeeded, so release the std::unique_ptr ownership of XAsyncBlock* because the callback will take over ownership.
    // If the call fails, std::unique_ptr will keep ownership and delete XAsyncBlock*.
    asyncBlock.release();
}
```

Pour plus de renseignements, consultez les rubriques suivantes :

* [XAsyncBlock](/fr-CA/reference/system/xasync/structs/xasyncblock)
* [XblLeaderboardGetLeaderboardAsync](/fr-CA/reference/live/xsapi-c/leaderboard_c/functions/xblleaderboardgetleaderboardasync)
* [XblLeaderboardGetLeaderboardResult](/fr-CA/reference/live/xsapi-c/leaderboard_c/functions/xblleaderboardgetleaderboardresult)
* [XblLeaderboardGetLeaderboardResultSize](/fr-CA/reference/live/xsapi-c/leaderboard_c/functions/xblleaderboardgetleaderboardresultsize)
* [XblLeaderboardQuery](/fr-CA/reference/live/xsapi-c/leaderboard_c/structs/xblleaderboardquery)
* [XblLeaderboardResult](/fr-CA/reference/live/xsapi-c/leaderboard_c/structs/xblleaderboardresult)

<a id="galaasr" />

## Obtenir un classement autour d'un rang spécifié

Remplacez le bloc de code de 4 lignes qui instancie et configure la requête de classement dans l'exemple précédent de requête de classement de base (API C plate) par le bloc de code suivant pour obtenir une page de résultats spécifiée d'une requête de classement.

### Obtenir une page de résultats spécifiée (C)

#### API C plate

```cpp theme={null}
XblLeaderboardQuery leaderboardQuery = {};
pal::strcpy(leaderboardQuery.scid, sizeof(leaderboardQuery.scid), scid.c_str());
leaderboardQuery.leaderboardName = leaderboardName.c_str();
leaderboardQuery.skipResultToRank = 100;
leaderboardQuery.maxItems = 100;
leaderboardQuery.queryType = XblLeaderboardQueryType::UserStatBacked;
```

Pour plus de renseignements, consultez [XblLeaderboardQuery](/fr-CA/reference/live/xsapi-c/leaderboard_c/structs/xblleaderboardquery).

<a id="galaasp" />

## Obtenir un classement autour d'un joueur spécifié

Remplacez le bloc de code de 4 lignes qui instancie et configure la requête de classement dans l'exemple précédent de requête de classement de base (API C plate) par le bloc de code suivant pour obtenir un classement autour d'un joueur spécifié.

#### API C plate

```cpp theme={null}
XblLeaderboardQuery leaderboardQuery = {};
pal::strcpy(leaderboardQuery.scid, sizeof(leaderboardQuery.scid), scid.c_str());
leaderboardQuery.leaderboardName = leaderboardName.c_str();
leaderboardQuery.skipToXboxUserId = xboxUserId;
leaderboardQuery.maxItems = 100;
leaderboardQuery.queryType = XblLeaderboardQueryType::UserStatBacked;
```

Pour plus de renseignements, consultez [XblLeaderboardQuery](/fr-CA/reference/live/xsapi-c/leaderboard_c/structs/xblleaderboardquery).

<a id="gtnpol" />

## Obtenir la page suivante des classements

Pour obtenir la page suivante d'un résultat de classement précédent, appelez [XblLeaderboardResultGetNextAsync](/fr-CA/reference/live/xsapi-c/leaderboard_c/functions/xblleaderboardresultgetnextasync) comme indiqué dans l'exemple de code suivant.

#### API C plate

```cpp theme={null}
auto asyncBlock = std::make_unique<XAsyncBlock>();
asyncBlock->queue = queue;
asyncBlock->context = nullptr;
asyncBlock->callback = [](XAsyncBlock* asyncBlock)
{
    std::unique_ptr<XAsyncBlock> asyncBlockPtr{ asyncBlock }; // Take over ownership of XAsyncBlock*.
    size_t resultSize;
    HRESULT hr = XblLeaderboardResultGetNextResultSize(asyncBlock, &resultSize);

    if (SUCCEEDED(hr))
    {
        std::vector<char> buffer(resultSize, 0);
        XblLeaderboardResult* result{};

        hr = XblLeaderboardResultGetNextResult(asyncBlock, resultSize, buffer.data(), &result, nullptr);
        // Use result to read the leaderboard results.
    }
};

HRESULT hr = XblLeaderboardResultGetNextAsync(
    xboxLiveContext,
    leaderboardResult,
    maxItems,
    asyncBlock.get());
if (SUCCEEDED(hr))
{
    // The call succeeded, so release the std::unique_ptr ownership of XAsyncBlock* because the callback will take over ownership.
    // If the call fails, std::unique_ptr will keep ownership and delete XAsyncBlock*.
    asyncBlock.release();
}
```

Pour plus de renseignements, consultez les rubriques suivantes :

* [XAsyncBlock](/fr-CA/reference/system/xasync/structs/xasyncblock)
* [XblLeaderboardResult](/fr-CA/reference/live/xsapi-c/leaderboard_c/structs/xblleaderboardresult)
* [XblLeaderboardResultGetNextAsync](/fr-CA/reference/live/xsapi-c/leaderboard_c/functions/xblleaderboardresultgetnextasync)
* [XblLeaderboardResultGetNextResult](/fr-CA/reference/live/xsapi-c/leaderboard_c/functions/xblleaderboardresultgetnextresult)
* [XblLeaderboardResultGetNextResultSize](/fr-CA/reference/live/xsapi-c/leaderboard_c/functions/xblleaderboardresultgetnextresultsize)


## Related topics

- [Exemples de code pour les statistiques et classements basés sur les événements](/fr-CA/services/xbox-services/player-data/stats-leaderboards/event-based/how-to/live-statslb-eb-howto-nav.md)
- [Statistiques et classements basés sur les événements](/fr-CA/services/xbox-services/player-data/stats-leaderboards/event-based/live-statslb-eb-nav.md)
- [Exemple de code pour les événements](/fr-CA/services/xbox-services/player-data/stats-leaderboards/event-based/events/how-to/live-events-howto-nav.md)
- [Exemples de code pour les succès basés sur les événements](/fr-CA/services/xbox-services/player-data/achievements/event-based/how-to/live-achievements-eb-howto-nav.md)
- [Vue d'ensemble des classements basés sur les événements](/fr-CA/services/xbox-services/player-data/stats-leaderboards/event-based/live-leaderboards-eb-overview.md)
