Справка: страница /help с описанием подсчёта очков игроков + пункт «Справка» в боковом меню

Новая страница /help: формула League Points, нормировка по числу игроков, ничьи,
выбывшие = последнее место, порог 3 партии для топа, прочие показатели. Текст
соответствует services/scoring.py. Задел под будущие правила и подсказки.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-26 23:14:12 +03:00
co-authored by Claude Opus 4.8
parent f56f9eb47b
commit 1e19038b7c
5 changed files with 100 additions and 1 deletions
+76
View File
@@ -0,0 +1,76 @@
/**
* Справка. Пока — только как считаются очки игроков (рейтинг). В дальнейшем сюда
* добавятся правила, подсказки и прочее. Текст соответствует backend/app/services/scoring.py.
*/
export function HelpPage() {
return (
<div>
<div className="card">
<h2 style={{ margin: 0 }}>Справка</h2>
<p className="muted small" style={{ marginTop: 6 }}>
Здесь со временем появятся правила, подсказки и пояснения. Пока — о том, как
считается рейтинг игроков.
</p>
</div>
<div className="card">
<h3>Очки игроков (рейтинг)</h3>
<p className="small">
Рейтинг считается только по <b>завершённым</b> партиям. Незавершённые и отменённые
в зачёт не идут.
</p>
<p className="small">
За каждую партию игрок получает «очки за место» — они нормированы по числу игроков
за столом, поэтому победа за большим столом ценится выше, чем за маленьким:
</p>
<div className="formula">
очки = (N − место − (размер_ничьей − 1) / 2) / (N − 1)
</div>
<p className="small" style={{ marginTop: 10 }}>
где <b>N</b> — число игроков в партии. Первое место даёт <b>1.0</b>, последнее — <b>0.0</b>.
</p>
<ul className="small" style={{ marginTop: 0, paddingLeft: 18 }}>
<li>Если несколько игроков делят место (ничья) — они делят сумму очков поровну.</li>
<li>Выбывшие из партии считаются как последнее место.</li>
</ul>
<p className="small">
Итоговый <b>рейтинг</b> игрока = среднее «очков за место» по всем его партиям × 100
(шкала от 0 до 100).
</p>
</div>
<div className="card">
<h3>Пример (стол на 4 игроков)</h3>
<div className="stack" style={{ gap: 6 }}>
<div className="row-between small"><span>1-е место</span><b>(4−1−0)/3 = 1.00 → 100</b></div>
<div className="row-between small"><span>2-е место</span><b>(4−2−0)/3 = 0.67 → 67</b></div>
<div className="row-between small"><span>3-е место</span><b>(4−3−0)/3 = 0.33 → 33</b></div>
<div className="row-between small"><span>4-е место</span><b>(4−4−0)/3 = 0.00 → 0</b></div>
<div className="row-between small">
<span>Ничья за 1-е (двое)</span><b>(4−1−0.5)/3 = 0.83 каждому</b>
</div>
</div>
</div>
<div className="card">
<h3>Попадание в топ</h3>
<p className="small">
Чтобы попасть в ранжированный топ, нужно сыграть минимум <b>3 партии</b>. До этого
игрок показывается в блоке «Новички» — предварительно, без места в рейтинге.
</p>
</div>
<div className="card">
<h3>Другие показатели</h3>
<ul className="small" style={{ margin: 0, paddingLeft: 18 }}>
<li><b>Винрейт</b> — доля партий, в которых игрок занял 1-е место.</li>
<li><b>Среднее место</b> — среднее по завершённым партиям.</li>
<li>
При равенстве рейтинга топ сортируется по: винрейту, числу игр, среднему месту
и затем по нику.
</li>
</ul>
</div>
</div>
);
}