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 очков — первый, кто их наберёт, побеждает. УПРАВЛЕНИЕ В ЭТОЙ ВЕРСИИ В торгах: ↑→/kl или ↓←/hj изменить предлагаемую ставку на ±5 enter назвать текущую ставку p пасовать При сносе и в розыгрыше взяток: ←→/hl выбор карты в руке enter сыграть/отдать выбранную карту (король/дама одной масти при своём первом ходе взятки = объявить марьяж) В любой момент: q выход в меню После завершения раздачи: n новая раздача (если партия ещё не окончена) q выход в меню ` const thousandRulesEN = `1000 (THOUSAND) — rules (strictly 3 players) "Thousand" has a huge number of house rules and variants (barrel, golden hand, reset at ±555, ace marriage, blind play, "writing off" a hand, etc). A basic, most common ruleset is implemented STRICTLY FOR 3 PLAYERS — the 2-player/4-player versions have noticeably different kitty/dealer mechanics and are not implemented. 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). 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 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. CONTROLS IN THIS VERSION During bidding: ↑→/kl or ↓←/hj change the proposed bid by ±5 enter place the current bid p pass 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) 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 меньше по рангу и противоположного цвета масти (чёрная на красную или наоборот). В пустую колонну можно положить только короля. - На фундамент можно положить только следующую по рангу карту той же масти, начиная с туза. - Можно перекладывать между колоннами целиком собранную (по убыванию, с чередованием цвета) последовательность карт — не только одну карту сверху. "Разрезать" такую цепочку и взять только часть нельзя. - Когда карта под перемещённой цепочкой открывается — она автоматически переворачивается лицом вверх. - Из колоды добора карты берутся по одной в отбой; когда колода добора заканчивается — весь отбой переворачивается обратно в колоду для новой пересдачи (без ограничения числа пересдач). - Возврат карт с фундамента обратно в игру не реализован. УПРАВЛЕНИЕ В ЭТОЙ ВЕРСИИ Ход состоит из двух шагов: сначала выбор источника, потом — куда переложить. 1-7 выбрать колонну (или переложить выбранное в неё) 0 выбрать отбой (только как источник) 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 a properly built (descending, alternating color) sequence of cards between columns as a whole — not just the top card. You cannot "cut" such a run and take only part of it. - 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) 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 выход в меню После завершения раунда: 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. 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 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 секунд до нескольких минут); по завершении можно забрать награду. УПРАВЛЕНИЕ 1-9 выбрать пронумерованное действие (список меняется по мере открытия новых разделов — номера могут "переезжать") 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. CONTROLS 1-9 choose a numbered action (the list grows as you unlock more sections — numbers may shift around) 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 видов товаров, включая два незаконных (контрабанда, оружие) — их проверяют патрули в системах со строгим правительством. Цена зависит от типа экономики системы: аграрные дешевле продают продовольствие, промышленные — технику, и так далее. Пока товар лежит в трюме, рынок показывает среднюю цену, по которой он был куплен, — удобно сравнить с текущей ценой перед продажей. ПЕРЕЛЁТЫ И ОПАСНЫЕ ВСТРЕЧИ Прыжок в пределах галактики тратит топливо пропорционально расстоянию. Чем опаснее правительство системы назначения, тем выше шанс случайной встречи: пиратская засада (пошаговый бой), досмотр патруля (незаконный груз могут конфисковать), сигнал бедствия (обычно — честная награда за помощь, изредка — ловушка) или обломки корабля (случайная находка). Межгалактический прыжок в следующую галактику требует почти полного бака и переносит в случайную систему. ПОШАГОВЫЙ БОЙ Каждый раунд — один выбор: атаковать, попытаться сбежать или (если противник вообще готов договариваться) попытаться откупиться переговорами. Щит поглощает урон первым, затем корпус. Без спасательной капсулы гибель корабля необратимо заканчивает карьеру. КВЕСТЫ 8 полноценных сюжетных линий с ветвлениями и разными исходами — от эвакуации колонистов перед вспышкой сверхновой до находки артефакта предтеч. Задания не выбираются свободно из списка — они сами предлагаются со случайной вероятностью при спокойном прибытии в систему (если сейчас нет активного задания и остались невыполненные). Можно согласиться или отказаться; отказ ничем не грозит — то же (или другое) задание может предложиться снова позже. Одновременно активно только одно задание; выбор в его ходе влияет на награду, здоровье корабля и иногда — на груз. СНАРЯЖЕНИЕ И РЕМОНТ На верфи можно дозаправиться, починить корпус и один раз приобрести каждый апгрейд: топливный скиммер, расширение трюма, усиление щита, спасательную капсулу, улучшенный лазер. УПРАВЛЕНИЕ На станции (хаб): 1 рынок 2 верфь 3 перелёт 4 квесты q сохранить карьеру и выйти в меню Рынок/верфь/перелёт/квесты: ↑↓ / kj выбор пункта b / s купить/продать 1 единицу (на рынке) B / S купить максимум / продать всё (на рынке) enter подтвердить выбор q/esc назад в хаб В бою: 1 атаковать 2 бежать 3 договориться (если доступно) ` 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. 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 to the next galaxy needs a nearly full tank and drops you into a random system. TURN-BASED COMBAT Each round is one choice: attack, try to flee, or (if the opponent is willing to talk at all) try to negotiate your way out. Shields absorb damage first, then the hull. 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. EQUIPMENT AND REPAIRS At the shipyard you can refuel, repair the hull, 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 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 In combat: 1 attack 2 flee 3 negotiate (if available) ` func wayfarerRules() string { if CurrentLang() == LangEN { return wayfarerRulesEN } return wayfarerRulesRU }