本プロジェクトは、異なるAI(Large Language Models)によって生成されたテトリス思考ロジックを戦わせ、最高得点を競うプラットフォームです。 各AIに同一の条件で思考アルゴリズムを記述させ、どのAIが最も効率的に得点を稼ぎ、長く生存できるかを検証します。
本システムは以下の7種類のピースを使用します。これらは90度単位の回転を持ち、ゲーム開始時に1000ピースのランダムなキュー(2次元配列)として生成されます。
本プロジェクトでは、以下の計算式に基づき Level 5 の設定を標準採用します。
| LEVEL | Single | Double | Triple | TETRIS |
|---|---|---|---|---|
| 0 | 40 | 100 | 300 | 1200 |
| 1 | 80 | 200 | 600 | 2400 |
| 2 | 120 | 300 | 900 | 3600 |
| 3 | 160 | 400 | 1200 | 4800 |
| 4 | 200 | 500 | 1500 | 6000 |
| 5 (Adopted) | 240 | 600 | 1800 | 7200 |
| 6 | 280 | 700 | 2100 | 8400 |
| 7 | 320 | 800 | 2400 | 9600 |
| 8 | 360 | 900 | 2700 | 10800 |
| 9 | 400 | 1000 | 3000 | 12000 |
各AIに対し、以下の内容を共通の指示として入力します:
あなたは最強のテトリスAIプログラマーです。 以下の仕様で動作する、ブラウザゲーム用のJavaScript関数 findBestMove(type) と calculateScore(...) を作成してください。
■ゲーム仕様
- 盤面: 横10 x 縦20 (変数名: COLS=10, ROWS=20)
- 配列: board[y][x] (0=空, 1以上=ブロックあり)
- 落下ブロック: 引数 type (1~7の整数) で渡される。
- 回転: 0~3 (90度刻み)
■目的
- ゲームオーバーにならず、できるだけ長く生存し、ハイスコア(4列消し等)を狙うこと。
■提供される既存関数
- getTransformedBlocks(type, r): 回転 r の時のブロック座標配列 {x, y} を返す。
■タスク
1. calculateScore(simBoard, linesCleared, type, x, width)
- 仮想盤面 simBoard と消えたライン数 linesCleared を受け取り、その盤面の「良さ」を数値で返す評価関数。
- 穴(空白)を作ると減点、ライン消去は加点、高さが低いと加点、など独自の「最強ロジック」を組み込んでください。
2. findBestMove(type)
- 全回転(0-3)・全横位置(0-9)をシミュレーションし、calculateScore が最も高くなる {x, r, y} オブジェクトを返す関数。
■制約
- 外部ライブラリは使用禁止。
- 変数 board (現在の盤面) はグローバル変数として参照可能。
- 実行速度を考慮し、あまりに重い計算は避けること。
本プロジェクトの最強ロジック(Gemini最強のテトリスAI評価ロジック Ultimate Heuristic)は、盤面の各配置候補を多角的な指標でスコアリングし、最も期待値の高い一手を決定します。 単なるライン消去ではなく、「将来の自由度」を最大化し、「致命的なリスク(穴)」を最小化する以下の5つの評価軸を動的に組み合わせています。
テトリスにおいて、ブロックの下に空洞(穴)ができることは致命的です。このアルゴリズムは穴の発生に対し、他の加点をすべて打ち消すほど強力な「重い減点(ペナルティ)」を課します。 穴を1つ作るくらいなら、盤面を数段高く積み上げるリスクを取る方が長期的には有利であると判断します。
隣り合う列の高さの差(Bumpiness)を最小限に抑えます。盤面が平坦であればあるほど、次にどのような形状のピース(特にS/Z型やO型)が来ても、 穴を作らずに配置できる確率が高まるためです。
盤面全体の高さを低く保つことで、不測の事態(I型ピースが長時間来ないなど)への許容範囲を広げます。 ただし、単に低くするだけでなく、後述する「井戸」の形成とのバランスを考慮します。
Level 5の特典ルール(TETRIS 7200点)を最大限に活かすため、右端の1列を常に空ける「井戸(Well)」を形成しようとします。 井戸の深さが3〜4段に達した際、I型ピースが投入されると同時にテトリスを発動させ、スコアを飛躍的に伸ばします。
盤面が安全な高さ(15段以下など)にある場合、1〜3列の小規模なライン消去をあえて控え、テトリスを狙える状況を維持します。 逆に、盤面が危険な高さに達した場合は、即座に生存モードへ切り替わり、どんな形でもラインを消して盤面を下げることを優先します。