# 落ちものパズルゲーム 仕様書

ぷよぷよライクな2個1組のストーンを操作して揃えて消す、シンプルな落ちものパズルゲームです。効果音などの外部リソースは使用せず、Web標準技術のみでシンプルに動作する構成とします。

---

## 1. ファイル構成

| ファイル名 | 役割 |
| :--- | :--- |
| `index.html` | 画面骨格（ゲーム画面、スコア・NEXT表示、操作説明などのUI） |
| `style.css` | スタイリング（グリッド盤面、ストーンの色や装飾、レイアウト） |
| `script.js` | ゲームロジック（落下、操作、連結判定、連鎖処理、ゲームオーバー判定） |
| `readme.md` | 本仕様書 |

---

## 2. 盤面・ストーン基本仕様

### 2.1 盤面サイズ
- **横 6マス × 縦 12マス**
  - 最上部（y = 0）にストーンがはみ出た状態で固定された場合にゲームオーバーと判定します。
  - 通常プレイ領域は 1〜11行目（画面表示上は見やすく枠内に収めます）。

### 2.2 ストーンの色数
- **全4色**
  - 赤 (`Red`)
  - 青 (`Blue`)
  - 緑 (`Green`)
  - 黄 (`Yellow`)
- 2個のストーンそれぞれにランダムで色が決定されます。

### 2.3 操作ストーンの構造
- **2個1組（ペア）** で出現。
- 1つを「軸ストーン（Pivot）」、もう1つを「子ストーン」とします。
- 出現時配置:
  - 横中央（x = 2, 3列目付近）。
  - 軸ストーンが下、子ストーンが上の縦並びで出現。

---

## 3. 操作仕様

テンキーまたは数字キー（フルキー）の数値に対応します。

| キー | 動作 | 詳細 |
| :---: | :--- | :--- |
| **`4`** | 左移動 | 盤面左端または既存ブロックに衝突しない場合、左に1マス移動。 |
| **`6`** | 右移動 | 盤面右端または既存ブロックに衝突しない場合、右に1マス移動。 |
| **`5`** | 右回転 | 軸ストーンを中心に、子ストーンを時計回りに90度回転。<br>（上 → 右 → 下 → 左 → 上）<br>※回転先に壁や既存ストーンがある場合は、反対側に押し出す壁補正を行うか回転を無効化。 |
| **`2`** | 高速落下 | 押している間、または押下時に通常より速い速度で落下。 |

※補助として、一般的な操作感も考慮しキーボードの矢印キー（`←`, `→`, `↑`, `↓`）も同様に受け付けるよう実装時に対応可能。

---

## 4. ゲームループ・ルール詳細

### 4.1 落下と接地
1. **通常落下**:
   - 一定間隔（例: 0.8秒ごと）で1マスずつ自動落下。
2. **接地判定**:
   - ストーンの下に床または他のストーンがある場合、落下が止まる。
   - ペアの片方が先に接地した場合でも、もう片方は床や既存ブロックに当たるまで重力で下方向へ落下する（分離落下）。

### 4.2 消去と連鎖判定
1. **連結判定**:
   - 接地・落下がすべて落ち着いた後、盤面全体で**同色が上下左右に3つ以上**つながっている箇所を探索（幅優先探索 / 深さ優先探索）。
2. **消去**:
   - 3つ以上つながったストーンを盤面から消去。
3. **自然落下**:
   - 消去によってできた空白を埋めるため、上にあるストーンがすべて真下に落下。
4. **連鎖ループ**:
   - 落下後に再度同色が3つ以上つながった場合、消去と落下を繰り返す（連鎖）。
   - 新たに消えるストーンがなくなるまで継続。

### 4.3 スコア計算（目安）
消去したストーン数と連鎖数に応じてスコアを加算。
- **計算式例**:
  $$\text{得点} = (\text{消去したストーン数} \times 10) \times 2^{(\text{連鎖数} - 1)}$$
  - 1連鎖（3個消去）: 30点
  - 2連鎖（3個消去）: 60点
  - 3連鎖（3個消去）: 120点

### 4.4 ゲームオーバー条件
- ストーンのペアが接地・固定された時点で、**最上段（y = 0）にストーンが存在している場合**にゲームオーバー。
- ゲームオーバー時は盤面をグレーアウトまたは「GAME OVER」を表示し、リトライボタンまたはキー入力で再開可能とする。

---

## 5. UI・画面構成

1. **メイン盤面（6×12マス）**:
   - CSS Grid を用いて正方形のセルを描画。
2. **サイドパネル**:
   - **NEXT表示**: 次に出現する2個1組のストーンをプレビュー。
   - **SCORE表示**: 現在の得点。
   - **CHAIN表示**: 直前の最大連鎖数。
   - **操作説明**:
     - `4`: 左移動
     - `6`: 右移動
     - `5`: 右回転
     - `2`: 高速落下
   - **リセット / スタートボタン**
