Разработка игры: как распределять места при одинаковых очках

В задании на игру написано «показать топ-2». У одного игрока сто очков, у двух других — по девяносто. Дизайнер нарисовал две строки, разработчик включил троих участников по месту в рейтинге, а заказчик ожидал ровно двух. Все обсуждали одну подпись, но подразумевали разные правила. Их лучше согласовать до разработки таблицы рекордов.
Результат игрока и строка таблицы — разные сущности
Сначала определите, какой результат сравнивается: лучшая попытка, последняя попытка или сумма за сезон. Одна строка должна описывать выбранный результат одного участника, а не случайную попытку из журнала. В учебной форме уже передан готовый снимок с уникальным ID игрока и целыми очками. Большее значение считается лучшим.
- Место с пропусками
- Одинаковые очки дают одинаковое место. Следующее место учитывает количество всех участников выше. Последовательность может выглядеть как 1, 2, 2, 4, 4.
- Плотное место
- Каждый новый результат получает следующий номер группы. При равенстве очков номер общий, но пропусков между группами нет: 1, 2, 2, 3, 3.
- Номер строки
- Каждая отображаемая запись получает свой номер: 1, 2, 3, 4, 5. Даже равные результаты занимают разные строки. Это порядок показа, который сам по себе не объясняет превосходство одного игрока.
Пять участников — три разных ответа на «топ»
| ID | Очки | Номер строки | Место с пропусками | Плотное место | Попадёт ли в первые 2 строки |
|---|---|---|---|---|---|
| A | 100 | 1 | 1 | 1 | Да |
| B | 90 | 2 | 2 | 2 | Да |
| C | 90 | 3 | 2 | 2 | Нет: срез прошёл внутри равной группы |
| D | 80 | 4 | 4 | 3 | Нет |
| E | 80 | 5 | 4 | 3 | Нет |
В первые две строки входят A и B. По месту с пропусками не выше второго входят A, B и C. По плотному месту не выше второго здесь тоже входят трое. C не стал хуже B из-за того, что его ID оказался позже в технической сортировке: разница возникла только при ограничении числа строк.
Что изменится, если написать «первые три места»?
По месту с пропусками это A, B и C: следующая группа занимает четвёртое место. По плотному месту это уже все пятеро, поскольку D и E относятся к третьей группе результатов. Фиксированный срез из трёх строк также даст A, B и C, но по другой причине. Совпадение списков в одном примере не означает одинаковых правил.
Дополнительный критерий должен быть частью правил
Если продукту нужны строго два места без совместного результата, заранее определите, чем разрешать равенство: например, дополнительным измеряемым показателем или отдельным действием участников. Выбранный критерий надо показать пользователю и проверить на данных. Не подставляйте незаметно время регистрации, порядок загрузки или внутренний ID только потому, что так проще получить две строки.
В документации PostgreSQL различаются row_number, rank и dense_rank. Равенство определяется полями сортировки соответствующей операции. Если к очкам добавить уникальный ID именно в определение равных результатов, участники перестанут образовывать одну группу. Для нужного интерфейса порядок строк и расчёт общего места могут требовать разных правил.
Пример формулировки для задания: «Сравниваем выбранный результат сезона. Равные очки дают общее место с пропусками. Показываем всех с местом не выше N; число строк может быть больше N. Внутри равной группы ID упорядочивает показ, но не меняет место».
Это один возможный вариант, а не обязательная рекомендация для всех игр. Для компактного экрана допустим ограниченный список строк, но тогда желательно обозначить, что это часть общей таблицы, а не полный список участников с общим местом. Инструмент показывает обе интерпретации, чтобы заказчик мог выбрать осознанно.
Откуда берётся единственный результат участника
До ранжирования нужно согласовать правило обновления записи. Например, документация Steamworks отдельно описывает сохранение лучшего результата и принудительное обновление новым. Это показывает, почему «отправить очки» и «посчитать место» — разные решения. Наша форма не подключается к Steam и не воспроизводит его порядок обработки равенства.
Для гонки по времени может быть лучше меньшее значение, а не большее. Для сезона важны границы периода, допуск участников и момент фиксации снимка. Эти условия отсутствуют в калькуляторе: он получает один готовый набор, не выбирает лучшую попытку, не объединяет аккаунты и не проверяет подлинность очков.
Что проверить на приёмке
- Все участники набрали одинаково: общее место должно соответствовать выбранному правилу.
- Граница N проходит внутри равной группы: сравните срез строк и допуск по месту.
- Участников меньше N: не добавляйте пустые места как реальных игроков.
- Исходные строки пришли в другом порядке: при тех же ID и очках расчёт не должен случайно меняться.
- Новый результат изменил верхнюю часть таблицы: зафиксируйте, какую версию увидел игрок.
Форма принимает до ста участников и порог N от одного до ста. Очки — целые числа, включая ноль и отрицательные значения в техническом диапазоне. Это пределы учебной проверки, не ограничения игры или платформы. Отдельный признак показывает, разрезает ли срез строк равную группу, и перечисляет включённых и оставшихся участников этой группы.
При заказе браузерной игры или другого игрового проекта передайте разработчику маленькую таблицу с ожидаемыми местами и списком при выбранном N. Так правило можно проверить до создания красивого экрана. Аутентификация, серверная проверка результата, обновление сезона и интеграция с площадкой остаются отдельными частями разработки.
Сравнить места и границу списка при равных очках
Один готовый снимок с одним результатом на участника; больше очков лучше. Место с пропусками, плотное место и номер строки считаются отдельно. При равенстве очков ASCII-ID задаёт лишь порядок строк. Форма показывает списки по порогу N и разрез равной группы фиксированным срезом. Нет выбора попытки, сезонов, подлинности результатов, античита, платформенных API, призов или назначения дополнительного игрового преимущества. Расчёт выполняется на вашем устройстве, введённые данные никуда не отправляются.
Материалы для проверки
Если нужна реализация
Состав работ зависит от текущего проекта и подтверждённой причины. Можно обсудить диагностику или разработку подходящего решения.
