Galactic Shooter 仕様書
## 1. 概要
**Galactic Shooter**は、タッチ操作でプレイヤーを移動し、敵やボスを倒してスコアを稼ぐ縦スクロール型シューティングゲームです。
ゲームはモバイルデバイスでのプレイを想定しており、プレイヤーはタッチ操作で宇宙船をコントロールします。
---
## 2. 技術スタック
- **HTML5**:構造の定義
- **CSS3**:レイアウトとビジュアルスタイルの設定
- **JavaScript (Vanilla)**:ゲームロジックとインタラクションの実装
- **Canvas API**:ゲーム描画のために使用
---
## 3. 機能要件
- プレイヤーはタッチ操作で宇宙船を自由に動かせる。
- 一定間隔で自動的に弾が発射される。
- 敵が一定時間ごとに生成され、プレイヤーの攻撃で倒せる。
- スコアが一定に達するとボスが登場し、HPを削り切ると倒すことができる。
- ハイスコアをローカルストレージに保存・表示する。
- 敵またはボスが画面下に到達した場合はゲームオーバーとなる。
---
## 4. 非機能要件
- モバイルデバイスでのタッチ操作に最適化。
- シンプルなデザインと軽量なコードにより、パフォーマンスを維持。
- ローカルストレージにより、ブラウザを閉じてもハイスコアが保持される。
---
## 5. アーキテクチャ設計
ゲームは以下の要素で構成されています:
1. **プレイヤー**:画面下部に位置し、タッチ操作で自由に動く。
2. **弾**:プレイヤーから一定間隔で発射される。
3. **敵**:画面上部から定期的に出現して下に移動。弾が当たると消滅し、スコアが加算される。
4. **ボス**:一定スコアごとに出現し、複数のHPを持つ。
5. **UI**:スコアとハイスコアを画面左上に表示。
---
## 6. クラス・関数仕様
### 6.1 `checkCollision(rect1, rect2)`
**目的**:2つの矩形(プレイヤーや弾、敵など)の衝突判定を行う。
**引数**:
- `rect1`, `rect2`:衝突を判定する矩形オブジェクト(`x`, `y`, `width`, `height` を持つ)。
**戻り値**:`true`(衝突時)、`false`(非衝突時)。
---
### 6.2 `spawnBoss()`
**目的**:ボスを生成する。
**挙動**:
- 画面上部中央にボスを配置。
- ボスHPは、初期値10にスコアに応じた補正値が加わる。
---
### 6.3 `update()`
**目的**:ゲーム内の全要素(プレイヤー、弾、敵、ボス)の状態を1フレームごとに更新・描画する。
**主要処理**:
1. キャンバスのクリア
2. プレイヤーの描画
3. 弾の移動・描画・敵・ボスへのヒット判定
4. 敵の生成、移動、当たり判定
5. ボスの挙動とHP管理
6. スコア表示の更新
7. ゲームオーバー判定
---
### 6.4 `gameOver()`
**目的**:ゲームオーバー時に呼び出される処理。
**挙動**:
1. ゲームの進行を停止。
2. ハイスコアを更新(必要時)。
3. アラートでスコアを表示し、ページをリロード。
---
## 7. データフロー
```plaintext
ユーザータッチ入力
↓
プレイヤー位置更新
↓
弾の発射(定期)
↓
敵の生成(定期)
↓
弾と敵・ボスの衝突判定
↓
敵・ボスの削除およびスコア加算
↓
スコア表示とハイスコア更新
↓
ゲームオーバー判定