本記事では、Web Tetris DX に実装されている 思考型AI が
「どのように盤面を見て、どの手を選んでいるのか」を
実装者視点で解説します。
① 全探索(シミュレーション)
AIは新しいミノが出現した瞬間、現在の盤面に対して 「可能なすべての置き方」をシミュレーションします。
-
移動と回転の全パターン
左右の移動(0〜9列)と、4つの回転状態(0°, 90°, 180°, 270°)をすべて試します。 -
SRS(壁蹴り)の考慮
壁際で回転した際のズレ(キック)も含め、実際に着地可能な形だけを評価対象にします。 -
ホールドの活用
「今のミノを置く場合」と「ホールドして入れ替える場合」の両方を試し、 スコアが高い方を選択します。
② 評価関数(盤面の採点)
シミュレーションした結果の盤面を、 「どれだけ有利か」という基準で点数化します。
| 評価項目 | 内容 | AIの判断 |
|---|---|---|
| 高さ(Sum Height) | 積み上がったブロックの合計高さ | 低いほど高得点 |
| 穴の数(Holes) | 下にブロックがある空洞の数 | 最優先で回避(1つでも大幅減点) |
| 凹凸(Bumpiness) | 隣り合う列の高さの差 | 平らなほど高得点 |
| 右端の確保 | 9列目を空けておく | テトリス狙いとして加点 |
穴の評価は特に重く設定しています。
「高さが低くても穴が多い盤面」は、将来的に詰む可能性が高いためです。
「高さが低くても穴が多い盤面」は、将来的に詰む可能性が高いためです。
③ 生存本能(状況判断の切り替え)
このAIの最大の特徴は、 盤面の高さによって思考方針が切り替わる点です。
通常モード(高さが低いとき)
- 4列消し(テトリス)以外は基本的に狙わない
- 1列だけ消える置き方にはマイナス評価
- 右端を空け、綺麗な形を維持する
生存モード(高さが16段を超えたとき)
- とにかくラインを消すことを最優先
- 1列消し・穴埋めも許容
- 目的は「盤面を下げて延命すること」
「美しさ」よりも「生き残ること」を選ぶ瞬間がある。
それがこのAIの“本能”です。
それがこのAIの“本能”です。
④ 実行プロセス
評価結果をもとに、AIは次の手を決定します。
-
思考:
getBestMove()が最適な x 座標と回転数を算出 - 操作:回転 → 横移動 → ハードドロップの順で実行
- NEXT先読み:次のミノが置きにくくなる手を避ける
このAIを実装した Web Tetris DX は、実際にブラウザで遊べます。
Web Tetris DX を遊ぶ