このプロジェクトは、リアルタイム対戦型のカードゲームです。クライアントはVue.jsとPhaser.js、サーバーはColyseus(Node.js)で構築されています。
- リアルタイム対戦: Colyseusを利用して、2人のプレイヤーがリアルタイムで対戦します。
- カードベースの戦闘: プレイヤーはスキルカードと条件カードを組み合わせて、独自のスキルセットを構築します。
- ターン制バトル: 10ターンで1ラウンドが終了し、5ラウンドで勝敗が決まります。
- リッチな演出: Phaser.jsによるアニメーションやエフェクトで、ゲームプレイを盛り上げます。
- フロントエンド:
- Vue.js 3
- Phaser.js 3
- Pinia (状態管理)
- Vite (ビルドツール)
- Colyseus.js (クライアントSDK)
- バックエンド:
- Colyseus (Node.jsフレームワーク)
- TypeScript
- Express.js
- その他:
- Prettier (コードフォーマッター)
- npm Workspaces (モノレポ管理)
auto-project/
├── backend/ # Colyseusサーバーサイド
│ ├── src/
│ │ ├── rooms/
│ │ │ └── MyRoom.ts # ゲームロジックの中核
│ │ ├── data/
│ │ │ └── card.ts # カードデータ
│ │ └── index.ts # サーバーエントリーポイント
│ └── package.json
├── client/ # Vue.js + Phaser.jsクライアントサイド
│ ├── src/
│ │ ├── scenes/
│ │ │ └── BattleScene.js # 戦闘シーン
│ │ ├── core/ # ゲームのコアロジック
│ │ ├── ui/ # UIコンポーネント
│ │ ├── colyseus/ # Colyseusクライアント設定
│ │ └── main.js # クライアントエントリーポイント
│ └── package.json
└── package.json # ルート
-
依存関係のインストール:
npm install
-
開発サーバーの起動:
npm run dev
これにより、クライアントとサーバーが同時に起動します。
-
ビルド:
npm run build
- マッチング: 2人のプレイヤーがルームに参加すると、ゲームが開始されます。
- スキル選択: 各ラウンドの開始時に、プレイヤーはランダムに配られるスキルカードから3枚を選択します。
- 戦闘:
- プレイヤーは、事前に設定したスキルセットと、ラウンドごとに選択したスキルカードを使って戦います。
- スキルは、MPを消費して発動します。
- 10ターンが経過するか、どちらかのHPが0になるとラウンドが終了します。
- 勝敗:
- 5ラウンド終了時点で、勝利数の多いプレイヤーが勝利となります。
- Colyseusのルームで、サーバーサイドのゲームロジックを管理します。
- プレイヤーの参加、離脱、メッセージの処理を行います。
- ゲームの状態(ターン、ラウンド、HPなど)を管理し、クライアントにブロードキャストします。
- 戦闘のロジック(スキルの使用、ダメージ計算など)を処理します。
- Phaser.jsのシーンで、戦闘画面の描画とインタラクションを担当します。
- キャラクター、UI要素(HPバー、スキルボタンなど)を作成・管理します。
- サーバーからの情報に基づいて、ゲームの状態を更新します。
- プレイヤーの入力(スキルボタンのクリックなど)を処理し、サーバーに送信します。
Character.js: プレイヤーと敵のキャラクターの状態(HP, MPなど)を管理します。CharacterView.js: キャラクターのスプライト、HPバーなどの表示を管理します。BattleManager.js: 戦闘の進行を管理し、アニメーションやエフェクトを再生します。Skill.js: スキルのデータを管理します。
- テストの拡充:
MyRoom.tsのロジックをテストするユニットテストを追加する。 - UIの改善:
- ドラッグ&ドロップによるスキルセットの構築。
- より洗練されたアニメーションとエフェクトの追加。
- 新機能の追加:
- 新しいスキルカード、キャラクターの追加。
- ランキング機能。
- 観戦モード。