Идеи и функции для игры

Ваша следующая функция

Матчи

Пошаговые игры с явными ревизиями, непрозрачным состоянием и отдельными отчётами о результатах.

SDK: developТребуется сессия игрока
Unity
Иллюстрация функции «Матчи»
Видимый результат

Координируйте лобби, чередующиеся ходы и независимые итоговые отчёты с двумя сессиями игроков.

Видео появится позже

Для этого шага пока нет видео. Инструкция и запрос MCP уже доступны.

Пошаговые матчи

Подготовьте тот же проект

  1. Выберите в панели тот же проект, что указан в конфигурации игры.

    Матчи →
  2. Для первого запроса дополнительное определение не нужно. Пустой результат допустим, пока нет соответствующих игровых данных.

    Используйте две отдельные сессии: создайте лобби, присоединитесь, задайте порядок, чередуйте байтовые состояния и независимо сообщите одинаковый конечный результат.

    Первый пример читает данные. Он не создаёт группу, матч или объект. Пустой список является допустимым первым ответом.

Добавьте эту функцию

Вы можете просмотреть руководство. Для выполнения нужен активный ключ проекта. Подготовить проект

SDK установлен, конфигурация проекта импортирована, игрок вошёл в систему.

Этот пример SDK использует develop. Проверьте наличие нужных API в установленном SDK.

Завершите подключение нужного игрока по быстрому старту. Вызовите ReadMyMatches() явной кнопкой или действием сцены. Открытие файла само по себе запрос не отправляет.

C#
Assets/Scripts/MatchesDemo.cs
Вызов 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.
Открыть полный пример SDK ↗

Два игрока, один исходный ход

Используйте две отдельные сессии: создайте лобби, присоединитесь, задайте порядок, чередуйте байтовые состояния и независимо сообщите одинаковый конечный результат.

Сохраните точный запрос до отправки. После тайм-аута прочитайте состояние и выполните сверку. Не подменяйте ревизию или исходное намерение незаметно.

Отчёты используют неизменную конечную ревизию. Совпадение не доказывает достоверную победу; разногласия и отсутствующие отчёты не определяют победителя.

Рейтинговые запуски требуют подтверждённого рейтингового матча и существующего процесса Validated Actions. Обычные отчёты не выдают награды.

PHP поддерживает обычные REST-маршруты матчей. Рейтинговая проверка и реальное время недоступны; при необходимости возвращается FEATURE_NOT_SUPPORTED.

Проверьте новую функцию.

Координируйте лобби, чередующиеся ходы и независимые итоговые отчёты с двумя сессиями игроков.

Выберите в панели тот же проект, что указан в конфигурации игры.

Эндпоинты
  • 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
Все эндпоинты в справочнике API
Наше предложение для следующего шага

Добавьте рекорд для каждого раунда.

Сохраняйте результат после раунда и показывайте лидеров. Продолжайте использовать подключение и сессию игрока.