ブラウザで index.html を開くだけで起動し、自機の左右移動と射撃、敵隊列の
左右往復と下降、敵の射撃、防壁の侵食、UFO の出現、スコア・ライフ・レベル・
ハイスコア、ポーズ、ゲームオーバーとクリアがすべて動作する Space Invaders が
~/omp/invaders/index.html 単体で完成している。ヘッドレスブラウザで起動検証し、
pageerror なし、Canvas に描画があること、キー入力で自機が動くことを確認する。
README に操作方法と起動手順を記載する。
- 単一自己完結 HTML(インライン CSS/JS、外部依存ゼロ)。file:// でダブルクリック 即プレイ可能。ES modules は使わない(file:// で CORS 失敗するため)。
- コードは IIFE + 名前空間オブジェクトで構造化。実装ファイル数と workflowz の 並列性は独立で、設計レビュー・動作検証・コードレビューを並列エージェントで担保する。
- 検証には実在する browser ツール(組み込みヘッドレス Chromium)と zai-mcp-server
の画像分析を使う。
canvas-game-verifyは不存在のため使わない。
game-development(親: 固定タイムステップ、入力抽象、衝突戦略)game-development/web-games(Raw Canvas 選定、Audio はユーザー操作後に resume、 タブ非表示でポーズ、プール音源)game-development/2d-games(8-24FPS スプライトアニメ、Box 衝突、 固定タイムステップ、画面シェイク 50-200ms)game-development/game-design(コアループ、難易度バランス)game-development/game-art(ピクセルアート 1x 作業・スケールアップ)game-development/game-audio(カテゴリ別ミックス、ユーザージェスチャー要件)clear-japanese(コメント・UI 文言・README)
- Canvas 800x600、左上原点、y 下向き正。背景黒。
- 自機ライン y=560(GROUND_Y)。敵隊列は上段から配置。
- 左右: ArrowLeft/Right または A/D
- 射撃: Space(エッジ検出、押しっぱなし不可)
- ポーズ: P / Esc
- ミュート: M
- 開始・リスタート: Enter
- 左右移動 speed=320 px/s、画面端で停止。
- 射撃クールダウン 0.35s。自機弾は同時に最大1発。
- ライフ3。被弾で1.2s 無敵+点滅リスポーン。ライフ0でゲームオーバー。
- 5行x11列。上段(0行)30pt、1-2行20pt、3-4行10pt。
- 左右往復、端で反転+1段下降。歩進間隔は残敵数で短縮 (55体時0.65s → 1体時0.08s)。
- 歩進ごとに2フレームアニメ切替+歩進音(音高4段階)。
- 生存敵の最下段からランダム射撃。敵弾同時最大3発。
- いずれかの敵が GROUND_Y に達したらゲームオーバー。
- 18-35s 間隔でランダム出現。画面端から横切る。
- 得点は [50,100,150,300] からランダム。持続音あり。
- 4個、y=440。ブロック格子(blockSize=4)。
- 弾が命中したブロックと周囲1ブロックを侵食(削除)。
- AABB 矩形衝突。自機弾は敵/UFO/防壁。敵弾は自機/防壁。
- 衝突で弾消滅。敵命中でスコア加算+爆発エフェクト+音。
- 状態: MENU / PLAYING / PAUSED / GAMEOVER / WIN。
- 全敵撃破でレベル+1、敵再配置・歩進間隔短縮・敵弾最大+1(上限5)。
- ハイスコアは localStorage に保存。
- タブ非表示で自動ポーズ。
- ドット絵はビットマップ配列(0/1)を定義し、ctx.fillRect で拡大描画。
- 敵・自機・UFO はスプライト関数。爆発は放射状パーティクル。
- HUD: スコア・ハイスコア・ライフ(アイコン)・レベル。
- オーバーレイ: メニュー/ポーズ/ゲームオーバー/クリアのメッセージ。
- AudioContext は最初のユーザー操作後に作成・resume。
- 射撃(矩形波短)、敵射撃(ノイズ短)、爆発(ノイズ減衰)、 歩進(4段階の矩形波)、UFO持続音(揺れる矩形波)、被弾(下降 sweep)、 勝利(上昇アルペジオ)、敗北(下降ノイズ)。
- ミュート切替可。
python3 -m http.server 8099 --directory ~/omp/invadersで提供。- browser ツールで
http://localhost:8099/を開く。 - pageerror / console.error がないことを確認。
- Canvas のピクセルを取得し、完全黒でない(描画されている)ことを確認。
- スクリーンショットで inspect_image/zai で描画内容を確認。
- 合成 KeyboardEvent で自機移動・発火を確認。
- README に操作方法と起動手順を記載。
- フェーズ1(私): 仕様定義・LEDGER 作成。
- フェーズ2(私): index.html 単体実装。
- フェーズ3(並列サブエージェント): 動作検証(browser) / コードレビュー(バグ) / UX・仕様レビュー を同時ファンアウト。各エージェントは証拠を返す。
- フェーズ4(私): 返却された指摘を検証し修正。
- フェーズ5(私): README 作成・最終ヘッドレス検証・完了宣言。
- 単一HTML採用: file:// 即プレイ・検証単純化・配布容易。実装は1コンテキストで 持てる規模なので分割統合のリスクを避ける。
- フレームワーク不採用: インベーダー規模では Raw Canvas が依存最少。
- 外部アセット不使用: ドット絵はビットマップ配列内製、音は Web Audio 合成。 1ファイルで完結しオフラインで動く。