Ideas y funciones para tu juego

Tu próxima función

Partidas

Juegos por turnos con revisiones explícitas, estado opaco e informes de resultados separados.

SDK: developRequiere una sesión de jugador
Unity
Ilustración de Partidas
El resultado visible

Coordina una sala, turnos alternos e informes finales independientes con dos sesiones de jugador.

Vídeo próximamente

Este paso aún no tiene vídeo. La guía y la solicitud MCP ya se pueden utilizar.

Partidas por turnos

Preparar el mismo proyecto

  1. Selecciona en el panel el mismo proyecto que en la configuración de tu juego.

    Partidas →
  2. La primera petición no necesita otra definición. Un resultado vacío es válido mientras no existan datos del juego.

    Usa dos sesiones de jugador distintas: crea una sala, únete, inicia con orden explícito, alterna estados de bytes e informa del mismo resultado final de forma independiente.

    Este primer ejemplo lee datos. No crea grupos, partidas ni objetos. Una lista vacía es una primera respuesta válida.

Implementa esta función

Puedes consultar la guía. Para ejecutarla necesitas una clave de proyecto activa. Preparar el proyecto

SDK instalado, configuración del proyecto importada y jugador conectado.

Este ejemplo del SDK usa develop. Comprueba si las API necesarias están disponibles en el SDK instalado.

Completad la conexión de inicio rápido con el jugador elegido. Llamad a ReadMyMatches() mediante un botón o acción de escena explícita. Abrir el archivo no envía peticiones.

C#
Assets/Scripts/MatchesDemo.cs
Llamada a 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 el ejemplo completo del SDK ↗

Dos jugadores, un turno original

Usa dos sesiones de jugador distintas: crea una sala, únete, inicia con orden explícito, alterna estados de bytes e informa del mismo resultado final de forma independiente.

Guarda la solicitud exacta antes de enviarla. Tras un tiempo agotado, lee el estado y concilia. Nunca sustituyas silenciosamente la revisión ni la intención original.

Los informes usan la revisión final inmutable. Coincidir no demuestra una victoria fiable; las discrepancias y los informes ausentes no determinan un ganador.

Las rondas clasificadas requieren una partida clasificada confirmada y el flujo existente de Validated Actions. Los informes normales no conceden premios.

PHP admite las rutas REST de partidas normales. La validación clasificada y el tiempo real no están disponibles; se devuelve FEATURE_NOT_SUPPORTED cuando corresponde.

Prueba tu nueva función.

Coordina una sala, turnos alternos e informes finales independientes con dos sesiones de jugador.

Selecciona en el panel el mismo proyecto que en la configuración de tu juego.

Endpoints de la 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 los endpoints en la referencia de la API
Nuestra sugerencia para el siguiente paso

Dale una puntuación máxima a cada partida.

Guarda la puntuación después de una partida y muestra quién va primero. Sigue usando tu conexión y la sesión del jugador.