Sobes.tech
Senior

Formalizace požadavků na systém matchmakingu: jak hledat zápas, co dělat, pokud soupeř není nalezen, jak validovat tahy, je potřeba časovač, jak aktualizovat hodnocení, je potřeba historie zápasů, co dělat při odpojení?

sobes.tech AI

Odpověď od AI

Для системы матчмейкинга важно формализовать следующие аспекты:

  1. Поиск матча:

    • Использовать очередь ожидания с фильтрами по рейтингу, региону, уровню и другим параметрам.
    • Периодически расширять критерии поиска, если соперник не найден за заданное время.
  2. Если соперник не найден:

    • Уведомить игрока о задержке и предложить подождать или выйти.
    • Автоматически расширять параметры поиска (например, увеличить допустимый разброс рейтинга).
  3. Валидация ходов:

    • Сервер должен проверять корректность каждого хода по правилам игры.
    • Отбрасывать некорректные или подозрительные ходы.
  4. Таймер:

    • Таймер необходим для ограничения времени хода, чтобы избежать зависаний.
    • При истечении времени ход засчитывается как пропущенный или проигрыш.
  5. Обновление рейтинга:

    • Использовать алгоритмы типа Elo, Glicko или их модификации.
    • Обновлять рейтинг после завершения партии с учетом результата и разницы рейтингов.
  6. История партии:

    • Хранить последовательность ходов для анализа, повторов и разрешения споров.
    • Может использоваться для обучения ИИ или статистики.
  7. Дисконнект:

    • Ввести таймаут на переподключение.
    • Если игрок не вернулся, засчитать поражение или ничью по правилам.
    • Возможна замена игрока ботом для продолжения партии.

Пример упрощенной структуры поиска матча на Go:

func findMatch(player Player, queue []Player) *Player {
    for _, opponent := range queue {
        if isCompatible(player, opponent) {
            return &opponent
        }
    }
    return nil
}

Где isCompatible проверяет критерии поиска (рейтинг, регион и т.д.).