Sobes.tech
Senior

Formalizacija zahtevov za sistem ujemanja: kako iskati tekmo, kaj storiti, če tekma ni najdena, kako validirati poteze, ali je potreben časovnik, kako posodobiti oceno, ali je potrebna zgodovina iger, kaj storiti ob prekinitvi povezave?

sobes.tech AI

Odpoveď 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 проверяет критерии поиска (рейтинг, регион и т.д.).