Spelideeën en functies

Je volgende functie

Wedstrijden

Beurtspellen met expliciete revisies, ondoorzichtige status en afzonderlijke resultaatrapporten.

SDK: developSpelerssessie vereist
Unity
Illustratie van Wedstrijden
Je zichtbare resultaat

Coördineer met twee spelerssessies een lobby, afwisselende beurten en onafhankelijke eindrapporten.

Video volgt

Voor deze stap is nog geen video. De handleiding en MCP-opdracht zijn al bruikbaar.

Beurtgebaseerde wedstrijden

Hetzelfde project voorbereiden

  1. Kies in het dashboard hetzelfde project als in de configuratie van je spel.

    Wedstrijden →
  2. Voor het eerste verzoek is geen extra definitie nodig. Een leeg resultaat is geldig zolang bijpassende spelgegevens ontbreken.

    Gebruik twee aparte spelerssessies: maak een lobby, neem deel, start in expliciete volgorde, wissel bytebeurten af en rapporteer onafhankelijk hetzelfde eindresultaat.

    Dit eerste voorbeeld leest gegevens. Het maakt geen groep, wedstrijd of object. Een lege lijst is een geldig eerste antwoord.

Bouw deze functie

Je kunt de handleiding bekijken. Voor uitvoering heb je een actieve projectsleutel nodig. Project voorbereiden

SDK geïnstalleerd, projectconfiguratie geïmporteerd en speler aangemeld.

Dit SDK-voorbeeld gebruikt develop. Controleer of de benodigde API's in je geïnstalleerde SDK bestaan.

Voltooi de Quickstart-verbinding met de bedoelde speler. Roep ReadMyMatches() expliciet aan via een knop of scèneactie. Alleen het bestand openen verstuurt geen verzoek.

C#
Assets/Scripts/MatchesDemo.cs
horizOn-aanroep
1using UnityEngine;
2using PM.horizOn.Cloud.Manager;
3​
4public sealed class MatchesDemo : MonoBehaviour
5{
6 // Initialize/connect and restore the existing player in the Quickstart first.
7 // Invoke explicitly. The SDK also enforces the returned polling cadence.
8 public async void ReadMyMatches()
9 {
10 var user = UserManager.Instance.CurrentUser;
11 if (user == null || !user.IsValid()) return;
12 var result = await MatchesManager.Instance.GetMatches(user.UserId);
13 if (!result.IsSuccess) { Debug.LogWarning(result.ErrorCode); return; }
14 Debug.Log($"Ledger revision: {result.Data.revision}");
15 foreach (var match in result.Data.recent)
16 Debug.Log($"Match {match.id}: {match.status}");
17 // Recent may include an active match after this player's forfeit.
18 // Respect result.Data.pollAfterSeconds; no background poll or automatic timeout.
19 }
20}
21// Full two-player recipe: SDK Examples/MatchesExample and MatchesSampleStore.
22// ReadLedger/ReadMatch -> SaveCreateAfterLedgerReview/SaveActionAfterMatchReview.
23// ApplySavedIntent sends one durable original body/revision. Unknown create is reconciled.
24// Never replace a pending original with the revision from a later read.
25// ReportResult uses the original finalStateRevision/result bytes/sorted winnerIds.
26// Ordinary consensus is not trusted victory proof. Ranked runs use Validated Actions.
Volledig SDK-voorbeeld openen ↗

Twee spelers, één oorspronkelijke beurt

Gebruik twee aparte spelerssessies: maak een lobby, neem deel, start in expliciete volgorde, wissel bytebeurten af en rapporteer onafhankelijk hetzelfde eindresultaat.

Sla het exacte verzoek vóór verzending op. Lees na een time-out de status en stem af. Vervang revisie of oorspronkelijke intentie nooit stilzwijgend.

Rapporten gebruiken de onveranderlijke eindrevisie. Overeenstemming bewijst geen betrouwbare overwinning; afwijkende of ontbrekende rapporten bepalen geen winnaar.

Ranglijstruns vereisen een bevestigde ranglijstwedstrijd en de bestaande Validated Actions-pijplijn. Gewone rapporten geven geen beloningen.

PHP ondersteunt gewone wedstrijd-REST-routes. Ranglijstvalidatie en realtime zijn niet beschikbaar en geven waar nodig FEATURE_NOT_SUPPORTED.

Test je nieuwe functie.

Coördineer met twee spelerssessies een lobby, afwisselende beurten en onafhankelijke eindrapporten.

Kies in het dashboard hetzelfde project als in de configuratie van je spel.

Eindpunten
  • GET/matches
  • GET/matches/limits
  • GET/matches/open
  • GET/matches/{matchId}
  • POST/matches
  • POST/matches/{matchId}/join
  • POST/matches/{matchId}/decline
  • POST/matches/{matchId}/start
  • POST/matches/{matchId}/turn
  • POST/matches/{matchId}/timeout
  • POST/matches/{matchId}/leave
  • POST/matches/{matchId}/cancel
  • POST/matches/{matchId}/result
  • POST/matches/{matchId}/ranked-run
Alle eindpunten in de API-referentie
Onze suggestie voor je volgende stap

Geef elke ronde een topscore.

Sla de score na een ronde op en laat zien wie vooropstaat. Blijf je verbinding en de sessie van de speler gebruiken.