Skip to content

Latest commit

 

History

History
69 lines (55 loc) · 5.9 KB

File metadata and controls

69 lines (55 loc) · 5.9 KB

AGENTS.md - 開発・設計ガイド

このドキュメントは、AIエージェントおよび開発者がプロジェクトの構造と設計思想を迅速に把握するためのガイドです。

プロジェクト概要

Flutterによる高性能な横スクロールシューティングゲーム。リッチな描画(CustomPainter)と、拡張性の高いクリーンなアーキテクチャ(ロジックとUIの完全分離)を特徴としています。

ディレクトリ構成(lib以下)

各モジュールは責務に基づいて明確に分離されています。

  • main.dart
    • アプリ全体のエントリポイント。Rootウィジェットでの状態管理、Tickerによるフレーム更新の呼び出し、最上位のレイアウト(Stack)を管理。
  • game_engine.dart
    • ゲームの頭脳。 Mixin(WeaponSystem, CollisionSystem)を組み合わせて、進行・移動・射撃・判定の全ロジックを一括統括します。
    • 背景のスクロール停止(ボス戦等)を管理。
  • game_painter.dart
    • 描画エンジン。 CustomPainterを用い、全エンティティのレンダリングを統括。
    • プログラマブルな描画ロジックは painters/ 内の各モジュールに分散されており、このファイルはそれらを集約して描画順序を管理します。
  • constants.dart
    • 色、初期値、最大レベル(30など)、UIパーツのサイズなど、ゲーム全体で共有される定数の定義。

📁 engine/ (ロジックの断片)

  • collision_system.dart: 当たり判定(自機・弾・敵・アイテム)の計算を抽出したMixin。
    • グリッドベースの空間分割(Spatial Partitioning)による最適化を実装済み。
  • weapon_system.dart: メイン/サブ武器の発射ロジック、拡散計算、誘導ミサイルのスケジュール等を担当する Mixin。
  • level_manager.dart: スコア、パワーアップ、レベルアップ等のプレイヤーの状態管理を担当する Mixin。
  • entity_manager.dart: 全エンティティ(弾、敵、アイテム等)のリスト管理と一括更新を担当。
    • エンティティ種別ごとのサブメソッド(_updateBullets, _updateObstacles 等)に分割して管理。
  • gamepad_manager.dart / keyboard_manager.dart: 物理デバイスからの入力を正規化し、エンジンへ伝える入力抽象化層。
  • high_score_manager.dart: ハイスコアの永続化と読み込みを担当。

📁 models/ (データ構造)

  • enums.dart: PowerUpType, BulletType など、種別を表す定義。
  • bullet.dart, items.dart: それぞれのエンティティのクラス定義。
  • enemy/: 敵キャラクターの定義。
    • enemy_base.dart: 基底クラス。描画(draw)と基本移動(update)を保持。
    • enemy_variants.dart 等: 個別の特殊な敵ロジック。
  • enemy_factory.dart: Waveやレア度に基づき、適切な敵インスタンスを生成する工場クラス。

📁 widgets/ (UIコンポーネント)

  • game_hud.dart, game_over_overlay.dart, pause_overlay.dart: UIパーツを独立したウィジェットとしてカプセル化。
  • title_screen.dart: ゲーム開始前のメインメニュー。

主要な設計方針

  1. クリーン・アーキテクチャ(ロジックとUIの分離)
    • エンジン(GameEngine)はFlutterのUI(BuildContext等)に依存せず、純粋な数学的計算に専念します。
    • 描画(GamePainter)もエンジンから渡されたデータを受け取って描画するだけで、状態の変更は行いません。
  2. Mixinによる拡張性の確保
    • 射撃や衝突判定などの巨大なロジックをMixinへ逃がすことで、GameEngine本体の肥大化を防ぎ、機能ごとのメンテナンスを可能にしています。
  3. モデルのBarrelエクスポート
    • lib/models.dart が各個別モデルをリ・エクスポートすることで、外部ファイルはインポート1行で全モデルが扱えるよう利便性を確保しています。

拡張のヒント(AIへの指示)

  • 新しい敵を作りたい: models/enemy/ 内に定義を追加し、models/enemy_factory.dart で生成条件を設定してください。
  • 新しい武器を作りたい: engine/weapon_system.dart に発射メソッドを追加し、GameEngine.update から呼び出すように調整してください。
  • エフェクトを変えたい: painters/ 内の各描画クラス、または game_painter.dart の該当する描画メソッド(_draw...)を編集してください。
  • バランスを調整したい: constants.dart の各種パラメータを編集、または enemy_factory.dart のWaveごとの係数を調整してください。
  • ボスの難易度を調整したい: game_engine.dart 内の _startBossBattle メソッドにある、プレイヤーの装備(パワーレベル・オプション数)に基づいたHP算出ロジックを調整してください。
  • スクロール演出を変更したい: ボスが定位置で往復運動中の背景停止ロジックは game_engine.dart の update メソッド内、effectiveDtScale の算出箇所に記述されています。

品質管理とビルド(AIへの重要指示)

  • コード編集後の確認: コードを編集した後は、必ず flutter build windows を実行してコンパイルエラーがないか確認し、エラーがある場合は修正してください。
  • フォーマット: dart format を実行して、コードを整形してください。
  • 自動修正の適用: dart fix --apply を実行して、推奨される修正を自動的に適用してください。