AI Tetris BestMove Comparison
文書番号: SYS-SPEC-2026-003
作成日: 2026年2月22日
ステータス: 承認済 / 第1.2版
本システムは、主要な大規模言語モデル(ChatGPT、Copilot、Gemini)が生成した「BestMove(最適移動位置算出)」関数の性能を、同一環境下で定量的に比較検証するためのシミュレータである。 乱数シードを固定して生成された同一の1000ピースを使用し、3つのゲームフィールド上で各AIモデルのアルゴリズムを並行動作させ、最終的な獲得スコアによる優勝を決定する。
本システムはプラットフォームに依存しないクリーンな構成とし、主にクライアントサイド(ブラウザ環境)で完結するスタンドアロンHTML/JSアプリケーションとして構築する。
※画像タップで拡大表示
| OS | iOS, Android, Windows, macOS, Linux |
|---|---|
| 実行環境 | HTML5 / ES6 JavaScript をサポートするモダンWebブラウザ(Chrome, Safari, Edge, Firefox等) |
| ネットワーク | オフライン動作可能(※CDNリソースを利用する場合は初回ロード時のみインターネット接続が必要) |
将来的なWebアプリケーション化、および機能拡張を見据え、以下のアーキテクチャ統合が可能なモジュール設計とする。
| 対象AIモデル | ChatGPT / Copilot / Gemini |
|---|---|
| 対戦形式 | 画面内に3つのゲームフィールドを並行設置し、同時進行でシミュレーションを実行。 |
| 勝敗条件 | 1000ピース終了時、またはゲームオーバー時点での「最高得点獲得AI」を優勝とする。 |
| ピース供給制約 | ランダム生成(計1000ピース)。シード値を固定し、7種類のピースと初期角度が全AIに対して「完全に同一の順序」で出現するよう制御する。 |
システム内で生成・描画される全7種の標準ブロック定義は以下の通りとする。
ライン消去時の獲得スコアは、標準的なテトリスの計算式に準拠する。 本シミュレーションにおいては、難易度を固定するため【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 (適用) |
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モデル(ChatGPT, Copilot, Gemini)にBestMove関数を生成させるために使用する共通のプロンプト(指示テキスト)を以下に定義する。 条件の差異をなくすため、一言一句違わずに同じプロンプトを入力して出力を得るものとする。
あなたは最強のテトリス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}` を返す。
## あなたのタスク
以下の2つの関数のコードのみを出力してください。解説は不要です。
1. `calculateScore(simBoard, linesCleared, type, x, width)`
- 仮想盤面 `simBoard` と消えたライン数 `linesCleared` を受け取り、その盤面の「良さ」を数値で返す評価関数。
- 穴(空白)を作ると減点、ライン消去は加点、高さが低いと加点、など独自の「最強ロジック」を組み込んでください。
2. `findBestMove(type)`
- 全回転(0-3)・全横位置(0-9)をシミュレーションし、`calculateScore` が最も高くなる `{x, r, y}` オブジェクトを返す関数。
## 制約
- 外部ライブラリは使用禁止。
- 変数 `board` (現在の盤面) はグローバル変数として参照可能。
- 実行速度を考慮し、あまりに重い計算は避けること。
本システムおよび本プロジェクトに関する製品・サービスの概要については、以下のカタログを参照すること。
※画像タップで拡大表示