You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Web-Dev-For-Beginners/translations/ja/6-space-game/1-introduction/assignment.md

100 lines
6.0 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!--
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メッセージングを実現する
- **少なくとも23種類のメッセージタイプ**を設定する(例: `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)を使用して翻訳されています。正確性を追求していますが、自動翻訳には誤りや不正確さが含まれる可能性があります。元の言語で記載された文書が正式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤解について、当社は責任を負いません。