Mark
Prijzen Aanmelden
← Alle artikelen

Winrates per personage bijhouden in een vechtgame

Mike Dalton Door Mike Dalton ·

Een vechtgamescherm met twee vechters, twee levensbalken en een VS-badge naast het Game Stats AI-logo, met een pijl naar een dashboardkaart met een staafgrafiek.

De winrate van een personage is het aandeel van de potjes met dat personage dat gewonnen werd. In een vechtgame is dat het eerste getal om naar te kijken bij het balanceren van de selectie: een personage ver boven de 50% is waarschijnlijk te sterk, en een personage ver eronder waarschijnlijk te zwak. Algemene analyticstools kunnen hem berekenen uit aangepaste events, maar dan bouw je het rapport zelf; deze vergelijking van game-analyticstools zet de opties op een rij.

Om te laten zien hoe dat eruitziet, hebben we een voorbeeld-vechtgame opgezet met zes personages en 600 matches verdeeld over twee versies, 1.0.0 en 1.1.0. Versie 1.1.0 maakte een personage genaamd Volt zwakker en een personage genaamd Frost sterker.

Stap 1: kies een token

Matchresultaten kunnen uit de gameclient komen of van een matchserver die je zelf beheert. Gebruik een server-token als een server ze verstuurt, of een client-token als de gameclient dat doet. Maak het token aan bij Instellingen > API-tokens, waar je ook je account-id vindt.

De voorbeelden hieronder gebruiken curl met beide waarden in omgevingsvariabelen:

export GAMESTATS_TOKEN=your_api_token
export ACCOUNT_ID=your_account_id

Stap 2: verstuur je personages

Stuur elk personage één keer naar het characters-endpoint, met de versie waarin het voor het eerst voorkomt. De external_id is het id dat je game voor het personage gebruikt, en name is wat de rapporten tonen:

curl -i -X POST "https://gamestats.ai/api/v1/accounts/$ACCOUNT_ID/characters" \
  -H "Authorization: Bearer $GAMESTATS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"external_id": "volt", "name": "Volt", "version_name": "1.0.0"}'

version_name is verplicht. Zonder die waarde antwoordt de API met 422 en wordt er niets opgeslagen.

Stap 3: verstuur elke match

Stuur een match naar het matches-endpoint zodra die afgelopen is. Elke speler krijgt een win- en een loss-waarde van 1 of 0, en een match-event dat aangeeft met welk personage hij speelde:

curl -i -X POST "https://gamestats.ai/api/v1/accounts/$ACCOUNT_ID/matches" \
  -H "Authorization: Bearer $GAMESTATS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "external_id": "match_8f3a2c",
    "version_name": "1.1.0",
    "match_at": "2026-10-09T20:15:00Z",
    "match_players": [
      {
        "username": "player_3e8",
        "match_attributes": {"win": 1, "loss": 0},
        "match_events": [{"character_external_id": "volt", "event_type_name": "chosen_character"}]
      },
      {
        "username": "player_40d",
        "match_attributes": {"win": 0, "loss": 1},
        "match_events": [{"character_external_id": "frost", "event_type_name": "chosen_character"}]
      }
    ]
  }'

Een 201-antwoord betekent dat de match is geaccepteerd. Spelers en versies worden aangemaakt bij het eerste gebruik. De external_id identificeert de match, dus als je dezelfde match opnieuw verstuurt, wordt die bijgewerkt in plaats van dubbel geteld.

Doordat win als 1 of 0 wordt vastgelegd, werkt de winrate: het gemiddelde van win over de potjes van een personage is het aandeel van die potjes dat het won.

Stap 4: bouw een personagerapport

Kies bij Rapporten > Nieuw rapport voor Personagerapport, geef het een label en voeg drie wedstrijdmetrieken toe:

Metriektype Attribuut Label Getalnotatie
Gemiddelde win Win Rate Percentage
Som win Wins Ongeformatteerd
Som loss Losses Ongeformatteerd

Het formulier voor een wedstrijdmetriek met Gemiddelde, het attribuut win, het label Win Rate en de notatie Percentage geselecteerd.

Voeg Win Rate als eerste toe: de grafiek van het rapport toont de eerste metriek, dus dan laat de grafiek de winrate per personage zien. Zet de precisie op 1 om één decimaal te tonen.

Stap 5: vergelijk versies

Het rapport opent gefilterd op je nieuwste versie, en bij elke waarde staat hoeveel die veranderd is ten opzichte van de versie ervoor:

Een personagerapport voor versie 1.1.0 met de winrate, overwinningen en nederlagen van elk personage, en onder elke waarde de verandering ten opzichte van versie 1.0.0.

In de voorbeeldgame deden de wijzigingen in 1.1.0 wat ze moesten doen. De winrate van Volt daalde 14.8 punten naar 49.0%, en die van Frost steeg 13.1 punten naar 48.9%. Alle personages zitten nu tussen 45% en 55%.

Wil je een oudere patch bekijken, kies dan die versie in de filters: het rapport vergelijkt die met de versie ervoor, als die bestaat. Selecteer meer dan één versie om ze gecombineerd te zien, zonder de veranderingen.

Houd rekening met de steekproefgrootte. In het voorbeeld heeft elk personage ongeveer 100 potjes per versie, dus een verschil van een paar punten ten opzichte van 50% kan nog toeval zijn. Een grote verschuiving zoals bij Volt is een duidelijker signaal. Een game balanceren met data laat zien hoeveel matches je nodig hebt voordat een verandering zich onderscheidt van ruis.

Je kunt een AI-assistent ook vragen stellen over hetzelfde rapport. Claude Code vragen stellen over je gamedata met MCP gebruikt deze voorbeeldgame.

Lees verder

© 2026 Rowhome Labs, LLC