システム仕様書

AI Tetris BestMove Comparison

文書番号: SYS-SPEC-2026-003

作成日: 2026年2月22日

ステータス: 承認済 / 第1.2版

ロゴ

1. システム概要

本システムは、主要な大規模言語モデル(ChatGPT、Copilot、Gemini)が生成した「BestMove(最適移動位置算出)」関数の性能を、同一環境下で定量的に比較検証するためのシミュレータである。 乱数シードを固定して生成された同一の1000ピースを使用し、3つのゲームフィールド上で各AIモデルのアルゴリズムを並行動作させ、最終的な獲得スコアによる優勝を決定する。

2. システム構成および動作環境

2.1 基本アーキテクチャ

本システムはプラットフォームに依存しないクリーンな構成とし、主にクライアントサイド(ブラウザ環境)で完結するスタンドアロンHTML/JSアプリケーションとして構築する。

2.2 動作環境要件(プラットフォームフリー)

Platform Image

※画像タップで拡大表示

OSiOS, Android, Windows, macOS, Linux
実行環境HTML5 / ES6 JavaScript をサポートするモダンWebブラウザ(Chrome, Safari, Edge, Firefox等)
ネットワークオフライン動作可能(※CDNリソースを利用する場合は初回ロード時のみインターネット接続が必要)

2.3 拡張性(フェーズ2以降の想定)

将来的なWebアプリケーション化、および機能拡張を見据え、以下のアーキテクチャ統合が可能なモジュール設計とする。

3. アプリケーション仕様

対象AIモデルChatGPT / Copilot / Gemini
対戦形式画面内に3つのゲームフィールドを並行設置し、同時進行でシミュレーションを実行。
勝敗条件1000ピース終了時、またはゲームオーバー時点での「最高得点獲得AI」を優勝とする。
ピース供給制約ランダム生成(計1000ピース)。シード値を固定し、7種類のピースと初期角度が全AIに対して「完全に同一の順序」で出現するよう制御する。

4. テトリミノ(ピース)定義

システム内で生成・描画される全7種の標準ブロック定義は以下の通りとする。

I-Piece
O-Piece
T-Piece
S-Piece
Z-Piece
J-Piece
L-Piece

5. スコア計算仕様

ライン消去時の獲得スコアは、標準的なテトリスの計算式に準拠する。 本シミュレーションにおいては、難易度を固定するため【LEVEL 5】の設定値を全試行に適用し、これを最終スコアの評価基準とする。

LEVEL Single Double Triple TETRIS
0401003001200
1802006002400
21203009003600
316040012004800
420050015006000
5
(適用)
240 600 1800 7200
628070021008400
732080024009600
8360900270010800
94001000300012000

6. システム構成図

以下の図は、本アプリケーションにおけるシステム全体の構成および処理フローを示したものである。

System Architecture

※画像タップで拡大表示

7. AI関数作成指示書(プロンプト定義)

本検証において、各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` (現在の盤面) はグローバル変数として参照可能。
- 実行速度を考慮し、あまりに重い計算は避けること。

8. 製品カタログ

本システムおよび本プロジェクトに関する製品・サービスの概要については、以下のカタログを参照すること。

製品カタログ

※画像タップで拡大表示

デモを起動 英語版を表示