Skip to content

IvanTopGaming/ITG_CardTable

Repository files navigation

Foolfish

release

Движок и игра в «Дурака» на Rust: сильный ИИ-оппонент, веб-интерфейс для игры в браузере, текстовый протокол движка (как UCI у шахмат) и инструмент разбора партий.

Поддерживаются варианты подкидной (podkidnoy) и переводной (perevodnoy).

Что под капотом

  • ISMCTS (Information Set Monte Carlo Tree Search) — поиск по дереву с детерминизацией скрытой информации (карты соперника и колода неизвестны).
  • Точный решатель эндшпиля — когда колода пуста и карт мало, позиция досчитывается точно, а не оценивается эвристикой.
  • Эвристическая оценка позиций (eval) с учётом длинных мастей и старшинства козырей.
  • Байесовская модель оппонента — движок уточняет распределение карт соперника по его ходам.
  • Параллельный поиск на всех ядрах через rayon — чем мощнее процессор, тем сильнее игра.
  • Эвристики и параметры поиска подбирались автотюнером (эволюционный поиск с чемпион-гейтингом).

Структура воркспейса

Крейт Назначение
foolfish-core Правила игры, состояние стола, генерация ходов, битовые маски карт.
foolfish-search Движок: ISMCTS, решатель эндшпиля, оценка, модель оппонента, арена, тюнер.
foolfish-cli Бинарники: foolfish (движок), serve (веб), play (консоль), analyze (разбор).

Готовые сборки

Бинари под Windows x86_64 и Linux x86_64 собираются автоматически на каждый push в main и лежат в релизах: foolfish-x86_64-pc-windows-msvc.zip и foolfish-x86_64-unknown-linux-gnu.tar.gz. Внутри все четыре программы. Под macOS готовых сборок нет — собирай из исходников (см. ниже).

Сборка

Нужен Rust stable (edition 2021).

cargo build --release
cargo test            # прогнать тесты

Запуск

🎮 Играть в браузере — serve

cargo run --release --bin serve          # http://localhost:8080
cargo run --release --bin serve 9000     # другой порт
HOST=0.0.0.0 cargo run --release --bin serve   # слушать снаружи (см. ниже)

Открой http://localhost:8080. Клик по карте в руке — ход; снизу кнопки «Взять» / «Бито».

  • 📊 — статистика движка (что считал, насколько уверен).
  • 📁 — архив сыгранных партий: реплей по ходам ⏮◀▶⏭ + анализ 📈.
  • «Новая игра» — раздать заново.

Партии пишутся в папку games/ рядом с запуском.

⚠️ По умолчанию serve слушает только 127.0.0.1 (локально). HOST=0.0.0.0 открывает порт наружу — делай это осознанно и только на доверенной машине/сервере: аутентификации у сервера нет.

🧠 Движок напрямую — foolfish

Текстовый протокол в stdin/stdout (аналог UCI). Команды: ffi, position, go, stop, quit.

ffi
position ffen hand:8c,As table:7c- discard:- opp:6 deck:27 trump:Ks me:defend turn:me variant:podkidnoy
go iters 40000

В ответ — строки info move <ход> score <0..1> visits <n> и финальная bestmove <ход>. Позиция задаётся в нотации FFEN (hand: / table: / discard: / opp: / deck: / trump: / me: / turn: / variant:).

⌨️ Игра в консоли — play

cargo run --release --bin play -- <seed> [номера ходов...]

Показывает стол и список ходов с номерами; ходы передаются их номерами.

📈 Разбор партии — analyze

cargo run --release --bin analyze -- <seed> <файл-лога.txt>

Считает потерю % на каждом твоём ходу, помечает неточности и зевки (то же доступно в вебе кнопкой 📈).

Лицензия

MIT

About

Движок «Дурака» на Rust — ISMCTS с детерминизацией + решатель эндшпиля, байес-модель оппонента, параллельный поиск; веб-GUI и CLI

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors