作ったもの
Gomoku AI — https://sen.ltd/portfolio/gomoku-ai/
- 15×15 標準盤(Canvas 描画)
- Minimax + alpha-beta 枝刈り
- 3 段階の難易度(深さ 1 / 2 / 4)
- パターンベースの評価関数
- 既存石から半径 2 内に探索を限定
- 即詰みブロック・即勝ち取得
- Undo、履歴、最終手ハイライト
vanilla JS、ゼロ依存、ビルド不要。node --test で 42 ケース。
パターン評価関数
if (count >= 5) return 1_000_000; // 五連
if (count === 4 && openEnds === 2) return 50_000; // オープン四 (必勝)
if (count === 4 && openEnds === 1) return 1_000; // クローズ四
if (count === 3 && openEnds === 2) return 1_000; // オープン三
if (count === 3 && openEnds === 1) return 100;
// ...
盤全体のスコア = own - opponent * 1.1。わずかに防御寄りにすることで、自分の攻めに夢中になって詰まされるミスを防ぐ。
探索範囲の制限
深さ 4 × 225 マスはナイーブには 25 億局面。既存石の半径 2 内だけを候補にすることで、候補手を 20〜40 手まで絞る:
for (const [r, c] of empty) {
if (存在する石から半径 2 以内) nearby.add([r, c]);
}
alpha-beta と組み合わせて、深さ 4 が数百ミリ秒で終わるようになる。
最終手からの勝ち判定
盤全体を走査する必要はない。最後に置かれた石から 4 方向(横・縦・斜め 2 つ)へ連続同色の石を数えるだけ。O(1)(定数 5 まで)。
シリーズ
100+ 公開ポートフォリオ シリーズの #56 です。
- 📦 リポジトリ: https://github.com/sen-ltd/gomoku-ai
- 🌐 デモ: https://sen.ltd/portfolio/gomoku-ai/
- 🏢 会社: https://sen.ltd/
