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

# Código de ejemplo para tablas de clasificación basadas en eventos

> Ejemplos de código XSAPI para tablas de clasificación basadas en eventos de XBOX Live, incluidos los mejores resultados, la paginación y el centrado en torno a un rango o jugador especificado.

Este tema proporciona código de ejemplo para la visualización básica de una tabla de clasificación, la obtención de una página de resultados especificada, el salto a un jugador especificado en la tabla de clasificación y la obtención de la página siguiente de tablas de clasificación.

Este tema abarca lo siguiente:

* [Obtención de la parte superior de una tabla de clasificación](#gttoal)
* [Obtención de una tabla de clasificación en torno a un rango especificado](#galaasr)
* [Obtención de una tabla de clasificación en torno a un jugador especificado](#galaasp)
* [Obtención de la página siguiente de tablas de clasificación](#gtnpol)

<a id="gttoal" />

## Obtención de la parte superior de una tabla de clasificación

Use [XblLeaderboardGetLeaderboardAsync](/reference/live/xsapi-c/leaderboard_c/functions/xblleaderboardgetleaderboardasync) para devolver los valores de la tabla de clasificación especificada, comenzando desde la parte superior de la tabla de clasificación. Al consultar una tabla de clasificación respaldada por una estadística de usuario basada en eventos, asegúrese de establecer el campo `queryType` en `XblLeaderboardQueryType::UserStatBacked`.

### Visualización básica de una tabla de clasificación (API de C plana)

#### API de C plana

```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();
}
```

Para obtener más información, consulte lo siguiente:

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

<a id="galaasr" />

## Obtención de una tabla de clasificación en torno a un rango especificado

Reemplace el bloque de código de 4 líneas que crea una instancia de la consulta de tabla de clasificación y la configura en el ejemplo anterior de consulta básica de tabla de clasificación (API de C plana) por el siguiente bloque de código para obtener una página de resultados especificada de una consulta de tabla de clasificación.

### Obtener una página de resultados especificada (C)

#### API de C plana

```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;
```

Para obtener más información, consulte [XblLeaderboardQuery](/reference/live/xsapi-c/leaderboard_c/structs/xblleaderboardquery).

<a id="galaasp" />

## Obtención de una tabla de clasificación en torno a un jugador especificado

Reemplace el bloque de código de 4 líneas que crea una instancia de la consulta de tabla de clasificación y la configura en el ejemplo anterior de consulta básica de tabla de clasificación (API de C plana) por el siguiente bloque de código para obtener una tabla de clasificación en torno a un jugador especificado.

#### API de C plana

```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;
```

Para obtener más información, consulte [XblLeaderboardQuery](/reference/live/xsapi-c/leaderboard_c/structs/xblleaderboardquery).

<a id="gtnpol" />

## Obtención de la página siguiente de tablas de clasificación

Para obtener la página siguiente de un resultado de tabla de clasificación anterior, llame a [XblLeaderboardResultGetNextAsync](/reference/live/xsapi-c/leaderboard_c/functions/xblleaderboardresultgetnextasync) como se muestra en el siguiente código de ejemplo.

#### API de C plana

```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();
}
```

Para obtener más información, consulte lo siguiente:

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


## Related topics

- [Código de ejemplo de Estadísticas y tablas de clasificación basadas en eventos](/es/services/xbox-services/player-data/stats-leaderboards/event-based/how-to/live-statslb-eb-howto-nav.md)
- [Tablas de clasificación](/es/build/steam-porting-guide/features/steam-leaderboards.md)
- [Estadísticas y tablas de clasificación basadas en eventos](/es/services/xbox-services/player-data/stats-leaderboards/event-based/live-statslb-eb-nav.md)
- [Información general sobre las tablas de clasificación basadas en eventos](/es/services/xbox-services/player-data/stats-leaderboards/event-based/live-leaderboards-eb-overview.md)
- [Configuración en el portal de tablas de clasificación basadas en eventos](/es/services/xbox-services/player-data/stats-leaderboards/event-based/config/live-eb-leaderboards-portal.md)
