diff --git a/frontend/src/pages/HelpPage.tsx b/frontend/src/pages/HelpPage.tsx index d3765f5..e7fe227 100644 --- a/frontend/src/pages/HelpPage.tsx +++ b/frontend/src/pages/HelpPage.tsx @@ -1,8 +1,12 @@ +import { ChevronDown, ChevronUp } from "lucide-react"; +import { useState } from "react"; + /** - * Справка. Пока — только как считаются очки игроков (рейтинг). В дальнейшем сюда - * добавятся правила, подсказки и прочее. Текст соответствует backend/app/services/scoring.py. + * Справка — разделы, раскрывающиеся по кнопке. Пока раздел один: «Рейтинг» + * (как считаются очки игроков). Текст соответствует backend/app/services/scoring.py. */ export function HelpPage() { + const [showRating, setShowRating] = useState(false); return (
{/* Название страницы уже в верхней панели — в теле только пояснение. */} @@ -13,72 +17,88 @@ export function HelpPage() {

-
-

Очки игроков (рейтинг)

-

- Рейтинг считается только по завершённым партиям. Незавершённые и отменённые - в зачёт не идут. -

-

- За каждую партию игрок получает «очки за место» — они нормированы по числу игроков - за столом, поэтому победа за большим столом ценится выше, чем за маленьким: -

-
- очки = (N − место − (размер_ничьей − 1) / 2) / (N − 1) + {/* Кнопка-карточка раздела — как карточки списка партий. */} +
+ -
-

Пример (стол на 4 игроков)

-
-
1-е место(4−1−0)/3 = 1.00 → 100
-
2-е место(4−2−0)/3 = 0.67 → 67
-
3-е место(4−3−0)/3 = 0.33 → 33
-
4-е место(4−4−0)/3 = 0.00 → 0
-
- Ничья за 1-е (двое)(4−1−0.5)/3 = 0.83 каждому + {showRating && ( + <> +
+

Очки игроков (рейтинг)

+

+ Рейтинг считается только по завершённым партиям. Незавершённые и отменённые + в зачёт не идут. +

+

+ За каждую партию игрок получает «очки за место» — они нормированы по числу игроков + за столом, поэтому победа за большим столом ценится выше, чем за маленьким: +

+
+ очки = (N − место − (размер_ничьей − 1) / 2) / (N − 1) +
+

+ где N — число игроков в партии. Первое место даёт 1.0, последнее — 0.0. +

+
    +
  • Если несколько игроков делят место (ничья) — они делят сумму очков поровну.
  • +
  • Выбывшие из партии считаются как последнее место.
  • +
+

+ Итоговый рейтинг игрока — сглаженное среднее: к реальным партиям + «дописываются» 10 виртуальных со средним результатом 0.5 (шкала от 0 до 100): +

+
+ рейтинг = (10 × 0.5 + сумма очков) / (10 + число партий) × 100 +
+

+ Пока партий мало, рейтинг держится около 50 и с опытом сходится к реальному + среднему — стабильные результаты на длинной дистанции ценятся выше короткой + удачной серии. +

-
-
-
-

Попадание в топ

-

- Чтобы попасть в ранжированный топ, нужно сыграть минимум 10 партий. До этого - игрок показывается в блоке «Новички» — предварительно, без места в рейтинге. -

-
+
+

Пример (стол на 4 игроков)

+
+
1-е место(4−1−0)/3 = 1.00 → 100
+
2-е место(4−2−0)/3 = 0.67 → 67
+
3-е место(4−3−0)/3 = 0.33 → 33
+
4-е место(4−4−0)/3 = 0.00 → 0
+
+ Ничья за 1-е (двое)(4−1−0.5)/3 = 0.83 каждому +
+
+
-
-

Другие показатели

-
    -
  • Винрейт (WR) — доля партий, в которых игрок занял 1-е место.
  • -
  • Среднее место — среднее по завершённым партиям.
  • -
  • - При равенстве рейтинга топ сортируется по: винрейту, числу игр, среднему месту - и затем по нику. -
  • -
-
+
+

Попадание в топ

+

+ Чтобы попасть в ранжированный топ, нужно сыграть минимум 10 партий. До этого + игрок показывается в блоке «Новички» — предварительно, без места в рейтинге. +

+
+ +
+

Другие показатели

+
    +
  • Винрейт (WR) — доля партий, в которых игрок занял 1-е место.
  • +
  • Среднее место — среднее по завершённым партиям.
  • +
  • + При равенстве рейтинга топ сортируется по: винрейту, числу игр, среднему месту + и затем по нику. +
  • +
+
+ + )}
); }