go_games_collection/rules.go
2026-07-10 09:12:06 +03:00

2556 lines
149 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package main
// Каждая игра хранит правила в двух вариантах (RU/EN) и отдаёт
// нужный через функцию-геттер в зависимости от текущего языка
// (CurrentLang) — используется и в TUI-экране "Правила", и при
// выводе через --help.
// --- 1000 (Тысяча) ---------------------------------------------
const thousandRulesRU = `1000 (ТЫСЯЧА) — правила (строго на троих игроков)
У "Тысячи" огромное количество договорённостей и вариантов — единого
свода правил не существует, регионы расходятся даже в деталях самых
известных из них. Реализован базовый, самый распространённый
вариант ИМЕННО НА ТРОИХ игроков (у игры вдвоём/вчетвером заметно
другая механика прикупа и сдающего — она не реализована), плюс пять
дополнительных договорённостей — см. отдельный раздел ниже.
КОЛОДА И СТАРШИНСТВО
24 карты: 9, В, Д, К, 10, Т в каждой масти. Старшинство карт:
9 < В < Д < К < 10 < Т — да, десятка сильнее короля, но слабее
туза, это особенность именно этой игры.
ОЧКИ КАРТ
Туз - 11, десятка - 10, король - 4, дама - 3, валет - 2,
девятка - 0.
РАЗДАЧА И ТОРГИ
Каждому раздаётся по 7 карт, 3 карты уходят в прикуп. Игрок слева
от сдающего обязан назвать ставку не менее 100 (это то количество
очков, которое он берётся набрать за раздачу) — либо, вместо этого,
сразу объявить игру "втёмную" (см. ниже). Далее по кругу каждый
либо поднимает ставку минимум на 5, либо пасует — спасовавший
больше не участвует в этих торгах. Максимальная ставка — 120, либо
120 плюс стоимость марьяжа (обычного или тузового), если он есть на
руке. Торги заканчиваются, когда остаётся один игрок — он берёт
прикуп и становится объявившим торг ("играющим").
СНОС
Объявивший торг берёт прикуп (10 карт на руке) и отдаёт по одной
карте каждому из двух соперников — после этого у всех троих
становится по 8 карт. Играющий ходит первым.
ВЗЯТКИ
Обязательно ходить в масть; если её нет на руке — козырем (если
он уже объявлен в этой раздаче); если и козыря нет — любой картой.
Взятку забирает старшая карта хода, либо старший козырь, если он
был подложен.
МАРЬЯЖ
Если у игрока, который сейчас ходит первым в новой взятке (кроме
самой первой взятки раздачи), есть на руке король и дама одной
масти — он может объявить марьяж, походив одной из этих карт.
Эта масть становится (или меняется на) козырь до конца раздачи, а
стоимость марьяжа сразу добавляется к очкам игрока за раздачу.
Стоимость: пики 40, трефы 60, бубны 80, червы 100.
ПОДСЧЁТ ОЧКОВ
Если объявивший торг набрал (взятками и марьяжами) не меньше
своей ставки — ему засчитывается ставка целиком. Если меньше —
ставка вычитается из его счёта. Остальные добавляют себе ровно
то, что заработали, без штрафов.
ОКОНЧАНИЕ ПАРТИИ
Игра идёт до 1000 очков — первый, кто их наберёт, побеждает.
ДОПОЛНИТЕЛЬНЫЕ ДОГОВОРЁННОСТИ
Реализовано пять народных договорённостей — выбран один конкретный
распространённый вариант каждой (региональные разночтения бывают
и по мелочи, и существенно):
Тузовый марьяж — если у игрока на руках все четыре туза, и он уже
взял хотя бы одну взятку (не на первом ходе раздачи, как и
обычный марьяж), он может зайти с туза, объявив тузовый марьяж —
сразу 200 очков. В отличие от обычного марьяжа, козырь при этом
не меняется.
Золотой кон — первые 3 раздачи каждого матча считаются "золотым
коном": очки взяток всех, КРОМЕ объявившего торг, удваиваются
(марьяжи — никогда не удваиваются, и собственная заявка играющего
тоже облагается обычным образом).
Игра втёмную — вместо обычной ставки первый ходящий в торгах может
сразу объявить игру "втёмную": фиксированная заявка 120 без
дальнейших торгов. Если он набирает нужные 120 — награда
удваивается (240 вместо 120); если нет — так же вдвое больше
штраф (-240). Очки соперников от взяток в этой раздаче тоже
удваиваются (марьяжи — нет).
Бочка — при достижении 880 очков игрок "садится на бочку": пока
он на ней, очки от чужих раздач ему не начисляются вообще — расти
можно только через свою собственную выполненную заявку. Даётся 3
попытки подряд (быть объявившим торг и выполнить его); после
третьей неудачи — штраф -120 и уход с бочки. Одновременно на
бочке может сидеть только один игрок: если её достигает кто-то
другой, прежний слетает с тем же штрафом -120.
Самосвал — редкое нумерологическое совпадение: если по итогам
раздачи счёт игрока оказывается РОВНО 555 или -555 очков, он
обнуляется. Это не общий потолок счёта (иначе партия никогда не
дошла бы до 1000) — только точное попадание в это число.
УПРАВЛЕНИЕ В ЭТОЙ ВЕРСИИ
В торгах:
↑→/kl или ↓←/hj изменить предлагаемую ставку на ±5
enter назвать текущую ставку
p пасовать
v играть втёмную (только на самом первом ходе
торгов, пока никто ещё не ставил)
При сносе и в розыгрыше взяток:
←→/hl выбор карты в руке
enter сыграть/отдать выбранную карту (король/дама одной масти
при своём первом ходе взятки = объявить марьяж; заход с
туза, имея все четыре на руках = тузовый марьяж)
В любой момент:
q выход в меню
После завершения раздачи:
n новая раздача (если партия ещё не окончена)
q выход в меню
`
const thousandRulesEN = `1000 (THOUSAND) — rules (strictly 3 players)
"Thousand" has a huge number of house rules and variants — there's no
single agreed-upon rulebook, and regions disagree even on the details
of the best-known ones. A basic, most common ruleset is implemented
STRICTLY FOR 3 PLAYERS (the 2-player/4-player versions have noticeably
different kitty/dealer mechanics and aren't implemented), plus five
additional house rules — see the separate section below.
DECK AND RANK ORDER
24 cards: 9, J, Q, K, 10, A in each suit. Rank order:
9 < J < Q < K < 10 < A — yes, the 10 outranks the King but is
weaker than the Ace; that's a quirk specific to this game.
CARD POINTS
Ace - 11, ten - 10, king - 4, queen - 3, jack - 2, nine - 0.
DEAL AND BIDDING
Each player is dealt 7 cards, 3 cards go to the kitty. The player
left of the dealer must bid at least 100 (the number of points
they commit to scoring this hand) — or, instead, immediately
declare a "blind" game (see below). Going around the table, each
player either raises the bid by at least 5 or passes — once you
pass you're out of this auction. The maximum bid is 120, or 120
plus the value of a marriage (regular or ace) if you hold one.
Bidding ends when only one player remains — they take the kitty and
become the "declarer".
DISCARD
The declarer takes the kitty (10 cards in hand) and gives one
card to each of the two opponents — after that everyone has 8
cards. The declarer leads first.
TRICKS
You must follow suit; if you can't — play trump (if a trump has
been declared this hand); if you have neither — play anything.
The trick is taken by the highest card of the suit led, or the
highest trump if one was played.
MARRIAGE
If the player leading a NEW trick (except the very first trick of
the hand) holds a King and Queen of the same suit, they may
declare a marriage by leading one of those two cards. That suit
becomes (or changes to) trump for the rest of the hand, and the
marriage's value is immediately added to that player's score for
the hand. Values: spades 40, clubs 60, diamonds 80, hearts 100.
SCORING
If the declarer's tricks and marriages reach at least their bid,
they score the full bid. If not, the bid is subtracted from their
score. Everyone else simply adds whatever they actually earned,
with no penalty.
MATCH END
Play continues to 1000 points — first to reach it wins.
ADDITIONAL HOUSE RULES
Five common house rules are implemented — one specific, widely-used
variant of each was chosen (regional disagreements range from minor
to substantial):
Ace marriage — if a player holds all four Aces and has already
taken at least one trick (not on the hand's very first trick,
same as a regular marriage), they may lead an Ace to declare an
ace marriage — an immediate 200 points. Unlike a regular marriage,
this does NOT change trump.
Golden round — the first 3 hands of every match are the "golden
round": trick points for everyone EXCEPT the declarer are
doubled (marriages are never doubled, and the declarer's own bid
is scored normally either way).
Blind game — instead of a normal bid, the first bidder may
immediately declare a "blind" game: a fixed bid of 120 with no
further bidding. If they reach the required 120, the reward is
doubled (240 instead of 120); if not, the penalty is doubled too
(-240). Opponents' trick points for that hand are also doubled
(marriages are not).
Barrel — on reaching 880 points, a player "sits on the barrel":
while there, they earn no points at all from hands they didn't
declare — the only way to progress is by declaring and making
their own bid. They get 3 consecutive attempts (as declarer); on
the third failure, they take a -120 penalty and leave the
barrel. Only one player can sit on the barrel at a time — if
someone else reaches it, the previous occupant falls off with
the same -120 penalty.
Dump truck ("samosval") — a rare numerological coincidence: if a
player's score comes out to EXACTLY 555 or -555 after a hand, it
resets to 0. This is not a general cap (otherwise the match could
never reach 1000) — only an exact hit on that number.
CONTROLS IN THIS VERSION
During bidding:
↑→/kl or ↓←/hj change the proposed bid by ±5
enter place the current bid
p pass
v play blind (only on the very first bidding
turn, before anyone has bid)
During discard and trick play:
←→/hl select a card in hand
enter play/give the selected card (King/Queen of one suit as
your first card of a trick = declare a marriage; leading
an Ace while holding all four = ace marriage)
At any time:
q quit to menu
After a hand ends:
n new hand (if the match isn't over yet)
q quit to menu
`
func thousandRules() string {
if CurrentLang() == LangEN {
return thousandRulesEN
}
return thousandRulesRU
}
// --- Косынка (Klondike) ------------------------------------------
const klondikeRulesRU = `КОСЫНКА (KLONDIKE) — классический пасьянс на одного игрока
Реализован классический "Клондайк" с добором по одной карте за раз
и неограниченным числом пересдач колоды из отбоя.
ЦЕЛЬ
Собрать все 52 карты на четырёх фундаментах — по одному на
масть, от туза до короля по возрастанию.
ПОЛЕ
7 колонн (по 1-7 карт, в каждой открыта только самая нижняя из
выложенных карт), колода добора и отбой, 4 фундамента (по одному
на масть).
ХОДЫ
- В колонну можно положить открытую карту на 1 меньше по рангу и
противоположного цвета масти (чёрная на красную или наоборот).
В пустую колонну можно положить только короля.
- На фундамент можно положить только следующую по рангу карту той
же масти, начиная с туза.
- Можно перекладывать между колоннами как всю собранную (по
убыванию, с чередованием цвета) последовательность карт целиком,
так и любую её часть с конца (например, взять только нижние 2 из
4 корректно собранных карт) — при выборе колонны-источника число
переносимых карт можно уменьшать и увеличивать клавишами ↑/↓.
- Когда карта под перемещённой цепочкой открывается — она
автоматически переворачивается лицом вверх.
- Из колоды добора карты берутся по одной в отбой; когда колода
добора заканчивается — весь отбой переворачивается обратно в
колоду для новой пересдачи (без ограничения числа пересдач).
- Возврат карт с фундамента обратно в игру не реализован.
УПРАВЛЕНИЕ В ЭТОЙ ВЕРСИИ
Ход состоит из двух шагов: сначала выбор источника, потом — куда
переложить.
1-7 выбрать колонну (или переложить выбранное в неё)
0 выбрать отбой (только как источник)
↑↓ пока выбрана колонна — увеличить/уменьшить число
переносимых карт (от 1 до всей корректной цепочки)
f переложить выбранную карту на фундамент
esc отменить текущий выбор
d взять карту из колоды добора (пересдаст, если она пуста)
u отменить последний ход
n новая партия (перетасовать заново)
q выход в меню
`
const klondikeRulesEN = `KLONDIKE SOLITAIRE — classic single-player game
The classic "Klondike" is implemented with single-card draw and an
unlimited number of stock redeals from the waste pile.
GOAL
Move all 52 cards onto the four foundations — one per suit, from
Ace up to King.
LAYOUT
7 tableau columns (1-7 cards each, only the bottommost dealt card
is face up), a draw stock and a waste pile, 4 foundations (one
per suit).
MOVES
- You can place a face-up card onto a tableau column if it's one
rank lower and the opposite color (black on red or vice versa).
Only a King can be placed on an empty column.
- You can place a card on a foundation only if it's the next rank
up in that suit, starting from the Ace.
- You can move either an entire properly built (descending,
alternating color) sequence of cards between columns, or any
portion of it from the bottom (say, just the bottom 2 of a
correctly built 4-card run) — once a source column is selected,
↑/↓ increases or decreases how many cards are included.
- When a card underneath a moved run is uncovered, it
automatically flips face up.
- Cards are drawn one at a time from the stock into the waste;
once the stock is empty, the entire waste is flipped back into
the stock for a fresh redeal (no limit on redeals).
- Moving cards back off a foundation is not implemented.
CONTROLS IN THIS VERSION
A move is two steps: pick a source, then pick where to place it.
1-7 select a column (or move the selection into it)
0 select the waste pile (source only)
↑↓ while a column is selected — increase/decrease how many
cards are included (from 1 up to the full valid run)
f move the selected card to its foundation
esc cancel the current selection
d draw a card from the stock (redeals if it's empty)
u undo the last move
n new game (reshuffle)
q quit to menu
`
func klondikeRules() string {
if CurrentLang() == LangEN {
return klondikeRulesEN
}
return klondikeRulesRU
}
// --- Шашки (Checkers) --------------------------------------------
const checkersRulesRU = `ШАШКИ (RUSSIAN CHECKERS) — против бота
Реализованы русские шашки (не международные и не английские) на
доске 8х8. Вы всегда играете белыми и ходите первым; бот играет
чёрными (минимакс с альфа-бета отсечением). Перед началом партии
можно выбрать уровень сложности — "Простой" или "Сильный" (разница
только в глубине просчёта ходов бота).
ЦЕЛЬ
Взять все шашки соперника либо оставить его без единого
возможного хода.
ХОДЫ
Простая шашка ходит по диагонали на одну клетку только вперёд.
Дамка (шашка, дошедшая до последней горизонтали) ходит по
диагонали на любое расстояние в любом из четырёх направлений.
ВЗЯТИЕ
Простая шашка бьёт через одну соседнюю клетку в ЛЮБОМ из четырёх
диагональных направлений, включая назад — не только вперёд. Дамка
бьёт "летающим" ходом: может перепрыгнуть через вражескую шашку с
любого расстояния (если путь до неё свободен) и приземлиться на
любую свободную клетку сразу за ней (тоже с выбором расстояния).
Взятие ОБЯЗАТЕЛЬНО: если у вас есть хоть одно доступное взятие
где-либо на доске, простой ход запрещён. В отличие от
международных шашек, правило "бить максимально возможное число
шашек" не действует — подходит любое доступное взятие. Если после
взятия та же шашка может продолжить бить — она обязана продолжить
(ход не переходит сопернику, пока серия взятий не закончится).
Шашка, ставшая дамкой в середине серии взятий (дойдя до последней
горизонтали при ударе), продолжает эту же серию уже как дамка.
ОКОНЧАНИЕ ПАРТИИ
Побеждает тот, у кого остались ходы, когда у соперника их не
осталось (нет шашек или все заблокированы). Если долго (60
полуходов) не происходит ни одного взятия — партия принудительно
объявляется ничьей (упрощение официальных правил ничьей).
УПРАВЛЕНИЕ
↑↓←→ / hjkl передвижение курсора по доске
enter/space выбрать шашку (или переместить выбранную в клетку
под курсором)
esc отменить текущий выбор
q выход в меню
После завершения партии:
n новая партия
q выход в меню
`
const checkersRulesEN = `CHECKERS (RUSSIAN RULES) — against a bot
Russian checkers rules are implemented (not international, not
English draughts) on an 8x8 board. You always play white and move
first; the bot plays black (minimax with alpha-beta pruning). Before
the game starts you can pick a difficulty — "Easy" or "Strong" (the
only difference is the bot's search depth).
GOAL
Capture all of the opponent's pieces, or leave them with no legal
move at all.
MOVES
A regular man moves diagonally one square, forward only. A king
(a man that reached the last row) moves diagonally any distance in
any of the four directions.
CAPTURING
A regular man captures by jumping over an adjacent piece in ANY of
the four diagonal directions, including backward — not just
forward. A king captures with a "flying" jump: it may leap over an
enemy piece from any distance (if the path to it is clear) and
land on any empty square right after it (also any distance).
Capturing is MANDATORY: if you have any capture available anywhere
on the board, a non-capturing move is illegal. Unlike international
draughts, there is no "must capture the most pieces" rule — any
available capture is fine. If the same piece can capture again
after a capture, it must continue (the turn doesn't pass until the
capture chain ends). A piece that becomes a king mid-chain (by
reaching the last row on a capture) continues that same chain as a
king.
MATCH END
Whoever still has a legal move when the opponent has none (no
pieces left, or all blocked) wins. If no capture happens for a
long time (60 half-moves), the game is forced to a draw (a
simplification of the official draw rules).
CONTROLS
↑↓←→ / hjkl move the cursor around the board
enter/space select a piece (or move the selected piece to the
square under the cursor)
esc cancel the current selection
q quit to menu
After the game ends:
n new game
q quit to menu
`
func checkersRules() string {
if CurrentLang() == LangEN {
return checkersRulesEN
}
return checkersRulesRU
}
// --- Шахматы (Chess) ----------------------------------------------
const chessRulesRU = `ШАХМАТЫ (CHESS) — против бота
Реализованы полные правила шахмат, включая рокировку в обе стороны
и взятие на проходе. Вы всегда играете белыми и ходите первым; бот
играет чёрными (минимакс с альфа-бета отсечением). Перед началом
партии можно выбрать уровень сложности — "Простой" или "Сильный"
(разница только в глубине просчёта ходов бота).
ЦЕЛЬ
Поставить мат королю соперника — либо получить ничью (пат,
недостаточность материала или слишком долгая игра без взятий и
ходов пешками).
ХОДЫ ФИГУР
Пешка ходит вперёд на одну клетку (на две — с начальной позиции),
бьёт по диагонали на одну клетку вперёд. Конь ходит буквой "Г".
Слон — по диагонали на любое расстояние. Ладья — по горизонтали
или вертикали на любое расстояние. Ферзь совмещает ходы ладьи и
слона. Король — на одну клетку в любом направлении.
РОКИРОВКА
Король и соответствующая ладья рокируются, если ни один из них ещё
не ходил, все клетки между ними свободны, король не находится под
шахом и не проходит через атакованное поле (включая клетку, на
которую он встаёт). При короткой рокировке король идёт на 2 клетки
к ладье h, ладья становится рядом с ним; при длинной — то же самое
в сторону ладьи a.
ВЗЯТИЕ НА ПРОХОДЕ
Если пешка соперника только что пошла с начальной позиции сразу на
две клетки и оказалась рядом с вашей пешкой по горизонтали — вы
можете взять её так, как будто она пошла всего на одну клетку.
Это можно сделать только немедленно следующим ходом.
ПРЕВРАЩЕНИЕ ПЕШКИ
Дойдя до последней горизонтали, пешка автоматически превращается в
ферзя — упрощение: выбор фигуры превращения (ладья/слон/конь) не
реализован, так как подавляющее большинство реальных превращений и
так выбирают именно ферзя.
ШАХ, МАТ И НИЧЬЯ
Нельзя делать ход, после которого собственный король остаётся под
шахом (в том числе связанной фигурой нельзя открывать шах). Если у
игрока под шахом нет ни одного легального хода — это мат, партия
окончена. Если ходов нет, но короля под шахом не держат — это пат,
ничья. Также реализованы: ничья при недостаточности материала для
мата (например, король против короля) и принудительная ничья при
слишком долгой игре без взятий и ходов пешками (упрощённый аналог
официального правила 75 ходов). Троекратное повторение позиции
НЕ реализовано.
УПРАВЛЕНИЕ
↑↓←→ / hjkl передвижение курсора по доске
enter/space выбрать фигуру (или переместить выбранную в клетку
под курсором — для рокировки просто выберите короля
и укажите клетку в двух шагах от него)
esc отменить текущий выбор
q выход в меню
После завершения партии:
n новая партия
q выход в меню
`
const chessRulesEN = `CHESS — against a bot
Full chess rules are implemented, including castling both ways and
en passant captures. You always play white and move first; the bot
plays black (minimax with alpha-beta pruning). Before the game
starts you can pick a difficulty — "Easy" or "Strong" (the only
difference is the bot's search depth).
GOAL
Checkmate the opponent's king — or reach a draw (stalemate,
insufficient material, or too long a game without captures or pawn
moves).
PIECE MOVES
A pawn moves one square forward (two from its starting square) and
captures one square diagonally forward. A knight moves in an
"L" shape. A bishop moves diagonally any distance. A rook moves
horizontally or vertically any distance. A queen combines rook and
bishop moves. A king moves one square in any direction.
CASTLING
The king and the relevant rook may castle if neither has moved yet,
all squares between them are empty, the king isn't in check, and it
doesn't pass through an attacked square (including the square it
lands on). In kingside castling the king moves 2 squares toward the
h-rook, which then stands right next to it; queenside castling
works the same way toward the a-rook.
EN PASSANT
If an enemy pawn has just moved two squares from its starting
position and ended up next to your pawn, you may capture it as if
it had only moved one square. This is only possible on your very
next move.
PAWN PROMOTION
A pawn reaching the last row automatically promotes to a queen —
a simplification: choosing a different piece (rook/bishop/knight)
isn't implemented, since the vast majority of real promotions pick
a queen anyway.
CHECK, CHECKMATE AND DRAWS
You may not make a move that leaves your own king in check
(including moving a pinned piece so it would expose the king).
If a player in check has no legal move, that's checkmate and the
game ends. If there's no legal move but the king isn't in check,
that's stalemate — a draw. Also implemented: a draw for
insufficient mating material (e.g., king vs king), and a forced
draw if the game goes on too long without captures or pawn moves
(a simplified version of the official 75-move rule). Threefold
repetition is NOT implemented.
CONTROLS
↑↓←→ / hjkl move the cursor around the board
enter/space select a piece (or move the selected piece to the
square under the cursor — for castling, just select
the king and point two squares away from it)
esc cancel the current selection
q quit to menu
After the game ends:
n new game
q quit to menu
`
func chessRules() string {
if CurrentLang() == LangEN {
return chessRulesEN
}
return chessRulesRU
}
// --- Блэкджек (Blackjack) -----------------------------------------
const blackjackRulesRU = `БЛЭКДЖЕК — правила для 1-6 игроков
Каждый игрок играет только против дилера — не друг против друга.
Можно играть даже в одиночку: тогда за столом только вы и дилер.
ЦЕЛЬ
Набрать сумму очков ближе к 21, чем у дилера, не превысив 21.
ОЧКИ КАРТ
Туз — 11 или 1 (автоматически считается как 1, если 11 привело бы
к перебору). Картинки (валет/дама/король) — 10. Остальные — по
номиналу.
ПОДГОТОВКА И СТАВКА
В начале раунда каждый игрок делает фиксированную ставку. Игрокам
и дилеру раздаётся по 2 карты; у дилера одна карта открыта, вторая
скрыта до конца раунда. Блэкджек с раздачи — это туз и карта на 10
очков в первых двух картах (сумма 21 ровно двумя картами).
ХОД ИГРОКА
Каждый игрок по очереди решает:
- взять карту (hit) — можно повторять, пока не остановитесь или
не переберёте (сумма больше 21 — мгновенный проигрыш ставки);
- остановиться (stand) — зафиксировать текущую сумму;
- удвоить ставку (double down) — доступно только на первых двух
картах: ставка удваивается, берётся ровно одна карта, и ход
сразу заканчивается (переберёте вы или нет).
Сплиты (разделение пары карт на две руки) не поддерживаются.
ХОД ДИЛЕРА
После того как все игроки закончили ходы, дилер открывает вторую
карту и берёт карты, пока сумма меньше 17. Дилер останавливается на
любых 17 и больше, включая "мягкие" 17 с тузом — так проще и
предсказуемее для игры через терминал.
ВЫПЛАТЫ
- Блэкджек с раздачи (и у дилера его нет) — выигрыш 3:2.
- Блэкджек и у игрока, и у дилера — ничья, ставка возвращается.
- Перебор у игрока — проигрыш ставки, независимо от того, что
случится дальше у дилера.
- Дилер перебрал, а игрок нет — выигрыш 1:1.
- Сумма игрока больше суммы дилера (оба не перебрали) — выигрыш 1:1.
- Суммы равны — ничья, ставка возвращается.
- Сумма дилера больше — проигрыш ставки.
УПРАВЛЕНИЕ В ЭТОЙ ВЕРСИИ
h взять карту
s остановиться
d удвоить ставку (только на первых двух картах)
q выход в меню
После завершения раунда:
n новый раунд с тем же капиталом и ставкой
q выход в меню
`
const blackjackRulesEN = `BLACKJACK — rules for 1-6 players
Each player plays only against the dealer — not against each other.
You can even play solo: then it's just you and the dealer.
GOAL
Get a hand total closer to 21 than the dealer's, without going
over 21.
CARD VALUES
Ace — 11 or 1 (automatically counted as 1 if 11 would bust).
Face cards (J/Q/K) — 10. Everything else — face value.
SETUP AND BETTING
At the start of a round every player places a fixed bet. Players
and the dealer are each dealt 2 cards; one of the dealer's cards
is face up, the other hidden until the round ends. A blackjack on
the deal is an Ace plus a 10-value card in the first two cards
(a total of exactly 21 with two cards).
PLAYER'S TURN
Each player in turn decides to:
- hit — take a card, can repeat until you stand or bust (over 21
is an instant loss of the bet);
- stand — lock in your current total;
- double down — only on your first two cards: the bet is
doubled, you take exactly one more card, and your turn ends
immediately whether you bust or not.
Splitting a pair into two hands is not supported.
DEALER'S TURN
Once every player has finished, the dealer reveals the hidden card
and hits while their total is under 17. The dealer stands on any
17 or higher, including a "soft" 17 with an ace — simpler and more
predictable for a terminal game.
PAYOUTS
- Blackjack on the deal (and the dealer doesn't have one) — pays
3:2.
- Both player and dealer have blackjack — push, bet returned.
- Player busts — loses the bet, regardless of what the dealer does
afterward.
- Dealer busts, player doesn't — pays 1:1.
- Player's total beats the dealer's (neither busted) — pays 1:1.
- Totals are equal — push, bet returned.
- Dealer's total is higher — loses the bet.
CONTROLS IN THIS VERSION
h hit
s stand
d double down (first two cards only)
q quit to menu
After a round ends:
n new round with the same bankroll and bet
q quit to menu
`
func blackjackRules() string {
if CurrentLang() == LangEN {
return blackjackRulesEN
}
return blackjackRulesRU
}
// --- 101 -----------------------------------------------------------
const oneOhOneRulesRU = `101 — правила для 2-6 игроков
У игры "101" существует много вариантов, расходящихся в деталях.
Реализован следующий, наиболее часто встречающийся набор правил.
ЦЕЛЬ
Как можно быстрее избавиться от всех карт на руке. Тот, кто первым
это сделал — выигрывает раунд; остальные получают штрафные очки за
карты, оставшиеся на руках. Партия идёт до тех пор, пока не
останется один игрок — набравшие 101 очко и более выбывают.
ПОДГОТОВКА
Колода 36 карт (от шестёрки до туза), как и в Дураке. Сдающий
раздаёт по 5 карт каждому игроку, кроме себя — себе оставляет 4, а
пятую (лишнюю) кладёт в центр стола лицом вверх — это стартовая
карта сброса. Первым ходит игрок слева от сдающего.
ХОД
Нужно положить карту той же масти или того же ранга, что и верхняя
карта сброса. Если подходящей карты нет — нужно брать карты из
колоды добора по одной, пока не найдётся подходящая (тогда она
сразу же играется) либо пока колода не закончится (тогда ход
просто переходит дальше).
СПЕЦИАЛЬНЫЕ КАРТЫ
Туз — пропускает ход следующего игрока.
Шестёрка — следующий игрок берёт 1 карту и пропускает ход.
Семёрка — следующий игрок берёт 2 карты и пропускает ход.
Пиковый король — следующий игрок берёт 4 карты и пропускает ход.
Дама — кладётся на что угодно, независимо от масти и ранга верхней
карты сброса. Положивший даму сразу называет масть, которая
будет считаться "текущей" для следующего хода — она действует
ровно один ход, а затем перестаёт значить что-либо особое.
Восьмёрка — её обязательно нужно "покрыть": следующий ход обязан
быть либо той же масти, что и восьмёрка, либо другой восьмёркой
(которая точно так же продолжит требование, уже под свою масть —
цепочка может тянуться сколько угодно). Если подходящей карты
нет — берут из колоды добора по одной, пока не найдётся такая же
масть или ещё одна восьмёрка; дама в этой ситуации не спасает —
только явное совпадение по масти или другая восьмёрка.
Остальные короли и карты — обычные, без эффекта.
ОЧКИ КАРТ (штраф за карты, оставшиеся на руках)
Туз - 11, десятка - 10, девятка - 0, восьмёрка - 8, семёрка - 7,
шестёрка - 6, король - 4, дама - 3, валет - 2.
ОКОНЧАНИЕ РАУНДА
Победитель раунда получает 0 штрафных очков — а если его последней
сыгранной картой была дама, то бонус -20 очков (-40, если дама
червовая) вместо обычных 0. Остальные складывают очковую стоимость
карт, оставшихся у них на руках, и добавляют этот раунд к своему
общему счёту.
ВЫБЫВАНИЕ И ОКОНЧАНИЕ ПАРТИИ
Набравший 101 очко и более выбывает из партии — если только это не
ровно 101, тогда счёт обнуляется (можно отыграться). Сдающим
следующего раунда становится победитель предыдущего. Партия
продолжается, пока не останется один игрок — он побеждает.
УПРАВЛЕНИЕ В ЭТОЙ ВЕРСИИ
←→ / hl выбор карты в руке
enter сыграть выбранную карту
d взять карту из колоды (доступно только если нет подходящей)
q выход в меню
После игры дамой:
1-4 назвать масть (трефы/бубны/червы/пики)
После завершения раунда:
n новый раунд (если партия ещё не окончена)
q выход в меню
`
const oneOhOneRulesEN = `101 — rules for 2-6 players
There are many variants of "101" that differ in the details. The
following, most commonly seen ruleset is implemented here.
GOAL
Empty your hand as fast as possible. Whoever does it first wins
the round; everyone else gets penalty points for the cards left in
hand. The match continues until only one player remains — reaching
101 points or more eliminates you.
SETUP
36-card deck (six through ace), same as Durak. The dealer deals 5
cards to every player except themself — they keep 4, and the
leftover 5th card is placed face up in the middle as the starting
discard. The player to the dealer's left goes first.
TURN
Play a card of the same suit or the same rank as the top of the
discard pile. If you have no matching card, draw from the stock
one at a time until you draw one that matches (it's played
immediately) or until the stock runs out (then your turn simply
passes).
SPECIAL CARDS
Ace — skips the next player's turn.
Six — the next player draws 1 card and is skipped.
Seven — the next player draws 2 cards and is skipped.
King of spades — the next player draws 4 cards and is skipped.
Queen — can be played on anything, regardless of the suit or rank
of the current top card. Whoever plays it immediately calls a
suit, which becomes the "current" suit for the next play only —
after that one play, it stops mattering.
Eight — must be "covered": the next play must be either the same
suit as the eight, or another eight (which continues the same
requirement under its own suit — the chain can run as long as it
keeps happening). If you have no matching card, draw from the
stock one at a time until you get a matching suit or another
eight; a queen does NOT get you out of this — only a genuine suit
match or another eight will do.
All other kings and cards — normal, no effect.
CARD POINTS (penalty for cards left in hand)
Ace - 11, ten - 10, nine - 0, eight - 8, seven - 7, six - 6,
king - 4, queen - 3, jack - 2.
END OF A ROUND
The round's winner scores 0 penalty points — and if their last
played card was a queen, they get a -20 point bonus instead (-40
for the queen of hearts). Everyone else adds up the point value of
the cards left in their hand and adds it to their running score.
ELIMINATION AND MATCH END
Reaching 101 points or more eliminates you from the match — unless
it's exactly 101, in which case your score resets to 0 (a second
chance). The winner of a round deals the next one. The match
continues until only one player is left — they win.
CONTROLS IN THIS VERSION
←→ / hl select a card in hand
enter play the selected card
d draw from the stock (only available if you have no match)
q quit to menu
After playing a queen:
1-4 call a suit (clubs/diamonds/hearts/spades)
After a round ends:
n new round (if the match isn't over yet)
q quit to menu
`
func oneOhOneRules() string {
if CurrentLang() == LangEN {
return oneOhOneRulesEN
}
return oneOhOneRulesRU
}
// --- Дурак (Durak) --------------------------------------------------
const durakRulesRU = `ДУРАК — правила для 2-6 игроков
Реализован классический "подкидной" Дурак в полном виде: подкидывать
дополнительные карты в раунде может любой игрок за столом, кроме
самого защищающегося — не только тот, кто открыл раунд. Отбивается
всегда только защищающийся, забрать стол может тоже только он.
ПОДГОТОВКА
Колода 36 карт (от шестёрки до туза, без карт 2-5). Каждому
раздаётся по 6 карт. При 6 игроках колода не делится ровно — кому-
то может достаться на одну карту меньше, это нормально и по
правилам. Последняя карта колоды вскрывается — это козырь; она
остаётся в самом низу колоды добора и берётся последней.
Первым ходит игрок с самым младшим козырем на руке.
ХОД
Атакующий обязательно открывает раунд, подкинув одну карту.
Защищающийся должен отбить её картой той же масти старше по рангу,
либо любым козырем (козырь бьёт некозырную карту любого ранга, но
козырь козырю нужно бить только старшим козырем).
Как только очередная карта отбита, право подкинуть ещё одну карту
(того же ранга, что уже есть среди карт на столе) по очереди
получает каждый из остальных игроков, кроме защищающегося — начиная
с атакующего и по кругу. Каждый в свою очередь либо подкидывает
подходящую карту (тогда защищающийся должен снова отбиться или
забрать стол), либо пасует. Как только все подряд отказались
подкидывать — или лимит атаки исчерпан (не больше 6 карт на столе и
не больше числа карт на руке защищающегося на начало раунда) —
объявляется "бито": все карты со стола уходят в отбой навсегда.
Если защищающийся не может (или не хочет) отбить карту — он
забирает весь стол себе в руку. Это не проигрыш, а обычный игровой
момент.
СМЕНА РОЛЕЙ
После "бито" атакующим становится следующий по кругу после
защищающегося. После взятия стола атакующим становится следующий
по кругу после того, кто как раз забрал карты (он на этот раз
пропускает роль атакующего).
ДОБОР КАРТ
После каждого раунда игроки добирают карты из колоды до 6 (если в
колоде столько есть), начиная с атакующего того раунда и по кругу,
защищающийся добирает последним. Если стол забрали — забравший
вообще не добирает в этот раз (у него и так теперь много карт).
ОКОНЧАНИЕ ПАРТИИ
Как только у игрока не осталось карт на руке и в колоде добора
тоже пусто — он выходит из игры "в безопасности". Игра продолжается
для остальных. Последний, у кого остались карты на руках, когда все
остальные уже вышли — "дурак", он проигрывает. Если сразу несколько
игроков одновременно избавляются от последних карт — считается
ничья, дурака нет.
УПРАВЛЕНИЕ В ЭТОЙ ВЕРСИИ
Когда вы открываете раунд (обязательный первый ход):
←→ / hl выбор карты в руке
enter подкинуть выбранную карту
Когда вы защищающийся:
←→ / hl выбор карты в руке
enter отбить выбранной картой последнюю неотбитую карту
t забрать весь стол себе в руку
Когда очередь подкидывать дошла до вас (стол уже отбит):
←→ / hl выбор карты в руке
enter подкинуть ещё одну карту
p пасовать (отказаться подкидывать)
В любой момент:
q выход в меню
После завершения партии:
n новая партия с тем же числом игроков
q выход в меню
`
const durakRulesEN = `DURAK (RUSSIAN FOOL) — rules for 2-6 players
A full-featured classic "throw-in" Durak is implemented: any player
at the table except the defender — not just the one who opened the
round — may throw in extra cards. Only the defender ever defends, and
only the defender can take the table.
SETUP
36-card deck (six through ace, no 2-5). Everyone is dealt 6 cards.
With 6 players the deck doesn't split evenly — someone may end up
with one fewer card, which is normal and by the rules. The last
card of the deck is revealed as the trump; it stays at the very
bottom of the draw pile and is drawn last. Whoever holds the
lowest trump goes first.
TURN
The attacker must open the round by throwing in one card. The
defender must beat it with a higher card of the same suit, or any
trump (a trump beats a non-trump card of any rank, but a trump can
only be beaten by a higher trump).
As soon as a card is beaten, the right to throw in another card
(of a rank already present on the table) passes in turn to each of
the other players except the defender — starting with the attacker
and going around. Each player in turn either throws in a matching
card (forcing the defender to beat it again or take the table) or
passes. Once everyone in a row has declined — or the attack limit
is reached (no more than 6 cards on the table, and no more than the
defender's hand size at the start of the round) — it's called
"beaten": all cards on the table are discarded from play for good.
If the defender can't (or doesn't want to) beat a card, they take
the whole table into their hand. That's not a loss, just a normal
part of play.
ROLE ROTATION
After a "beaten" table, the next player after the defender becomes
the new attacker. After a table is taken, the next player after
whoever just took it becomes the new attacker (they skip being
attacker this time).
DRAWING CARDS
After each round, players draw back up to 6 cards (if the deck has
enough), starting with that round's attacker and going around, with
the defender drawing last. If the table was taken, the player who
took it doesn't draw this time (they already have plenty of cards).
MATCH END
As soon as a player has no cards in hand and the draw pile is also
empty, they're "safe" and out of play. The game continues for the
rest. The last player left holding cards once everyone else is safe
is the "fool" and loses. If several players empty their hands at
the exact same moment, it's a draw — no fool.
CONTROLS IN THIS VERSION
When you're opening the round (the mandatory first move):
←→ / hl select a card in hand
enter throw in the selected card
When you're the defender:
←→ / hl select a card in hand
enter beat the last unbeaten card with the selected card
t take the whole table into your hand
When it's your turn to throw in (table already beaten):
←→ / hl select a card in hand
enter throw in another card
p pass (decline to throw in)
At any time:
q quit to menu
After the match ends:
n new match with the same number of players
q quit to menu
`
func durakRules() string {
if CurrentLang() == LangEN {
return durakRulesEN
}
return durakRulesRU
}
// --- Тонк (Tonk) ------------------------------------------------------
const tonkRulesRU = `ТОНК (TONK) — правила для 3-4 игроков
ПОДГОТОВКА
Колода 52 карты без джокеров. Каждому раздаётся по 5 карт.
Оставшиеся карты — колода добора. Верхняя карта сразу вскрывается
рубашкой вниз рядом — так начинается стопка сброса.
ХОД ИГРОКА
1. Взять карту — либо верхнюю из колоды добора, либо верхнюю
из стопки сброса.
2. Можно выложить на стол готовые комбинации:
- сет: 3+ карты одного ранга, разных мастей
- сиквенс: 3+ карты одной масти подряд по рангу
Туз может быть как младшей картой (A-2-3), так и старшей
(Q-K-A), но не одновременно ("закольцевать" через край нельзя).
3. Можно подкладывать карты к уже выложенным комбинациям —
своим или чужим.
4. В конце хода нужно сбросить одну карту (кроме случая, когда
последняя карта руки ушла в комбинацию — тогда раунд
заканчивается победой без отдельного сброса).
ОЧКИ КАРТ
Туз = 1, валет/дама/король = 10, остальные — по номиналу.
ОБЪЯВЛЕНИЕ "ТОНК"
В любой момент сразу после взятия карты (до выкладывания
комбинаций) игрок может объявить Тонк, если сумма очков карт на
руке не превышает порог (по умолчанию 5). Раунд немедленно
заканчивается победой объявившего — денежные детали см. в разделе
"ДЕНЬГИ" ниже.
ДРОП — рискованная альтернатива Тонку
В самом начале своего хода, ДО взятия карты, игрок может
объявить дроп: заявить, что у него, по его мнению, самая низкая
сумма очков на руках за столом. В отличие от Тонка, никакого
порога веса руки не требуется — можно дропнуть с любой рукой,
это чистая ставка на свою интуицию.
- Если дроп верен (рука объявившего строго ниже, чем у всех
остальных) — он забирает банк раунда целиком, как за обычную
победу (без множителя).
- Если дроп неверен (у кого-то сумма равна или ниже) — дроп
"не удался": банк достаётся тому, у кого реально самая
низкая сумма (при нескольких таких игроках — делится
поровну между ними), а объявивший вдобавок платит им штраф
в размере ещё одной ставки (анте) сверху.
Боты тоже иногда идут на дроп, но осторожно: они ориентируются
только на свою руку (не подглядывают в чужие карты) и рискуют,
только если их собственная сумма уже очень мала.
ЗАВЕРШЕНИЕ РАУНДА
- Игрок избавился от всех карт -> он забирает банк раунда целиком.
- Объявлен Тонк -> объявивший забирает банк, умноженный на
множитель Тонка (см. ниже); недостающую разницу сверх банка
поровну доплачивают остальные игроки.
- Колода добора и стопка сброса исчерпаны, и никто не может ни
выиграть, ни объявить Тонк -> раунд "мёртвый", банк возвращается
игрокам поровну (каждому — его ставка назад).
ДЕНЬГИ: СТАВКА И БАНК
В начале каждого раунда каждый игрок вносит фиксированную ставку
(анте) в общий банк. Обычная победа (опустошением руки) забирает
банк как есть. Победа через объявление Тонка забирает банк,
умноженный на 2: недостающую сумму сверх банка поровну доплачивают
остальные игроки — то есть Тонк выгоднее для победителя, но дороже
обходится проигравшим, чем обычное поражение. При "мёртвом" раунде
деньги никто не выигрывает и не теряет — ставки просто возвращаются.
Капитал каждого игрока переносится из раунда в раунд, пока идёт
партия; в этой версии капитал может уйти в минус, если ставки
превышают остаток средств — отдельного правила банкротства пока нет.
УПРАВЛЕНИЕ В ЭТОЙ ВЕРСИИ
Фаза взятия карты:
d взять из колоды добора
p взять из сброса
k рискнуть дропом (см. раздел "ДРОП" выше)
Фаза действия (после взятия карты):
←→ / hl выбор карты в руке
space отметить/снять отметку карты для новой комбинации
m выложить отмеченные карты как комбинацию (сет/сиквенс)
1-9 подложить выбранную карту к комбинации №N на столе
t объявить Тонк (доступно, если вес руки не выше порога)
enter сбросить выбранную карту и завершить ход
В любой момент:
q выход
После завершения раунда:
n новый раунд (счёт сохраняется)
q выход
`
const tonkRulesEN = `TONK — rules for 3-4 players
SETUP
A 52-card deck, no jokers. Everyone is dealt 5 cards. The rest form
the draw pile. The top card is immediately flipped face up next to
it — that's the start of the discard pile.
PLAYER'S TURN
1. Draw a card — either the top of the draw pile or the top of the
discard pile.
2. You may lay down completed melds on the table:
- a set: 3+ cards of the same rank, different suits
- a sequence: 3+ consecutive cards of the same suit
An ace can be the low card (A-2-3) or the high card (Q-K-A), but
not both at once (you can't "wrap around" the ends).
3. You may add cards to melds already on the table — yours or
anyone else's.
4. You must discard one card to end your turn (unless your very
last card went into a meld — then the round ends in a win
without a separate discard).
CARD POINTS
Ace = 1, jack/queen/king = 10, everything else at face value.
DECLARING "TONK"
At any point right after drawing (before laying down any melds), a
player may declare Tonk if their hand's point total is at or below
a threshold (5 by default). The round ends immediately in the
declarer's favor — see "MONEY" below for the payout details.
DROP — a riskier alternative to Tonk
At the very start of your turn, BEFORE drawing, you may declare a
drop: a claim that you believe you hold the lowest point total at
the table. Unlike Tonk, there's no hand-weight threshold required —
you can drop with any hand at all; it's a pure gamble on your own
read of the table.
- If the drop is correct (your hand is strictly lower than
everyone else's) you take the whole pot, same as an ordinary
win (no multiplier).
- If the drop is wrong (someone ties or beats you) the drop
"fails": the pot goes to whoever is actually lowest (split
evenly if there's a tie), and on top of that the dropper pays
them a penalty equal to one more ante.
Bots sometimes drop too, but cautiously: they only look at their
own hand (they never peek at anyone else's cards) and only risk it
when their own total is already very low.
END OF A ROUND
- A player empties their hand -> they take the whole pot.
- Tonk is declared -> the declarer takes the pot multiplied by the
Tonk multiplier (see below); everyone else pays their share of
the difference on top of the pot.
- The draw pile and discard pile are both exhausted, and no one can
win or declare Tonk -> the round is "dead", the pot is returned
to everyone (each gets their ante back).
MONEY: THE ANTE AND THE POT
At the start of every round, each player puts a fixed ante into the
shared pot. A normal win (emptying your hand) takes the pot as is.
A win by declaring Tonk takes the pot doubled: everyone else
splits paying the extra amount above the pot — so Tonk is more
rewarding for the winner, but costs the losers more than an
ordinary loss. In a "dead" round nobody wins or loses money — the
antes are simply returned. Each player's bankroll carries over from
round to round while the match continues; in this version a
balance can go negative if the antes exceed what's left — there's
no bankruptcy rule yet.
CONTROLS IN THIS VERSION
Draw phase:
d draw from the stock
p draw from the discard pile
k risk a drop (see "DROP" above)
Action phase (after drawing):
←→ / hl select a card in hand
space mark/unmark a card for a new meld
m lay down the marked cards as a meld (set/sequence)
1-9 add the selected card to table meld #N
t declare Tonk (available if your hand is at or below the
threshold)
enter discard the selected card and end your turn
At any time:
q quit
After a round ends:
n new round (bankroll carries over)
q quit
`
func tonkRules() string {
if CurrentLang() == LangEN {
return tonkRulesEN
}
return tonkRulesRU
}
// --- Трупные батончики (Corpse-Starch Box) ------------------------
const corpseStarchRulesRU = `ТРУПНЫЕ БАТОНЧИКИ (CORPSE-STARCH BOX)
Инкрементальная (кликер/idle) игра в духе Candy Box 2 — в антураже
мрачного далёкого будущего. Никаких ботов и соперников: вы просто
копите трупный крахмал и постепенно открываете новые механики по
мере накопления ресурса.
СОХРАНЕНИЕ
В отличие от остальных игр коллекции, эта партия сохраняется на
диск: автоматически каждые 15 секунд и при выходе в меню (клавиша
q). При следующем запуске партия загрузится с того же места, а
сервиторы честно "домолотят" трупный крахмал за всё время, пока
вы отсутствовали, — как будто вы всё это время не отходили от
экрана. Чтобы начать заново, достаточно удалить файл сохранения
(обычно ~/.config/go-games-collection/corpsestarch_save.json).
ЦЕЛЬ
Формальной цели или условия победы нет — это чистый инкрементальный
опыт: копите ресурс, открывайте разделы, экспериментируйте.
ОСНОВНОЙ РЕСУРС
Трупный крахмал добывается вручную (реквизиция) и, после открытия
раздела, ещё и пассивно — в реальном времени, пока партия открыта
на экране (даже если вы ничего не нажимаете).
РАЗДЕЛЫ, ОТКРЫВАЮЩИЕСЯ ПО МЕРЕ НАКОПЛЕНИЯ
- Сервиторы — покупка юнитов пассивного дохода (сервочерепа,
сервитора-подёнщика, когитаторного комплекса); каждая следующая
покупка одного тира дороже предыдущей.
- Муниторум — заточка цепного меча повышает доход от ручной
реквизиции.
- Отстойник — можно окунуть в него цепной меч: случайный исход
(бонус крахмала, временное благословение духа машины,
ничего, либо скверна с потерей части запаса).
- Зачистки — отправить отряд на одну из миссий на реальное время
(от 20 секунд до нескольких минут); по завершении можно забрать
награду.
СКВЕРНА И ВАРП-ВЫБРОС
Каждое неудачное окунание меча в отстойник добавляет единицу
Скверны. При достижении 3 она прорывается варп-выбросом: половина
текущего запаса крахмала и половина каждого тира сервиторов
теряется, Скверна сбрасывается в 0, и начинается вторжение
культистов Хаоса на целый час реального времени. Пока оно идёт,
сервиторы дают вдвое меньше дохода — часть сил станции отвлечена на
оборону. Появляется отдельное действие "отбиваться от культистов" —
каждое нажатие засчитывается; если за время вторжения накопится
достаточно активных защит, по его окончании начисляется бонус
крахмала в благодарность за стойкость станции. Цикл может
повториться — Скверна снова начинает копиться с нуля.
МЕТКИ ХАОСА И ПЕРЕРОЖДЕНИЕ
Каждый варп-выброс (не только сама Скверна) оставляет одну метку
Хаоса. При пятой метке появляется предложение перейти на сторону
Хаоса — принять или отвергнуть. Отказ ничем не грозит: счётчик
меток сбрасывается в 0, а взамен выдаётся разовая награда.
Согласие запускает перерождение — ровно сутки реального времени,
в течение которых партия полностью недееспособна: никакие действия
недоступны, доход не начисляется (можно только сохраниться и
выйти клавишей q, дождавшись остального в другой раз). По
истечении суток партия необратимо переходит в демонический режим:
трупный крахмал становится Душами, три тира сервиторов — Розовым
ужасом, Визгуном и Владыкой Перемен (демоны Тзинча), зачистки
ульев и часовен — набегами на приграничные и планеты-святилища
Империума, а Скверна — Отблеском астрономикона (тот же счётчик и
механизм варп-выброса, просто зеркальное отражение прежнего:
вместо культистов Хаоса цитадель атакует уже карательный флот
Империума).
УПРАВЛЕНИЕ
1-9 выбрать пронумерованное действие (список меняется по мере
открытия новых разделов — номера могут "переезжать")
N начать заново (с подтверждением — весь текущий прогресс
будет безвозвратно потерян)
q сохранить партию и выйти в меню
`
const corpseStarchRulesEN = `CORPSE-STARCH BOX
An incremental (clicker/idle) game in the spirit of Candy Box 2 —
set in a grim, dark far future. No bots or opponents: you simply
gather corpse starch and gradually unlock new mechanics as your
stockpile grows.
SAVING
Unlike the other games in this collection, this game saves to
disk: automatically every 15 seconds and whenever you quit to the
menu (the q key). Next time you start it, your game picks up right
where you left off, and your servitors will honestly "catch up" on
the corpse starch they gathered while you were away — as if you'd
never left the screen. To start fresh, just delete the save file
(usually ~/.config/go-games-collection/corpsestarch_save.json).
GOAL
There's no formal goal or win condition — it's a pure incremental
experience: gather resources, unlock sections, experiment.
MAIN RESOURCE
Corpse starch is gathered manually (requisition) and, once that
section unlocks, also passively in real time while the game screen
is open (even if you press nothing).
SECTIONS THAT UNLOCK AS YOU GATHER MORE
- Servitors — buy passive-income units (servo-skull, menial
servitor, cogitator array); each further purchase of a tier
costs more than the last.
- Munitorum — sharpening your chainsword raises your manual
requisition yield.
- The Sump — dip your chainsword into it for a random outcome
(a starch bonus, a temporary machine-spirit blessing, nothing at
all, or taint that costs you part of your stockpile).
- Purges — send a squad on one of several missions that take real
time (from 20 seconds to a few minutes); collect the reward once
it's done.
CORRUPTION AND WARP BREACH
Every unlucky chainsword dip adds one point of Corruption. Once it
reaches 3, it erupts in a warp breach: half your current starch
stockpile and half of every servitor tier are lost, Corruption
resets to 0, and a Chaos cultist incursion begins for a full hour
of real time. While it's ongoing, servitors yield only half their
usual income — part of the station's strength is diverted to
defense. A separate "fight off the cultists" action appears — each
press counts toward your defense; if you rack up enough active
defenses during the incursion, a bonus shipment of starch is
awarded once it ends, as thanks for the station's resolve. The
cycle can repeat — Corruption starts building up from zero again.
CHAOS MARKS AND REBIRTH
Every warp breach (not just Corruption itself) leaves behind one
mark of Chaos. On the fifth mark, you're offered a choice: join the
side of Chaos, or refuse. Declining costs nothing — the mark
counter resets to 0 and you receive a one-time reward instead.
Accepting begins a rebirth — exactly 24 real-time hours during
which the game is completely unplayable: no actions are available,
no income accrues (you can only save and quit with q, and pick up
the rest another time). Once the day has passed, the game
permanently shifts into a demonic mode: corpse starch becomes
Souls, the three servitor tiers become Pink Horrors, Screamers, and
a Lord of Change (Tzeentch daemons), hive- and chapel-purges become
raids on Imperial border and shrine worlds, and Corruption becomes
the Astronomican's Glimmer (the same counter and warp-breach
mechanism, just a mirror image of the old one — instead of Chaos
cultists, it's now an Imperial punisher fleet attacking your
citadel).
CONTROLS
1-9 choose a numbered action (the list grows as you unlock more
sections — numbers may shift around)
N start over (with confirmation — all current progress will
be permanently lost)
q save the game and quit to menu
`
func corpseStarchRules() string {
if CurrentLang() == LangEN {
return corpseStarchRulesEN
}
return corpseStarchRulesRU
}
// --- Го (Go) -------------------------------------------------------
const goRulesRU = `ГО (GO) — против бота
Реализованы базовые правила Го: свободы групп камней, взятие групп
без единой свободы, запрет самоубийственного хода (кроме случая,
когда сам ход берёт вражеские камни и получает свободу), простое
правило ко. Перед началом партии можно выбрать размер доски (9x9,
13x13 или 19x19) и уровень сложности бота. Вы всегда играете
чёрными и ходите первым; бот играет белыми.
О СИЛЕ БОТА: честная сильная игра в Го требует Monte-Carlo поиска
по дереву партии или нейросетевой оценки позиции (как в AlphaGo) —
минимакс здесь почти бесполезен из-за огромного ветвления. Все три
уровня сложности — эвристические, БЕЗ поиска вперёд по дереву
партии, и играют существенно слабее сильного человека даже на
"Сильном" уровне.
ЦЕЛЬ
Окружить своими камнями больше территории (пустых точек) и camней,
чем соперник, к концу партии.
ХОДЫ
Игроки по очереди ставят по одному камню на свободную точку
пересечения линий (не в клетку, как в шашках/шахматах). Можно
пасовать вместо хода.
СВОБОДЫ И ВЗЯТИЕ
У связной группы камней одного цвета есть "свободы" — пустые
точки, прилегающие к ней. Если после хода соперника у группы не
остаётся ни одной свободы, вся группа снимается с доски (берётся).
Нельзя ставить камень так, чтобы его собственная группа осталась
без единой свободы (самоубийственный ход) — ЕСЛИ только этот же
ход не берёт вражескую группу, тем самым освобождая точку.
ПРАВИЛО КО
Нельзя немедленно восстановить позицию, которая была на доске до
хода соперника, — это предотвращает бесконечный обмен взятием
одной и той же точки туда-обратно. Достаточно сходить в любое
другое место — на следующий ход взятие снова станет возможным.
Более сложное правило "тройного повторения позиции" (супер-ко) не
реализовано.
ОКОНЧАНИЕ ПАРТИИ И ПОДСЧЁТ ОЧКОВ
Два паса подряд заканчивают партию. Счёт считается по КИТАЙСКИМ
(площадным) правилам: очки = число своих камней на доске + число
пустых точек, граничащих ИСКЛЮЧИТЕЛЬНО с этим цветом (точки,
граничащие с обоими цветами, нейтральны и не достаются никому).
Белые получают коми (компенсацию за то, что чёрные ходят первыми)
— 7.5 очка при любом размере доски.
ВАЖНОЕ УПРОЩЕНИЕ: фаза "удаления мёртвых камней" перед подсчётом
не реализована — партия оценивается по камням, буквально
оставшимся на доске в момент второго паса. Если камень фактически
окружён, но не взят по-настоящему, он засчитывается как живой
своему цвету. Поэтому перед двумя пасами стоит реально взять все
безнадёжные камни соперника, а не полагаться на то, что они
"и так мертвы".
УПРАВЛЕНИЕ
↑↓←→ / hjkl передвижение курсора по доске
enter/space поставить камень в клетку под курсором
p пасовать
q выход в меню
После завершения партии:
n новая партия (тот же размер доски и сложность)
q выход в меню
`
const goRulesEN = `GO — against a bot
Basic Go rules are implemented: group liberties, capturing groups
with no liberties left, forbidding suicidal moves (unless the move
itself captures enemy stones and thereby gains a liberty), and the
simple ko rule. Before the game starts you can pick the board size
(9x9, 13x13, or 19x19) and the bot's difficulty. You always play
black and move first; the bot plays white.
ON BOT STRENGTH: genuinely strong Go play requires Monte Carlo tree
search or neural-network position evaluation (as in AlphaGo) —
minimax is nearly useless here because of the enormous branching
factor. All three difficulty levels are heuristic-based, WITHOUT any
lookahead search through the game tree, and play noticeably weaker
than a strong human even on "Strong" difficulty.
GOAL
Surround more territory (empty points) and stones with your color
than your opponent by the end of the game.
MOVES
Players take turns placing one stone on an empty line intersection
(not in a square, unlike checkers/chess). You may pass instead of
playing.
LIBERTIES AND CAPTURING
A connected group of same-colored stones has "liberties" — empty
points adjacent to it. If a group is left with zero liberties after
the opponent's move, the whole group is removed from the board
(captured). You may not place a stone so that its own group ends up
with zero liberties (a suicidal move) — UNLESS that same move
captures an enemy group, thereby freeing up a liberty.
THE KO RULE
You may not immediately recreate the board position that existed
before your opponent's last move — this prevents an endless back-
and-forth recapture of the same point. Playing anywhere else first
is enough; the point becomes capturable again on your next turn.
The more elaborate "positional superko" (triple repetition) rule is
NOT implemented.
GAME END AND SCORING
Two passes in a row end the game. Scoring uses CHINESE (area)
rules: score = number of your stones on the board + number of empty
points bordering ONLY your color (points touching both colors are
neutral and go to neither). White receives komi (compensation for
black moving first) — 7.5 points regardless of board size.
IMPORTANT SIMPLIFICATION: the "dead stone removal" phase before
scoring isn't implemented — the game is scored based on whatever is
literally still on the board at the second pass. If a stone is
effectively surrounded but never actually captured, it still counts
as alive for its color. So before passing twice, make sure to
actually capture any hopeless opposing stones rather than relying
on them being "obviously dead."
CONTROLS
↑↓←→ / hjkl move the cursor around the board
enter/space place a stone on the square under the cursor
p pass
q quit to menu
After the game ends:
n new game (same board size and difficulty)
q quit to menu
`
func goRules() string {
if CurrentLang() == LangEN {
return goRulesEN
}
return goRulesRU
}
// --- Сапёр (Minesweeper) --------------------------------------------
const minesweeperRulesRU = `САПЁР (MINESWEEPER)
Классический Сапёр без ботов и соперников. Перед началом партии
можно выбрать один из трёх классических пресетов размера поля.
ЦЕЛЬ
Открыть все клетки, под которыми нет мины, ни разу не открыв
клетку с миной.
ПРЕСЕТЫ ПОЛЯ
Новичок — 9x9, 10 мин
Любитель — 16x16, 40 мин
Эксперт — 30x16, 99 мин
ХОДЫ
Открытая клетка либо взрывается (если там мина — партия окончена
поражением), либо показывает число мин среди восьми соседних
клеток. Если соседних мин ноль — открытие автоматически
распространяется на все соседние клетки каскадом, и так далее,
пока не наткнётся на клетки с ненулевым числом.
Первый ход в партии ГАРАНТИРОВАННО безопасен: мины расставляются
только после него, и координаты первой открытой клетки (вместе со
всеми её соседями) исключаются из расстановки — это чуть щедрее
классического правила (там исключается только сама клетка), зато
первый ход почти всегда сразу открывает небольшую область.
Клетку можно пометить флагом (подозрение на мину) — это просто
визуальная пометка для себя, она не влияет на игру и не открывает
клетку; помеченную клетку сначала нужно снять с пометки, чтобы
открыть.
ХОРДА: если нажать на уже открытую клетку с числом, а рядом с ней
уже стоит ровно столько флагов, сколько показывает это число, все
остальные закрытые соседи откроются автоматически — это ускоряет
игру, знакомая опытным игрокам возможность. Если хотя бы один флаг
стоит неверно (не на настоящей мине), хорда может привести к
проигрышу — как и в оригинальной игре.
ПОБЕДА И ПОРАЖЕНИЕ
Победа наступает, когда открыты все клетки, кроме тех, где мины.
Поражение — как только открыта клетка с миной (при этом
раскрываются все мины на поле, чтобы было видно, где они были).
УПРАВЛЕНИЕ
↑↓←→ / hjkl передвижение курсора по полю
enter/space открыть клетку под курсором (или хорда, если она
уже открыта)
f поставить/снять флаг на клетке под курсором
q выход в меню
После завершения партии:
n новая партия (тот же размер поля)
q выход в меню
`
const minesweeperRulesEN = `MINESWEEPER
Classic Minesweeper, no bots or opponents. Before the game starts
you can pick one of three classic field size presets.
GOAL
Reveal every cell that isn't a mine, without ever revealing a
mined cell.
FIELD PRESETS
Beginner — 9x9, 10 mines
Intermediate — 16x16, 40 mines
Expert — 30x16, 99 mines
MOVES
Revealing a cell either blows up (if it's a mine — game over) or
shows how many of its eight neighbors are mines. If that count is
zero, the reveal automatically cascades to all neighboring cells,
and so on, until it reaches cells with a nonzero count.
Your very first move is GUARANTEED safe: mines are placed only
after it, and the coordinates of that first cell (along with all
its neighbors) are excluded from mine placement — a bit more
generous than the classic rule (which only excludes the cell
itself), so the first move almost always opens up a small area
right away.
You can flag a cell (mark it as a suspected mine) — this is purely
a visual note to yourself, it doesn't affect the game and doesn't
reveal the cell; a flagged cell must be unflagged first before it
can be revealed.
CHORDING: pressing an already-revealed numbered cell, when exactly
that many flags are already placed around it, automatically reveals
all of its remaining unflagged neighbors — a speed-up trick well
known to experienced players. If even one of those flags is wrong
(not actually on a mine), chording can cost you the game — just
like in the original.
WINNING AND LOSING
You win once every non-mine cell has been revealed. You lose the
instant a mined cell is revealed (all mines are then shown, so you
can see where they were).
CONTROLS
↑↓←→ / hjkl move the cursor around the field
enter/space reveal the cell under the cursor (or chord, if it's
already revealed)
f toggle a flag on the cell under the cursor
q quit to menu
After the game ends:
n new game (same field size)
q quit to menu
`
func minesweeperRules() string {
if CurrentLang() == LangEN {
return minesweeperRulesEN
}
return minesweeperRulesRU
}
// --- Странник (Wayfarer) --------------------------------------------
const wayfarerRulesRU = `СТРАННИК (WAYFARER)
Текстовая космоторговля, вдохновлённая классической Elite (David
Braben, Ian Bell), но не являющаяся её копией: собственный алгоритм
процедурной галактики, свои названия и тексты, свои квесты.
Настоящего 3D-полёта в реальном времени нет — это сознательное
решение (честный 3D-рендер в терминале потребовал бы отдельного
движка сопоставимой с самой игрой сложности); вместо этого перелёты,
опасные встречи и сюжетные квесты разрешаются текстом с выбором.
СОХРАНЕНИЕ
Как и "Трупные батончики", это открытая карьера без фиксированного
конца — партия сохраняется на диск автоматически при выходе в
меню. Гибель корабля БЕЗ спасательной капсулы необратимо удаляет
сохранение — карьера начинается с чистого листа (как перманентная
смерть в оригинальной Elite, только чуть смягчённая: капсула даёт
шанс выжить).
ГАЛАКТИКА
4 галактики по 128 систем в каждой — итого 512 звёздных систем,
сгенерированных детерминированно (одна и та же система при новой
карьере всегда одна и та же). У каждой системы своё правительство
(от анархии до корпоративного государства — влияет на опасность
перелётов и строгость досмотра груза), уровень технологий,
промышленность/сельское хозяйство и благосостояние — это определяет
цены на рынке.
ПАСХАЛКА: как и в оригинальной Elite, где галактику можно было
поменять, отредактировав числа генератора в коде игры, — здесь
можно получить совершенно другую галактику, не трогая код
коллекции. Создайте файл .env рядом с исполняемым файлом (или в
текущей рабочей директории) со строкой:
WAYFARER_GALAXY_SEED=12345
Любое целое число — и все 512 систем, их названия, правительства
и характеристики будут другими. Без файла .env используется
обычная (стандартная) галактика.
ТОРГОВЛЯ
10 видов товаров, включая два незаконных (контрабанда, оружие) —
их проверяют патрули в системах со строгим правительством. Цена
зависит от типа экономики системы: аграрные дешевле продают
продовольствие, промышленные — технику, и так далее. Цены
фиксируются в момент стыковки со станцией и не меняются, пока вы
там находитесь, — пересчитываются заново только при следующей
стыковке (после перелёта). Пока товар лежит в трюме, рынок
показывает среднюю цену, по которой он был куплен, — удобно
сравнить с текущей ценой перед продажей.
ПЕРЕЛЁТЫ И ОПАСНЫЕ ВСТРЕЧИ
Прыжок в пределах галактики тратит топливо пропорционально
расстоянию. Чем опаснее правительство системы назначения, тем выше
шанс случайной встречи: пиратская засада (пошаговый бой), досмотр
патруля (незаконный груз могут конфисковать), сигнал бедствия
(обычно — честная награда за помощь, изредка — ловушка) или
обломки корабля (случайная находка). Межгалактический прыжок
требует почти полного бака; цель выбирается явно — вводите
координаты (номер галактики и номер системы внутри неё), экран
сразу показывает название, правительство и уровень технологий
системы по этим координатам благодаря детерминированной генерации
галактики, даже если вы там ещё не бывали.
ПОШАГОВЫЙ БОЙ
С самого начала боя видно, чем вооружён противник: лазер, обычные
ракеты или самонаводящиеся. У обеих сторон — и у вас, и у врага —
щит держится отдельными запасами на четырёх направлениях: нос,
хвост, левый борт, правый борт. Список ваших действий каждый раунд
собирается заново под конкретную ситуацию:
- Атака лазером или ракетой — при выборе оружия (лазер, обычная
или самонаводящаяся ракета, если она есть на борту) открывается
отдельный шаг: куда именно бить — в один из четырёх щитов
врага. Ракета расходует один боеприпас из ограниченного числа
ракетных слотов корабля (у стартового — 2 слота на обе ракеты
вместе).
- Бегство и переговоры — как и раньше.
- Уклонение — только если противник атакует ОБЫЧНОЙ ракетой:
шанс полностью избежать урона в этом раунде. От
самонаводящейся ракеты так увернуться нельзя.
- Тепловая ловушка — единственная защита от самонаводящейся
ракеты; расходуемый предмет, покупается на верфи заранее.
- Распределение энергии щита — отдельное действие: перераспределить
свой щит между четырьмя направлениями. Настройка занимает
раунд — противник всё равно атакует, уже по новому распределению.
Ракеты (что обычные, что самонаводящиеся) слабее лазера, пока щит
с той стороны, куда они попали, ещё держится, но заметно сильнее,
если щита с этой стороны уже нет вовсе — обратная зависимость от
лазера, у которого сила урона не меняется от состояния щита. Щит
поглощает урон первым, затем в дело идёт корпус.
Перед каждым вашим ходом видно, откуда заходит враг для следующей
атаки — это сужает набор направлений, куда реально может прилететь
удар, но не называет точное направление: заход спереди — удар
точно в нос; сзади — точно в хвост; слева — либо в левый борт,
либо в хвост; справа — либо в правый борт, либо в хвост; сверху
или снизу — либо в нос, либо в хвост. Так распределение щита
становится осмысленным решением, а не угадыванием вслепую.
Атаковать врага в ответ можно в любое из четырёх направлений его
собственного щита — независимо от подсказки о его заходе.
Без спасательной капсулы гибель корабля необратимо заканчивает
карьеру.
КВЕСТЫ
8 полноценных сюжетных линий с ветвлениями и разными исходами —
от эвакуации колонистов перед вспышкой сверхновой до находки
артефакта предтеч. Задания не выбираются свободно из списка — они
сами предлагаются со случайной вероятностью при спокойном прибытии
в систему (если сейчас нет активного задания и остались
невыполненные). Можно согласиться или отказаться; отказ ничем не
грозит — то же (или другое) задание может предложиться снова
позже. Одновременно активно только одно задание; выбор в его ходе
влияет на награду, здоровье корабля и иногда — на груз.
СОБСТВЕННЫЕ КВЕСТЫ: помимо 8 встроенных, можно добавить свои,
не трогая код игры — положите .yaml файл в директорию "quests"
рядом с исполняемым файлом (или в директорию, откуда запускаете
игру), и перезапустите программу. Формат файла и подробные
комментарии — в example_quests/lost_satellite.yaml. Файлы с
ошибками (плохой синтаксис, неполный перевод, конфликт ключа с
уже существующим квестом) просто пропускаются с предупреждением
в stderr — никогда не ломают игру целиком.
СНАРЯЖЕНИЕ И РЕМОНТ
На верфи можно дозаправиться, починить корпус, купить ракеты
(обычные и самонаводящиеся — в пределах ракетных слотов корабля)
и тепловые ловушки, а также один раз приобрести каждый апгрейд:
топливный скиммер, расширение трюма, усиление щита, спасательную
капсулу, улучшенный лазер.
УПРАВЛЕНИЕ
На станции (хаб):
1 рынок 2 верфь 3 перелёт 4 квесты
q сохранить карьеру и выйти в меню
N начать новую карьеру (с подтверждением — текущая карьера
будет безвозвратно потеряна)
Рынок/верфь/перелёт/квесты:
↑↓ / kj выбор пункта
b / s купить/продать 1 единицу (на рынке)
B / S купить максимум / продать всё (на рынке)
enter подтвердить выбор
q/esc назад в хаб
Выбор координат межгалактического прыжка:
←→ номер галактики
↑↓ номер системы ±1
Shift+↑↓ номер системы ±10
enter прыжок q/esc назад
В бою (список действий собирается под ситуацию — актуальные
номера всегда показаны на экране):
номер выбрать действие из показанного списка
После выбора "атаковать лазером/ракетой" — куда бить:
1-4 нос / хвост / левый борт / правый борт врага
esc отменить выбор оружия
При выборе "распределить энергию щита":
←→ выбор направления (нос/хвост/левый борт/правый борт)
↑↓ ±5 к выбранному направлению
enter подтвердить распределение esc отменить
`
const wayfarerRulesEN = `WAYFARER
A text-based space trading game inspired by the classic Elite (David
Braben, Ian Bell), but not a copy of it: its own procedural galaxy
algorithm, its own names and text, its own quests. There's no real-
time 3D flight — that's a deliberate choice (an honest 3D renderer in
a terminal would need a separate engine about as complex as the game
itself); instead, travel, dangerous encounters, and story quests are
all resolved through text with choices.
SAVING
Like Corpse-Starch Box, this is an open-ended career with no fixed
end — the game saves to disk automatically when you quit to the
menu. Losing your ship WITHOUT an escape pod permanently deletes
the save — your career starts over from scratch (like permadeath in
the original Elite, just slightly softened: the pod gives you a
chance to survive).
THE GALAXY
4 galaxies of 128 systems each — 512 star systems in total,
generated deterministically (the same system is always the same
system on a new career). Each system has its own government (from
anarchy to corporate state — affects travel danger and how strict
cargo inspections are), tech level, industry/agriculture balance,
and wealth — these determine market prices.
EASTER EGG: just like the original Elite, where you could get a
whole new galaxy by editing the generator's seed numbers in the
game's source code — here you can get an entirely different galaxy
without touching the collection's code at all. Create a .env file
next to the executable (or in the current working directory) with
the line:
WAYFARER_GALAXY_SEED=12345
Any integer works — and all 512 systems, their names, governments,
and stats will come out different. Without a .env file, the
standard (default) galaxy is used.
TRADING
10 types of goods, including two illegal ones (contraband, firearms)
— patrols check for them in systems with strict governments. Prices
depend on the system's economy: agricultural systems sell food
cheaply, industrial ones sell machinery cheaply, and so on. Prices
are fixed the moment you dock at a station and don't change while
you're there — they're only rerolled the next time you dock (after
a jump). While a good is sitting in your hold, the market shows the
average price you paid for it — handy for comparing against the
current price before selling.
TRAVEL AND DANGEROUS ENCOUNTERS
A jump within the galaxy costs fuel proportional to distance. The
more dangerous the destination system's government, the higher the
chance of a random encounter: a pirate ambush (turn-based combat), a
patrol inspection (illegal cargo may be confiscated), a distress
signal (usually a fair reward for helping, occasionally a trap), or
a derelict ship (a random find). An intergalactic jump needs a
nearly full tank; the destination is chosen explicitly — enter
coordinates (galaxy number and system number within it), and the
screen immediately shows that system's name, government, and tech
level thanks to the galaxy's deterministic generation, even if
you've never been there.
TURN-BASED COMBAT
From the start of combat you can see what the enemy is armed with:
laser, regular missiles, or homing missiles. Both sides — you and
the enemy — hold shields as independent pools across four facings:
fore, aft, left side, right side. Your list of available actions is
rebuilt each round to fit the situation:
- Attack with laser or missile — choosing a weapon (laser, or a
regular/homing missile if you're carrying one) opens a separate
step: which of the enemy's four shield facings to hit. A
missile consumes one round from your ship's limited missile
capacity (the starting ship holds 2, shared between both
types).
- Flee and negotiate — same as before.
- Dodge — only when the enemy is firing a REGULAR missile: a
chance to avoid all damage this round. Homing missiles can't be
dodged this way.
- Thermal decoy — the only defense against a homing missile; a
consumable item, bought ahead of time at the shipyard.
- Distribute shield energy — a separate action: redistribute your
own shield across the four facings. Adjusting it costs a round —
the enemy still gets to attack, now against your new
distribution.
Missiles (either kind) are weaker than the laser while the shield
on the hit facing still holds, but noticeably stronger once that
facing's shield is gone entirely — the opposite of the laser, whose
damage doesn't change based on shield status. Shields absorb damage
first, then the hull.
Before each of your turns you can see which direction the enemy is
approaching from for their next attack — this narrows down which
facings the hit could actually land on, without naming the exact
one: approaching head-on means the hit lands squarely on your nose;
from behind, squarely on your tail; from the left, either your left
side or your tail; from the right, either your right side or your
tail; from above or below, either your nose or your tail. This
makes shield redistribution a genuine decision instead of blind
guessing. You can strike back at any of the enemy's four shield
facings, regardless of their own approach hint.
Without an escape pod, losing your ship permanently ends your
career.
QUESTS
8 full story arcs with branching choices and different outcomes —
from evacuating colonists ahead of a supernova to uncovering a
precursor artifact. Quests aren't freely picked from a list — they
offer themselves at random when you arrive safely at a system (as
long as you have no active quest and some are still unfinished).
You can accept or decline; declining has no downside — the same
(or another) quest may be offered again later. Only one quest can
be active at a time; your choices along the way affect the reward,
your ship's health, and sometimes your cargo.
CUSTOM QUESTS: besides the 8 built-in ones, you can add your own
without touching the game's code — drop a .yaml file into a
"quests" directory next to the executable (or in the directory
you run the game from), then restart the program. The file format
and detailed comments are in example_quests/lost_satellite.yaml.
Files with errors (bad syntax, incomplete translation, a key that
collides with an existing quest) are simply skipped with a
warning in stderr — they never break the game as a whole.
EQUIPMENT AND REPAIRS
At the shipyard you can refuel, repair the hull, buy missiles
(regular and homing — within your ship's missile capacity) and
thermal decoys, and buy each upgrade once: a fuel scoop, a cargo
bay expansion, a shield booster, an escape pod, and an improved
laser.
CONTROLS
At the station (hub):
1 market 2 shipyard 3 travel 4 quests
q save career and quit to menu
N start a new career (with confirmation — your current career
will be permanently lost)
Market/shipyard/travel/quests:
↑↓ / kj select an item
b / s buy/sell 1 unit (market)
B / S buy max / sell all (market)
enter confirm selection
q/esc back to hub
Intergalactic jump coordinate picker:
←→ galaxy number
↑↓ system number ±1
Shift+↑↓ system number ±10
enter jump q/esc back
In combat (the action list is rebuilt for the situation — the
current numbers are always shown on screen):
number choose an action from the list shown
After choosing "attack with laser/missile" — where to strike:
1-4 the enemy's fore / aft / left side / right side
esc cancel the weapon choice
While "distribute shield energy" is selected:
←→ select a facing (fore/aft/left/right)
↑↓ ±5 to the selected facing
enter confirm distribution esc cancel
`
func wayfarerRules() string {
if CurrentLang() == LangEN {
return wayfarerRulesEN
}
return wayfarerRulesRU
}
// --- Крестики-нолики (Tic-Tac-Toe) ---------------------------------
const ticTacToeRulesRU = `КРЕСТИКИ-НОЛИКИ — правила (1 игрок против бота)
Классика на доске 3×3. Крестики всегда ходят первыми; каким знаком
играете вы — решается случайно при начале каждой партии (иногда
достаются нолики, и тогда бот делает первый ход автоматически).
ЦЕЛЬ
Выстроить три своих знака подряд — по горизонтали, вертикали или
диагонали. Если все 9 клеток заполнены и никто не выстроил линию —
ничья.
УРОВНИ СЛОЖНОСТИ БОТА
Лёгкий — ходит совершенно случайно, обыграть легко.
Средний — не упустит собственную победу и заблокирует вашу, если
вы под угрозой на следующем ходу, но не считает партию дальше
чем на один ход вперёд — обыграть можно, хоть и не всегда просто.
Непобедимый — полный перебор всей оставшейся партии на каждом
ходу. Крестики-нолики — полностью решённая игра: при точной игре
обеих сторон всегда получается ничья. На этом уровне бот не
ошибается никогда — выиграть у него невозможно в принципе,
лучшее, чего можно добиться, — ничья.
УПРАВЛЕНИЕ
1-9 поставить знак в клетку с этим номером напрямую
←↑↓→ переместить курсор по клеткам
enter поставить знак в клетку под курсором
n новая партия (после завершения текущей)
q выход в меню
`
const ticTacToeRulesEN = `TIC-TAC-TOE — rules (1 player against a bot)
The classic 3×3 game. X always goes first; which mark you play as is
decided randomly at the start of each game (sometimes you get O, in
which case the bot automatically makes the first move).
GOAL
Line up three of your own marks — horizontally, vertically, or
diagonally. If all 9 cells fill up with no line formed, it's a draw.
BOT DIFFICULTY LEVELS
Easy — moves completely at random, easy to beat.
Medium — won't miss its own win and will block yours if you're
threatening to win on the next move, but doesn't look more than
one move ahead — beatable, though not always trivially.
Unbeatable — a full search of the entire remaining game on every
move. Tic-tac-toe is a fully solved game: with perfect play on
both sides, it always ends in a draw. At this level the bot never
makes a mistake — beating it is flatly impossible; the best you
can achieve is a draw.
CONTROLS
1-9 place your mark directly in the cell with that number
←↑↓→ move the cursor between cells
enter place your mark in the cell under the cursor
n new game (once the current one is over)
q quit to menu
`
func ticTacToeRules() string {
if CurrentLang() == LangEN {
return ticTacToeRulesEN
}
return ticTacToeRulesRU
}
// --- Нарды (Nardy / Backgammon) -------------------------------------
const nardyRulesRU = `НАРДЫ — правила (1 игрок против бота, короткие или длинные)
У нард много региональных вариантов и разночтений даже в самых
известных правилах. Здесь реализован один конкретный, наиболее
распространённый набор правил каждого из двух вариантов — короткие
и длинные нарды выбираются перед началом партии, вместе с уровнем
сложности бота.
ОБЩЕЕ ДЛЯ ОБОИХ ВАРИАНТОВ
У каждого игрока по 15 шашек. Доска — 24 пункта, пронумерованных
для каждого игрока отдельно, начиная от дальней точки ("голова",
пункт 24) к своему дому (пункты 1-6). Игроки по очереди бросают
по два кубика и должны использовать оба выпавших значения (если
это физически возможно — иначе очки того значения, что нельзя
применить, сгорают). Если выпал дубль (одинаковые числа на обоих
кубиках) — доступны сразу четыре хода этим значением, а не два.
Если можно сыграть лишь ОДНУ кость из двух разных значений (а не
обе) — обязана быть сыграна большая. С "головы" за один ход можно
взять только одну шашку. Когда все 15 шашек игрока оказались в
его доме, он начинает их снимать с доски: снятие возможно точным
значением кости, либо, если шашек дальше по дому уже не осталось,
избыточным значением. Первый, кто снял все 15 шашек, выигрывает.
ГЛАВНОЕ ОТЛИЧИЕ КОРОТКИХ И ДЛИННЫХ НАРД
В коротких нардах игроки расставлены зеркально и движутся
навстречу друг другу; одинокую шашку соперника ("блот") можно
сбить, поставив на неё свою — сбитая уходит на "бар" и должна
зайти заново в дом соперника, прежде чем игрок сможет ходить
чем-то ещё. В длинных нардах взятия нет вовсе: точка, занятая
ХОТЯ БЫ ОДНОЙ шашкой соперника, полностью заблокирована — на неё
нельзя встать никак. Оба игрока в длинных нардах, кроме того,
движутся в одном и том же направлении по кругу (а не навстречу
друг другу), и все 15 шашек каждого игрока в начале партии стоят
на одной точке ("голова"), а не рассредоточены по доске.
ЧТО СОЗНАТЕЛЬНО УПРОЩЕНО
Куб удвоения ставок не реализован. Особое правило "снять две
шашки с головы первым ходом при определённых дублях" (встречается
в некоторых сводах правил длинных нард) не реализовано — с головы
всегда берётся не больше одной шашки за ход, без исключений.
Ограничение на полную блокировку всех 15 шашек соперника
заграждением из шести подряд занятых пунктов (спорное правило,
по-разному трактуемое даже в разных источниках длинных нард) тоже
не реализовано отдельной проверкой.
УРОВНИ СЛОЖНОСТИ БОТА
Лёгкий — случайный выбор среди легальных ходов.
Средний — оценивает каждый отдельный шаг хода и берёт локально
лучший вариант, не заглядывая дальше одного шага вперёд.
Сильный — перебирает все способы разыграть выпавшие кости целиком
за этот ход и оценивает итоговую позицию, выбирая лучшую
последовательность. Это не идеальная игра (нарды, в отличие от
крестиков-ноликов, не решены полностью из-за случайности
костей) — но заметно сильнее эвристики среднего уровня за счёт
взгляда на весь ход, а не по шагам.
УПРАВЛЕНИЕ
В свой ход:
r/enter бросить кости (пока не брошены)
1-9 выбрать, с какой точки ходить (пунктов с шашками
обычно не больше 8-9 одновременно)
1-9 если у выбранной точки несколько вариантов кости —
выбрать нужный вариант вторым нажатием
esc вернуться к выбору точки, не походив
В любой момент:
q выход в меню
`
const nardyRulesEN = `NARDY (BACKGAMMON) — rules (1 player against a bot, short or long)
Nardy has many regional variants and disagreements even about its
best-known rules. One specific, widely-used ruleset is implemented
for each of the two variants — short and long nardy are chosen
before the game starts, along with the bot's difficulty level.
COMMON TO BOTH VARIANTS
Each player has 15 checkers. The board has 24 points, numbered
separately for each player starting from the farthest point (the
"head", point 24) toward their own home (points 1-6). Players take
turns rolling two dice and must use both values if physically
possible (otherwise any value that can't be used is forfeited). A
double (same number on both dice) gives four moves of that value
instead of two. If only ONE of two different die values can be
played (not both), the larger one must be played. Only one checker
may leave the "head" per turn. Once all 15 of a player's checkers
are in their home, they begin bearing off: exact die values remove
a checker precisely, and if no checkers remain further back in the
home board, an excess die value may be used too. First to bear off
all 15 checkers wins.
THE KEY DIFFERENCE BETWEEN SHORT AND LONG NARDY
In short nardy, players are set up as mirror images and move
toward each other; a lone opposing checker (a "blot") can be hit
by landing on it — the hit checker goes to the "bar" and must
re-enter the opponent's home board before that player can make any
other move. In long nardy there is no hitting at all: a point
occupied by EVEN ONE opposing checker is completely blocked — you
simply cannot land there. Both players in long nardy also move in
the SAME direction around the board (not toward each other), and
all 15 of each player's checkers start the game stacked on a
single point (the "head") rather than spread across the board.
WHAT'S DELIBERATELY SIMPLIFIED
The doubling cube is not implemented. A special rule found in some
long nardy rulesets ("take two checkers off the head on the very
first move with certain doubles") is not implemented — no more
than one checker may ever leave the head in a single turn, no
exceptions. The restriction against fully blocking all 15 of the
opponent's checkers with a six-point prime (a contested rule that
even different long nardy sources describe differently) also isn't
enforced as a separate check.
BOT DIFFICULTY LEVELS
Easy — picks randomly among legal moves.
Medium — evaluates each individual sub-move and takes the locally
best option, without looking more than one step ahead.
Strong — searches every way to play out the dice roll for the
whole turn and evaluates the resulting position, picking the
best sequence. This isn't perfect play (unlike tic-tac-toe,
backgammon isn't fully solved because of the dice randomness) —
but it's noticeably stronger than the medium heuristic thanks to
looking at the whole turn rather than one step at a time.
CONTROLS
On your turn:
r/enter roll the dice (before they've been rolled)
1-9 choose which point to move from (there are usually no
more than 8-9 occupied points at once)
1-9 if the chosen point has more than one die option,
pick the one you want with a second press
esc go back to picking a point without moving
At any time:
q quit to menu
`
func nardyRules() string {
if CurrentLang() == LangEN {
return nardyRulesEN
}
return nardyRulesRU
}
// --- Игра Ур (Royal Game of Ur) --------------------------------------
const urRulesRU = `ИГРА УР (ROYAL GAME OF UR) — правила (1 игрок против бота)
Одна из старейших известных настольных игр — найдена при раскопках
Ура (Месопотамия) археологом Леонардом Вулли в 1920-30-х, возрастом
около 4600 лет. Подлинные правила были долгое время неизвестны;
здесь реализована реконструкция Ирвинга Финкеля (British Museum,
2007) — самая распространённая сегодня, основанная на переводе
клинописной таблички II века до н.э. Другие историки (Мастерс,
Мюррей) предлагают несколько иной путь по доске — это ОДНА из
конкурирующих реконструкций, не единственно верная.
ДОСКА И ФИШКИ
Доска составлена из двух блоков, соединённых узким "мостиком":
блок 4×3 (частный ряд каждого игрока — верхний у вас, нижний у
бота — плюс общий средний ряд) и блок 2×3 (у каждого игрока свой
ряд для выхода с доски). У каждого игрока по 7 шашек, изначально
все в руке (не на доске). Путь одной шашки — 14 клеток: 4 частные
клетки входа, 8 общих клеток среднего ряда (там и только там
происходят встречи с шашками соперника), 2 частные клетки выхода;
15-й "шаг" снимает шашку с доски.
КОСТИ
Четыре монеты (в оригинале — тетраэдрические кости с двумя
отмеченными гранями из четырёх); бросок даёт от 0 до 4 очков.
Значения не равновероятны: 2 выпадает чаще всего, 0 и 4 — реже
всего. Бросок 0 сжигает ход целиком.
ХОД
Выпавшим числом можно ввести шашку с руки на доску, либо
продвинуть уже стоящую шашку. Нельзя вставать на клетку, занятую
своей же шашкой. На общей клетке с одинокой шашкой соперника —
она берётся и уходит обратно в руку соперника. Пять клеток на
доске отмечены розеткой (по одной в каждом частном ряду входа и
выхода, плюс одна — в середине общего ряда): попадание на розетку
даёт дополнительный бросок, а розетка в общем ряду вдобавок
защищает стоящую там шашку от взятия. Снятие шашки с доски (после
14-й клетки) требует точного броска — перелёт недопустим, такой
ход просто не предлагается. Если нет ни одного легального хода —
очередь сразу переходит сопернику.
ПОБЕДА
Первый, кто снял с доски все 7 шашек, выигрывает.
УРОВНИ СЛОЖНОСТИ БОТА
Лёгкий — случайный выбор среди легальных ходов.
Средний — оценивает результат каждого хода (прогресс по пути,
взятие соперника, попадание на розетку) и берёт лучший вариант.
Сильный — вдобавок учитывает, с какой вероятностью соперник сможет
сразу же взять эту шашку следующим броском, и избегает
неоправданного риска.
УПРАВЛЕНИЕ
r/enter бросить кости (пока не брошены)
1-9 выбрать, какой шашкой сходить (шашек всего 7, так что
все варианты всегда умещаются в список)
q выход в меню
`
const urRulesEN = `THE ROYAL GAME OF UR — rules (1 player against a bot)
One of the oldest known board games — unearthed at the Royal
Cemetery of Ur (Mesopotamia) by archaeologist Leonard Woolley in the
1920s-30s, roughly 4,600 years old. The original rules were unknown
for a long time; this implements Irving Finkel's reconstruction
(British Museum, 2007) — the most widely played version today, based
on his translation of a 2nd-century-BCE cuneiform tablet. Other
historians (Masters, Murray) propose a somewhat different path
around the board — this is ONE of several competing reconstructions,
not the single correct one.
BOARD AND PIECES
The board is made of two blocks joined by a narrow bridge: a 4×3
block (each player's private row — yours on top, the bot's on the
bottom — plus the shared middle row) and a 2×3 block (each player's
own row for leaving the board). Each player has 7 pieces, all
starting in hand (off the board). A piece's path is 14 squares: 4
private entry squares, 8 shared middle-row squares (the only place
where you and the opponent ever meet — and where captures happen),
2 private exit squares; the 15th "step" removes the piece from the
board.
DICE
Four coins (originally, tetrahedral dice with two marked corners
out of four); a roll gives 0 to 4 points. The values aren't equally
likely: 2 comes up most often, 0 and 4 least often. Rolling a 0
forfeits the whole turn.
YOUR TURN
Use the rolled number to bring a piece from hand onto the board, or
advance a piece already there. You can't land on a square already
occupied by your own piece. On a shared square holding a lone
opposing piece, that piece is captured and sent back to the
opponent's hand. Five squares on the board are marked with a
rosette (one in each player's entry and exit row, plus one in the
middle of the shared row): landing on a rosette grants an extra
roll, and the rosette in the shared row also protects the piece
standing there from capture. Bearing a piece off the board (past
square 14) requires an exact roll — overshooting isn't allowed, and
such a move simply won't be offered. If there's no legal move at
all, the turn passes straight to the opponent.
WINNING
First to bear all 7 pieces off the board wins.
BOT DIFFICULTY LEVELS
Easy — picks randomly among legal moves.
Medium — evaluates the outcome of each move (progress along the
path, capturing the opponent, landing on a rosette) and takes the
best option.
Strong — additionally accounts for how likely the opponent is to
immediately capture that piece on their next roll, and avoids
unnecessary risk.
CONTROLS
r/enter roll the dice (before they've been rolled)
1-9 choose which piece to move (there are only 7 pieces
total, so every option always fits in the list)
q quit to menu
`
func urRules() string {
if CurrentLang() == LangEN {
return urRulesEN
}
return urRulesRU
}
// --- Сенет (Senet) ---------------------------------------------------
const senetRulesRU = `СЕНЕТ (SENET) — правила (1 игрок против бота)
Одна из старейших известных настольных игр — упоминается в Египте
примерно с 3500 года до н.э., найдена даже в гробнице Тутанхамона.
Ни один текст с подлинными правилами не сохранился; здесь
реализована консолидированная реконструкция (по работам Тимоти
Кендалла и Жоржа Жекье) — самая распространённая сегодня в цифровых
версиях игры. Другие историки (например, Р. К. Белл) предлагают
заметно иные правила — это ОДНА из конкурирующих реконструкций, а не
восстановленные подлинные правила древней игры.
ДОСКА И ФИШКИ
Доска — 30 клеток, три ряда по десять, путь змейкой: 1-10 слева
направо, 11-20 справа налево, 21-30 снова слева направо. У
каждого игрока по 5 шашек; при начале партии они чередуются на
первых десяти клетках (нечётные — вам, чётные — боту).
БРОСОК
Четыре метательные палочки (каждая — светлой или тёмной стороной
вверх); число светлых сторон переводится в очки по историческому
соглашению: 0 → 5, 1 → 1, 2 → 2, 3 → 3, 4 → 4. Броски 1, 4 и 5
дают дополнительный ход тому же игроку; 2 и 3 — нет.
ХОД
Шашка двигается ровно на выпавшее число клеток. Если клетка
назначения занята ОДИНОКОЙ шашкой соперника — шашки меняются
местами (в Сенете взятие устроено именно так, а не "выбиванием").
Если подряд стоят ДВЕ и больше своих шашек — они защищены, их
нельзя ни занять, ни обменять. ТРИ и больше подряд — уже
заграждение: сквозь него нельзя даже ПРОЙТИ, даже если клетка за
ним свободна (правда, заграждение не "заворачивает" за угол
доски — переходы 10→11 и 20→21 всегда разрывают цепочку). Если
выпавшим числом нельзя сходить вперёд ни одной шашкой — по тем же
правилам нужно сходить НАЗАД; если и назад нельзя — ход сгорает
целиком.
ОСОБЫЕ КЛЕТКИ
15 (Дом возрождения) и 26 (Дом красоты) — безопасные клетки,
шашку на них нельзя тронуть вовсе. 27 (Дом воды) — ловушка:
попав туда, шашка сразу отскакивает обратно на клетку 15 (или на
ближайшую свободную клетку перед ней). 28 (Дом трёх истин) и 29
(Дом Ра-Атума) — тоже безопасные, но снять шашку с них можно
только точным броском: с 28 — ровно 3, с 29 — ровно 2, с 30 —
ровно 1; промах просто не даёт снять шашку (перелёта с "отскоком"
назад в этой версии нет — источники по этому нюансу расходятся, и
выбран более простой вариант).
ПОБЕДА
Первый, кто снял с доски все 5 шашек, выигрывает.
УРОВНИ СЛОЖНОСТИ БОТА
Лёгкий — случайный выбор среди легальных ходов.
Средний — оценивает результат каждого хода (продвижение, защита
своих шашек, обмен с шашкой соперника, безопасные клетки).
Сильный — вдобавок учитывает риск немедленного обмена соперником
следующим броском и избегает неоправданного риска.
УПРАВЛЕНИЕ
r/enter бросить палочки (пока не брошены)
1-9 выбрать, какой шашкой сходить (шашек всего 5, так что
все варианты всегда умещаются в список)
q выход в меню
`
const senetRulesEN = `SENET — rules (1 player against a bot)
One of the oldest known board games — attested in Egypt as far back
as 3500 BCE, and found even in Tutankhamun's tomb. No text with the
original rules has survived; this implements a consolidated
reconstruction (drawing on the work of Timothy Kendall and Georges
Jéquier) — the version most widely used in digital implementations
today. Other historians (R. C. Bell, for instance) propose notably
different rules — this is ONE of several competing reconstructions,
not the recovered original rules of the ancient game.
BOARD AND PIECES
The board has 30 squares, three rows of ten, in a snaking path:
1-10 left to right, 11-20 right to left, 21-30 left to right
again. Each player has 5 pieces; at the start of the game they
alternate across the first ten squares (odd squares are yours,
even squares are the bot's).
THE THROW
Four throwing sticks (each landing light-side or dark-side up);
the number of light sides is converted to points by historical
convention: 0 → 5, 1 → 1, 2 → 2, 3 → 3, 4 → 4. Throws of 1, 4, and
5 grant the same player an extra turn; 2 and 3 do not.
YOUR TURN
A piece moves exactly the number of squares thrown. If the
destination holds a LONE opposing piece, the two pieces swap
places (Senet's captures work this way, not by removal). If TWO or
more of a player's pieces stand consecutively, they're protected —
can't be landed on or swapped with. THREE or more in a row form a
blockade: you can't even PASS THROUGH it, even if the square
beyond is free (though a blockade doesn't "wrap" around a board
corner — the transitions 10→11 and 20→21 always break the chain).
If the rolled number can't move any piece forward, you must move
BACKWARD instead under the same rules; if that's not possible
either, the whole turn is forfeited.
SPECIAL SQUARES
15 (House of Rebirth) and 26 (House of Beauty) are safe squares —
a piece there can't be touched at all. 27 (House of Water) is a
trap: landing there immediately bounces the piece back to square
15 (or the nearest empty square before it). 28 (House of Three
Truths) and 29 (House of Re-Atum) are also safe, but a piece can
only leave them with an exact throw: exactly 3 from 28, exactly 2
from 29, exactly 1 from 30; missing that exact value simply
doesn't let the piece bear off (there's no "overshoot and bounce
back" here — sources disagree on that detail, and the simpler
version was chosen).
WINNING
First to bear all 5 pieces off the board wins.
BOT DIFFICULTY LEVELS
Easy — picks randomly among legal moves.
Medium — evaluates the outcome of each move (progress, protecting
your own pieces, swapping with an opposing piece, safe squares).
Strong — additionally accounts for the risk of an immediate swap
by the opponent on their next throw, and avoids unnecessary risk.
CONTROLS
r/enter throw the sticks (before they've been thrown)
1-9 choose which piece to move (there are only 5 pieces
total, so every option always fits in the list)
q quit to menu
`
func senetRules() string {
if CurrentLang() == LangEN {
return senetRulesEN
}
return senetRulesRU
}
// --- Техасский Холдем (Texas Hold'em) --------------------------------
const pokerRulesRU = `ТЕХАССКИЙ ХОЛДЕМ (NO-LIMIT) — правила
Турнирный формат с выбыванием: от 2 до 6 игроков (вы + боты),
играете, пока не останется один игрок с фишками — он и победитель
турнира. Блайнды фиксированы и не растут по ходу турнира (сознательное
упрощение ради управляемого объёма партии).
КОМБИНАЦИИ (от старшей к младшей)
Стрит-флеш, каре, фулл-хаус, флеш, стрит, тройка, две пары, пара,
старшая карта. Из своих 2 карт в руке и 5 общих карт на столе
собирается лучшая комбинация из любых пяти.
ХОД РАЗДАЧИ
Каждому раздаётся по 2 карты в закрытую. Малый и большой блайнды
ставятся автоматически (место дилера смещается на одного игрока
каждую раздачу). Дальше — четыре раунда торгов: префлоп (до общих
карт), флоп (три общие карты), тёрн (четвёртая), ривер (пятая), за
которыми следует вскрытие карт, если остался более чем один
игрок. В каждом раунде можно сбросить карты, чекнуть (если ставить
ещё не пришлось), уравнять чужую ставку, поставить/повысить, или
пойти ва-банк оставшимся стеком. Если фишек не хватает на полное
уравнивание — идёте в олл-ин тем, что есть, и в игре образуется
отдельный побочный банк для тех, кто может ставить дальше.
ЧТО СОЗНАТЕЛЬНО УПРОЩЕНО
По строгим турнирным правилам короткий олл-ин рейзом МЕНЬШЕ
полного размера предыдущего рейза не должен заново открывать
торги игрокам, которые уже походили в этом раунде — они обязаны
лишь доколлировать либо сбросить. Эта игра такого разграничения
не делает: любой рейз (в том числе короткий олл-ин) даёт всем
активным игрокам право хода заново, включая повторный рейз.
Расхождение с турнирными правилами возможно только в редких
ситуациях с несколькими короткостёчными олл-инами подряд.
БОТЫ
Честного решателя GTO (оптимальной по теории игр стратегии) тут
нет — вместо этого каждый бот оценивает силу своей руки методом
Монте-Карло (симулирует множество случайных завершений раздачи
против случайных карт соперников) и сравнивает её с шансами
банка. Три уровня сложности — лёгкий, средний, сильный — отличаются
тем, насколько точно бот считает эту вероятность и насколько
строго учитывает шансы банка; сильный уровень также изредка
блефует. Какой уровень достанется каждому боту — решается
случайно при создании партии, выбрать его нельзя.
УПРАВЛЕНИЕ
На своём ходу — пронумерованный список из доступных сейчас
действий (сброс, чек или уравнивание, ставка/рейз, ва-банк).
При выборе ставки/рейза:
←→/hl крупный шаг (5 больших блайндов)
↑↓/kj мелкий шаг (1 большой блайнд)
enter подтвердить
esc отменить, вернуться к списку действий
После завершения раздачи:
n/enter следующая раздача
В любой момент:
q выход в меню
`
const pokerRulesEN = `TEXAS HOLD'EM (NO-LIMIT) — rules
An elimination tournament format: 2 to 6 players (you plus bots),
playing until only one player has chips left — that player wins the
tournament. Blinds are fixed and don't increase over the course of
the tournament (a deliberate simplification to keep the session a
manageable length).
HAND RANKINGS (highest to lowest)
Straight flush, four of a kind, full house, flush, straight, three
of a kind, two pair, pair, high card. The best five-card hand is
built from any combination of your 2 hole cards and the 5 community
cards.
HOW A HAND PLAYS OUT
Everyone is dealt 2 cards face down. The small and big blinds are
posted automatically (the dealer position shifts by one player each
hand). Then come four betting rounds: preflop (before any community
cards), the flop (three community cards), the turn (a fourth), and
the river (a fifth), followed by a showdown if more than one player
remains. On each round you can fold, check (if no bet is
outstanding), call an opponent's bet, bet/raise, or go all-in with
your remaining stack. If you don't have enough to call in full, you
go all-in for what you have, and a separate side pot forms for
players who can still bet further.
WHAT'S DELIBERATELY SIMPLIFIED
Under strict tournament rules, a short all-in raise for LESS than
the full size of the previous raise shouldn't reopen betting for
players who have already acted this round — they should only be
required to call the extra amount or fold, not raise again. This
game doesn't draw that distinction: any raise (including a short
all-in) gives every active player the right to act again, including
raising further. The difference from tournament rules only matters
in rare situations with several short all-ins in a row.
THE BOTS
There's no honest GTO (game-theory-optimal) solver here — instead,
each bot estimates its own hand strength via Monte Carlo simulation
(simulating many random completions of the hand against random
opponent cards) and compares that to the pot odds. The three
difficulty levels — easy, medium, strong — differ in how precisely
the bot estimates that probability and how strictly it weighs pot
odds; the strong level also bluffs occasionally. Which level each
bot gets is decided randomly when the game is created — you can't
choose it.
CONTROLS
On your turn — a numbered list of the actions currently available
(fold, check or call, bet/raise, all-in).
While choosing a bet/raise amount:
←→/hl big step (5 big blinds)
↑↓/kj small step (1 big blind)
enter confirm
esc cancel, back to the action list
After a hand ends:
n/enter next hand
At any time:
q quit to menu
`
func pokerRules() string {
if CurrentLang() == LangEN {
return pokerRulesEN
}
return pokerRulesRU
}