| .gitignore | ||
| bankruptcy_test.go | ||
| banner.go | ||
| blackjack_bot.go | ||
| blackjack_game.go | ||
| blackjack_game_test.go | ||
| blackjack_tui.go | ||
| blackjack_tui_test.go | ||
| bot.go | ||
| bot_heuristics.go | ||
| bot_naming_test.go | ||
| card.go | ||
| checkers_bot.go | ||
| checkers_bot_test.go | ||
| checkers_game.go | ||
| checkers_game_test.go | ||
| checkers_tui.go | ||
| checkers_tui_test.go | ||
| deck.go | ||
| durak_bot.go | ||
| durak_bot_test.go | ||
| durak_deck.go | ||
| durak_game.go | ||
| durak_game_test.go | ||
| durak_tui.go | ||
| durak_tui_test.go | ||
| game.go | ||
| game_test.go | ||
| go.mod | ||
| go.sum | ||
| klondike_bot_test.go | ||
| klondike_game.go | ||
| klondike_game_test.go | ||
| klondike_tui.go | ||
| klondike_tui_test.go | ||
| LICENSE | ||
| main.go | ||
| meld.go | ||
| meld_test.go | ||
| menu.go | ||
| menu_test.go | ||
| oneohone_bot.go | ||
| oneohone_bot_test.go | ||
| oneohone_game.go | ||
| oneohone_game_test.go | ||
| oneohone_tui.go | ||
| oneohone_tui_test.go | ||
| player.go | ||
| README.md | ||
| rules.go | ||
| thousand_bot.go | ||
| thousand_bot_test.go | ||
| thousand_game.go | ||
| thousand_game_test.go | ||
| thousand_tui.go | ||
| thousand_tui_test.go | ||
| tui.go | ||
| tui_test.go | ||
Go Games Collection
Коллекция консольных карточных игр и настольных игр на Go с текстовым интерфейсом (TUI) на Bubble Tea. Играете против ботов (кроме пасьянса — он на одного) прямо в терминале.
____ ___ ____ _ __ __ _____ ____
/ ___|/ _ \ / ___| / \ | \/ | ____/ ___|
| | _| | | | | | _ / _ \ | |\/| | _| \___ \
| |_| | |_| | | |_| |/ ___ \| | | | |___ ___) |
\____|\___/ \____/_/ \_\_| |_|_____|____/
____ ___ _ _ _____ ____ _____ ___ ___ _ _
/ ___/ _ \| | | | | ____/ ___|_ _|_ _/ _ \| \ | |
| | | | | | | | | | _|| | | | | | | | | \| |
| |__| |_| | |___| |___| |__| |___ | | | | |_| | |\ |
\____\___/|_____|_____|_____\____| |_| |___\___/|_| \_|
Игры в коллекции
| Игра | Игроков | Особенности |
|---|---|---|
| Тонк (Tonk) | 1 человек + 3 бота | Денежная система: капитал, ставка, банкротство и замена бота |
| Дурак (Durak) | 2–6 | Полноценное подкидывание любым игроком (не только атакующим) |
| Блэкджек (Blackjack) | 1–6 (можно соло) | Каждый играет против дилера отдельно, hit/stand/double |
| 101 | 2–6 | Избавься от карт первым; выбывание по достижении 101 очка |
| 1000 (Тысяча) | строго 3 | Торги, прикуп, взятки и марьяжи с динамическим козырем |
| Косынка (Klondike) | 1 (без ботов) | Классический пасьянс с отменой хода |
| Шашки (Checkers) | 1 человек + бот | Русские шашки, бот на минимаксе с 2 уровнями сложности |
Каждая игра — со своим набором специально подобранных упрощений там, где у оригинала слишком много вариантов правил (например, «1000» реализована только на троих, а Дурак — без «тузового марьяжа» и бочки). Полный список правил и упрощений — в разделе «Правила» самого приложения или через --help.
Запуск
Требуется Go 1.22+.
go run . # открыть меню коллекции
go run . --help # показать правила всех игр, не заходя в TUI
go run . -sim # headless-симуляция ботов Тонка (для проверки баланса)
go run . -sim-durak # то же для Дурака
go run . -sim-blackjack # то же для Блэкджека
go run . -sim-101 # то же для 101
go run . -sim-1000 # то же для Тысячи
Или собрать бинарник:
go build -o games .
./games
Общее управление в меню
↑↓/k j— навигация по пунктам менюenter— выбрать / подтвердитьesc/q— назад- Внутри игры
qвсегда возвращает в меню (не закрывает программу);ctrl+cзакрывает приложение целиком
У части игр перед стартом есть экран настроек: ставка и капитал (Тонк), число игроков (Дурак, 101), число игроков + ставка (Блэкджек), уровень сложности бота (Шашки).
Управление в конкретной игре не дублируется здесь — оно всегда показано внизу экрана самой игры, а также доступно целиком через пункт «Правила» в меню или --help.
Структура проекта
Каждая игра — самостоятельный набор из 3 файлов (движок / бот / TUI) плюс тесты; общая для всех инфраструктура (меню, карты, колода) вынесена отдельно.
card.go, deck.go — общие типы карт и стандартная колода на 52 карты
menu.go, banner.go — главное меню, ASCII-баннер, экраны настроек игр
rules.go — тексты правил всех игр (для TUI и --help)
main.go — точка входа, флаги -sim-*, --help
game.go, bot.go, — Тонк: движок, боты трёх уровней сложности,
bot_heuristics.go, банкротство и замена бота, TUI
tui.go, player.go,
meld.go
durak_*.go — Дурак: движок с полным подкидыванием, бот, TUI
blackjack_*.go — Блэкджек: движок дилера, бот, TUI
oneohone_*.go — 101: движок, бот, TUI
thousand_*.go — 1000: движок торгов/взяток/марьяжей, бот, TUI
klondike_*.go — Косынка: движок пасьянса с отменой хода, TUI
(ботов нет — играть некому, кроме человека)
checkers_*.go — Шашки: движок русских шашек, бот на минимаксе, TUI
*_test.go — тесты (юнит-тесты правил + стресс-симуляции
полных партий ботами)
Тестирование
go test ./... # весь пакет
go test ./... -v # подробный вывод по каждому тесту
В пакете 215 тестов: юнит-тесты игровой логики (раздача, ходы, подсчёт очков, крайние случаи вроде взятия дамкой или марьяжа на первой взятке) и отдельные стресс-тесты, прогоняющие сотни-тысячи симулированных партий ботами подряд — они специально написаны, чтобы ловить редкие зависания, потерю/дублирование карт и прочие тонкие баги, которые не всегда видны в единичном ручном тесте.
Известные упрощения
У традиционных карточных игр обычно много региональных вариантов правил. Там, где выбор был сделан осознанно (а не по ошибке), это явно прокомментировано в соответствующем *_game.go и продублировано в тексте правил игры. Коротко:
- Дурак — полные правила (подкидывать может любой игрок, не только атакующий).
- 101 — туз пропускает ход, 6/7/пиковый король дают штрафные карты; десятка не меняет направление хода.
- 1000 — только на 3 игроков; нет бочки, золотого кона, самосвала, тузового марьяжа и игры втёмную.
- Косынка — добор по одной карте, неограниченные пересдачи; возврата карт с фундамента в игру нет.
- Шашки — русские правила (взятие в любом направлении простой шашкой, «летающая» дамка), без официальных 15/30-ходовых правил ничьей — вместо них простой лимит в 60 полуходов без взятий.