# サンプルゲームを作成しよう ## 課題概要 スペースゲームでゲーム終了条件や再スタート機能を習得した今、これらの概念をまったく新しいゲーム体験に応用する時が来ました。異なる終了条件パターンや再スタートの仕組みを示す独自のゲームを設計・構築してください。 この課題では、ゲームデザインについて創造的に考えながら、学んだ技術的スキルを実践することが求められます。さまざまな勝利や敗北のシナリオを探求し、プレイヤーの進行を実装し、魅力的な再スタート体験を作り出します。 ## プロジェクト要件 ### コアゲーム機能 あなたのゲームには以下の必須要素を含める必要があります: **終了条件のバリエーション**: ゲームが終了する少なくとも2つの方法を実装してください: - **ポイントベースの勝利**: プレイヤーが目標スコアに到達する、または特定のアイテムを収集する - **ライフベースの敗北**: プレイヤーがすべてのライフまたは体力を失う - **目標達成**: 敵をすべて倒す、特定のアイテムを収集する、または目標を達成する - **時間制限**: 一定時間が経過する、またはカウントダウンがゼロになる **再スタート機能**: - **ゲーム状態のクリア**: 以前のゲームオブジェクトをすべて削除し、変数をリセットする - **システムの再初期化**: 新しいプレイヤーステータス、敵、目標で再スタートする - **ユーザーフレンドリーな操作**: ゲーム再スタートの明確な指示を提供する **プレイヤーへのフィードバック**: - **勝利メッセージ**: プレイヤーの達成を祝うポジティブなフィードバックを提供する - **敗北メッセージ**: 再挑戦を促す励ましのメッセージを提供する - **進行状況の表示**: 現在のスコア、ライフ、または目標の状態を表示する ### ゲームアイデアとインスピレーション 以下のゲームコンセプトから選ぶか、独自のアイデアを作成してください: #### 1. コンソールアドベンチャーゲーム 戦闘メカニクスを備えたテキストベースのアドベンチャーを作成: ``` Hero> Strikes with broadsword - orc takes 3p damage Orc> Hits with club - hero takes 2p damage Hero> Kicks - orc takes 1p damage Game> Orc is defeated - Hero collects 2 coins Game> ****No more monsters, you have conquered the evil fortress**** ``` **実装すべき主な機能:** - **ターン制戦闘**で異なる攻撃オプションを提供 - プレイヤーと敵の**体力ポイント** - コインやアイテムを収集する**インベントリシステム** - 難易度が異なる複数の敵タイプ - 敵をすべて倒したときの**勝利条件** #### 2. コレクションゲーム - **目標**: 障害物を避けながら特定のアイテムを収集する - **終了条件**: 目標の収集数に到達する、またはすべてのライフを失う - **進行**: ゲームが進むにつれてアイテムが収集しにくくなる #### 3. パズルゲーム - **目標**: 難易度が徐々に上がるパズルを解く - **終了条件**: すべてのレベルをクリアする、または移動数/時間が尽きる - **再スタート**: 進行状況をクリアして最初のレベルにリセット #### 4. 防衛ゲーム - **目標**: 敵の波から基地を守る - **終了条件**: すべての波を生き延びる(勝利)または基地が破壊される(敗北) - **進行**: 敵の波が難易度と数を増加させる ## 実装ガイドライン ### 始め方 1. **ゲームデザインを計画する**: - 基本的なゲームプレイループをスケッチする - 終了条件を明確に定義する - 再スタート時にリセットする必要があるデータを特定する 2. **プロジェクト構造を設定する**: ``` my-game/ ├── index.html ├── style.css ├── game.js └── README.md ``` 3. **コアゲームループを作成する**: - ゲーム状態を初期化する - ユーザー入力を処理する - ゲームロジックを更新する - 終了条件を確認する - 現在の状態を描画する ### 技術要件 **モダンJavaScriptを使用する**: - 変数宣言に`const`と`let`を適用する - 適切な場所でアロー関数を使用する - テンプレートリテラルや分割代入などのES6+機能を実装する **イベント駆動型アーキテクチャ**: - ユーザー操作のイベントハンドラーを作成する - イベントを通じてゲーム状態の変更を実装する - 再スタート機能のためのイベントリスナーを使用する **クリーンコードの実践**: - 単一の責任を持つ関数を書く - 説明的な変数名や関数名を使用する - ゲームロジックやルールを説明するコメントを追加する - コードを論理的なセクションに整理する ## 提出要件 ### 提出物 1. **完成したゲームファイル**: ゲームを実行するために必要なすべてのHTML、CSS、JavaScriptファイル 2. **README.md**: 以下を説明するドキュメント: - ゲームの遊び方 - 実装した終了条件 - 再スタートの手順 - 特別な機能やメカニクス 3. **コードコメント**: ゲームロジックやアルゴリズムの明確な説明 ### テストチェックリスト 提出前に、以下を確認してください: - [ ] **ブラウザコンソールでエラーなく実行できる** - [ ] 指定された通りに**複数の終了条件を実装している** - [ ] **クリーンな状態で再スタートできる** - [ ] ゲーム状態についてプレイヤーに**明確なフィードバックを提供している** - [ ] **モダンJavaScript**の構文とベストプラクティスを使用している - [ ] **README.mdに包括的なドキュメント**を含んでいる ## 評価基準 | 評価基準 | 優秀 (4) | 良好 (3) | 発展途上 (2) | 初歩的 (1) | |----------|----------|-----------|--------------|------------| | **ゲーム機能** | 複数の終了条件、スムーズな再スタート、洗練されたゲームプレイ体験を備えた完全なゲーム | 基本的な終了条件と機能的な再スタートメカニズムを備えた完全なゲーム | 一部の終了条件が実装され、再スタートに軽微な問題がある部分的なゲーム | 限られた機能と重大なバグを持つ未完成のゲーム | | **コード品質** | モダンJavaScriptの実践を使用したクリーンで整理されたコード、包括的なコメント、優れた構造 | モダンな構文を使用した良好なコード構成、適切なコメント、明確な構造 | 一部モダンな実践を使用した基本的なコード構成、最小限のコメント | 古い構文を使用した不十分なコード構成、コメントや構造が欠如 | | **ユーザー体験** | 明確な指示、優れたフィードバック、魅力的な終了/再スタート体験を備えた直感的なゲームプレイ | 適切な指示とフィードバックを備えた良好なゲームプレイ、機能的な終了/再スタート | 最小限の指示とフィードバックを備えた基本的なゲームプレイ | 不明瞭な指示と不十分なユーザーフィードバックを備えた混乱したゲームプレイ | | **技術的実装** | ゲーム開発の概念、イベント処理、状態管理の習得を示す | ゲーム概念の確固たる理解と良好な実装を示す | 基本的な理解と許容可能な実装を示す | 限られた理解と不十分な実装を示す | | **ドキュメント** | 明確な指示、十分に文書化されたコード、徹底的なテスト証拠を備えた包括的なREADME | 明確な指示と適切なコードコメントを備えた良好なドキュメント | 最小限の指示を備えた基本的なドキュメント | 不十分または欠如したドキュメント | ### 評価スケール - **優秀 (16-20点)**: 創造的な機能と洗練された実装で期待を超える - **良好 (12-15点)**: すべての要件を満たし、堅実な実行を示す - **発展途上 (8-11点)**: ほとんどの要件を満たし、軽微な問題がある - **初歩的 (4-7点)**: 一部の要件を満たしているが、大幅な改善が必要 ## 追加学習リソース - [MDNゲーム開発ガイド](https://developer.mozilla.org/en-US/docs/Games) - [JavaScriptゲーム開発チュートリアル](https://developer.mozilla.org/en-US/docs/Games/Tutorials) - [Canvas APIドキュメント](https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API) - [ゲームデザインの原則](https://www.gamasutra.com/blogs/) > 💡 **プロのヒント**: シンプルに始めて、徐々に機能を追加してください。バグのある複雑なゲームよりも、洗練されたシンプルなゲームの方が良いです! --- **免責事項**: この文書はAI翻訳サービス[Co-op Translator](https://github.com/Azure/co-op-translator)を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があります。元の言語で記載された文書を正式な情報源としてお考えください。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤解について、当社は責任を負いません。