# Bao la Kiswahili
Bao la Kiswahili は、ローカル 2 人対戦とコンピューター対戦に対応した、Bao の静的ブラウザー実装です。通常の静的ファイルだけで動作し、ビルド手順は不要です。ゲームロジックはすべてブラウザー内で実行されます。
コンピューターには 4 つのレベルがあります。
| レベル | 方式 |
| --- | --- |
| やさしい | 合法手からランダムに選択 |
| ふつう | 1 手読みで評価上位の手からランダムに選択 |
| むずかしい | ミニマックス法とアルファベータ枝刈りによる反復深化探索 |
| ムタアラム | デバイス性能に応じて調整した、より長い探索時間 |
コンピューターの手はすべて、人間の対局と同じルールエンジンで生成・検証されます。
## 機能
- `public/` 以下に配置された静的ブラウザーゲーム
- ローカル 2 人対戦モード
- コンピューター対戦時の South/North 選択
- namua、mtaji、連続種まき、nyumba、捕獲、勝敗判定に対応した Bao ルールエンジン
- 長めの思考中でも UI の応答性を保つ、Web Worker ベースの AI 探索
- オフライン対応デプロイのための PWA ファイル
- ルール、AI、探索、Worker、チューニング、ベンチマークツール向けの Node.js テストスイート
- シード、ペア開局、戦術回帰テスト、保存済み成果物による再現可能な AI ベンチマーク
- 外部送信なしで局面JSONをファイル保存し、直前のAI着手を端末内に記録する診断機能
- 「むずかしい」「ムタアラム」の直前探索統計と、Phase 10A向け保存推奨判定
## ルールの基準
この実装は、`bao-la-kiswahili-ja` の公開ドラフト `v0.1.0-draft` におけるルール基準 `R-002` を実装上の基準としています。捕獲義務、namua、mtaji、連続種まき、nyumba、勝敗判定を実装しています。
検証に使える完全な出典局面がまだ確認できていないため、`takasia` は適用していません。終わらない対局を防ぐため、連続種まきには安全上の上限を設けています。
固定参照コミット、実装範囲、既知の差異、ルール更新時の同期手順は `doc/RULES_BASELINE.md` に記録しています。
## ローカルでの実行
任意の静的 HTTP サーバーで `public/` ディレクトリを配信し、`index.html` を開きます。
例:
```sh
cd public
python3 -m http.server 8000
```
続いて、以下を開きます。
```text
localhost
```
`file://` 経由で `public/index.html` を開いても大半のゲームプレイは動作しますが、Service Worker 機能には HTTP(S) が必要です。
## デプロイ
Cloudflare Pages などの静的ホスティングでは、公開ディレクトリを以下に設定します。
```text
public/
```
Privacy Policy へのリンクとPWAのオフラインキャッシュは、Cloudflare Pages の clean URL に合わせて `./privacy` を使用します。リダイレクト済みの `privacy.html` レスポンスはキャッシュしません。
## テスト
個別のテストを実行します。
```sh
node test/engine.test.js
```
テストスイート全体を実行します。
```sh
for f in test/*.test.js; do node "$f" || exit 1; done
```
## AI ベンチマーク
再現可能な固定深さベンチマークを実行します。
```sh
node tools/benchmark.js --games 100 --seed 20260706 \
--first hard --second normal --time-limit 0 --max-depth 2
```
戦術回帰テストを実行します。
```sh
node test/tactical.test.js
```
戦術テストの診断出力:
```sh
BAO_TACTICAL_DIAG=1 node test/tactical.test.js
```
ゲーム画面の「AI改善用診断」では、次のJSONファイルを端末へ保存できます。
- …