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