Ideias e funcionalidades do jogo

A tua próxima funcionalidade

Partidas

Jogos por turnos com revisões explícitas, estado opaco e relatórios de resultados separados.

SDK: developRequer uma sessão de jogador
Unity
Ilustração de Partidas
O resultado visível

Coordene uma sala, turnos alternados e relatórios finais independentes com duas sessões de jogador.

Vídeo em breve

Este passo ainda não tem vídeo. O guia e o pedido MCP já podem ser usados.

Partidas por turnos

Preparar o mesmo projeto

  1. Seleciona no painel o mesmo projeto que na configuração do teu jogo.

    Partidas →
  2. O primeiro pedido não exige outra definição. Um resultado vazio é válido enquanto faltarem dados do jogo.

    Use duas sessões distintas: crie uma sala, entre, inicie com ordem explícita, alterne estados em bytes e relate independentemente o mesmo resultado final.

    Este primeiro exemplo lê dados. Não cria grupos, partidas nem objetos. Uma lista vazia é uma primeira resposta válida.

Integra esta funcionalidade

Podes consultar o guia. Para o executar, precisas de uma chave de projeto ativa. Preparar o projeto

SDK instalado, configuração do projeto importada e jogador com sessão iniciada.

Este exemplo do SDK usa develop. Verifica se as API necessárias existem no SDK instalado.

Concluam a ligação do início rápido com o jogador escolhido. Chamem ReadMyMatches() através de um botão ou ação explícita da cena. Abrir o ficheiro não envia pedidos.

C#
Assets/Scripts/MatchesDemo.cs
Chamada ao horizOn
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.
Abrir o exemplo SDK completo ↗

Dois jogadores, um turno original

Use duas sessões distintas: crie uma sala, entre, inicie com ordem explícita, alterne estados em bytes e relate independentemente o mesmo resultado final.

Guarde o pedido exato antes de enviar. Após expiração, leia o estado e reconcilie. Nunca substitua silenciosamente a revisão ou intenção original.

Os relatórios usam a revisão final imutável. A concordância não prova uma vitória fiável; divergências e relatórios ausentes não determinam vencedores.

As rondas classificadas requerem uma partida classificada confirmada e o fluxo Validated Actions existente. Relatórios comuns não atribuem recompensas.

PHP suporta as rotas REST comuns. Validação classificada e tempo real estão indisponíveis e devolvem FEATURE_NOT_SUPPORTED quando necessário.

Testa a tua nova funcionalidade.

Coordene uma sala, turnos alternados e relatórios finais independentes com duas sessões de jogador.

Seleciona no painel o mesmo projeto que na configuração do teu jogo.

Endpoints da API
  • 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
Todos os endpoints na referência da API
A nossa sugestão para o próximo passo

Dá uma pontuação máxima a cada partida.

Guarda a pontuação depois de uma partida e mostra quem está à frente. Continua a usar a ligação e a sessão do jogador.