|
|
<!--
|
|
|
CO_OP_TRANSLATOR_METADATA:
|
|
|
{
|
|
|
"original_hash": "c8fc39a014d08247c082878122e2ba73",
|
|
|
"translation_date": "2025-10-24T15:16:36+00:00",
|
|
|
"source_file": "6-space-game/1-introduction/assignment.md",
|
|
|
"language_code": "ja"
|
|
|
}
|
|
|
-->
|
|
|
# ゲームのモックアップ: デザインパターンの適用
|
|
|
|
|
|
## 課題概要
|
|
|
|
|
|
デザインパターンの知識を活かして、シンプルなゲームプロトタイプを作成しましょう!この課題では、アーキテクチャパターン(継承またはコンポジション)と、レッスンで学んだpub/sub通信システムを練習することが目的です。
|
|
|
|
|
|
## 指示
|
|
|
|
|
|
このレッスンで学んだデザインパターンを示すシンプルなゲームを作成してください。ゲームは機能的であれば十分で、複雑なグラフィックは必要ありません。基盤となるアーキテクチャと通信パターンに焦点を当ててください。
|
|
|
|
|
|
### 要件
|
|
|
|
|
|
**アーキテクチャパターンを選択する:**
|
|
|
- **オプションA**: クラスベースの継承を使用する(例: `GameObject` → `Movable` → `Hero`)
|
|
|
- **オプションB**: コンポジションを使用する(例: 工場関数アプローチで混合動作を使用)
|
|
|
|
|
|
**通信を実装する:**
|
|
|
- **`EventEmitter`クラス**を含め、pub/subメッセージングを実現する
|
|
|
- **少なくとも2~3種類のメッセージタイプ**を設定する(例: `PLAYER_MOVE`, `ENEMY_SPAWN`, `SCORE_UPDATE`)
|
|
|
- **ユーザー入力**(キーボード/マウス)をイベントシステムを通じてゲームイベントに接続する
|
|
|
|
|
|
**ゲーム要素を含める:**
|
|
|
- プレイヤーが操作するキャラクターを少なくとも1つ含める
|
|
|
- 他のゲームオブジェクト(敵、収集アイテム、環境要素など)を少なくとも1つ含める
|
|
|
- オブジェクト間の基本的な相互作用(衝突、収集、通信など)を実装する
|
|
|
|
|
|
### ゲームアイデアの提案
|
|
|
|
|
|
**検討すべきシンプルなゲーム:**
|
|
|
- **スネークゲーム** \u2013 ヘッドを追従するセグメント、ランダムにスポーンする食べ物
|
|
|
- **ポンのバリエーション** \u2013 入力に応じて動くパドル、壁で跳ね返るボール
|
|
|
- **収集ゲーム** \u2013 プレイヤーがアイテムを収集しながら障害物を避ける
|
|
|
- **タワーディフェンスの基本** \u2013 タワーが移動する敵を検知して攻撃する
|
|
|
|
|
|
### コード構造のガイドライン
|
|
|
|
|
|
```javascript
|
|
|
// Example starting structure
|
|
|
const Messages = {
|
|
|
// Define your game messages here
|
|
|
};
|
|
|
|
|
|
class EventEmitter {
|
|
|
// Your event system implementation
|
|
|
}
|
|
|
|
|
|
// Choose either class-based OR composition approach
|
|
|
// Class-based example:
|
|
|
class GameObject { /* base properties */ }
|
|
|
class Player extends GameObject { /* player-specific behavior */ }
|
|
|
|
|
|
// OR Composition example:
|
|
|
const gameObject = { /* base properties */ };
|
|
|
const movable = { /* movement behavior */ };
|
|
|
function createPlayer() { /* combine behaviors */ }
|
|
|
```
|
|
|
|
|
|
### 実装のテスト
|
|
|
|
|
|
**コードが動作することを確認する方法:**
|
|
|
- **テスト**: イベントがトリガーされたときにオブジェクトが移動または変化するか
|
|
|
- **確認**: 複数のオブジェクトが同じイベントに応答できるか
|
|
|
- **チェック**: 既存のコードを変更せずに新しい動作を追加できるか
|
|
|
- **確認**: キーボード/マウス入力が適切にゲームイベントをトリガーするか
|
|
|
|
|
|
## 提出ガイドライン
|
|
|
|
|
|
**提出物に含めるべきもの:**
|
|
|
1. **JavaScriptファイル**: ゲームの実装
|
|
|
2. **HTMLファイル**: ゲームを実行・テストするためのもの(シンプルで構いません)
|
|
|
3. **コメント**: 選択したパターンとその理由の説明
|
|
|
4. **簡単なドキュメント**: メッセージタイプとその機能の説明
|
|
|
|
|
|
## 採点基準
|
|
|
|
|
|
| 基準 | 優秀 (3点) | 適切 (2点) | 改善が必要 (1点) |
|
|
|
|----------|---------------------|---------------------|------------------------------|
|
|
|
| **アーキテクチャパターン** | 継承またはコンポジションを正しく実装し、明確なクラス/オブジェクト階層を持つ | 選択したパターンを使用しているが、軽微な問題や一貫性の欠如がある | パターンを使用しようとしているが、実装に重大な問題がある |
|
|
|
| **Pub/Subの実装** | EventEmitterが複数のメッセージタイプと適切なイベントフローで正しく動作する | 基本的なpub/subシステムが動作し、いくつかのイベント処理がある | イベントシステムは存在するが、信頼性に欠ける |
|
|
|
| **ゲームの機能性** | 3つ以上のインタラクティブな要素がイベントを通じて通信する | 2つのインタラクティブな要素が基本的なイベント通信を行う | 1つの要素がイベントに応答するか、基本的な相互作用がある |
|
|
|
| **コードの品質** | クリーンでコメントが充実し、論理的に整理されたモダンなJavaScript | 一般的に整理されたコードで、コメントが適度にある | コードは動作するが、整理や明確なコメントが不足している |
|
|
|
|
|
|
**ボーナスポイント:**
|
|
|
- **創造的なゲームメカニクス**: パターンの興味深い使用例を示す
|
|
|
- **複数の入力方法**: キーボードとマウスイベントの両方を使用
|
|
|
- **拡張可能なアーキテクチャ**: 新しい機能を簡単に追加できる構造
|
|
|
|
|
|
---
|
|
|
|
|
|
**免責事項**:
|
|
|
この文書はAI翻訳サービス[Co-op Translator](https://github.com/Azure/co-op-translator)を使用して翻訳されています。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があります。元の言語で記載された文書が正式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤解について、当社は責任を負いません。 |