Vibe Coding Master:Adventure Game
Vibe Coding Master:Adventure Game
アドベンチャーゲームの歴史は、「Colossal Cave Adventure」(1976年)あたりと言われており、プレイヤーとコンピューターの対話を通じて物語を紡ぐ独特なジャンルとして発展してきました。日本では、堀井雄二氏が1983年に手がけた「ポートピア連続殺人事件」が画期的な作品として知られており、他にも「かまいたちの夜」(1994年)や、「逆転裁判」シリーズ(2001年〜)、「ダンガンロンパ」シリーズなど様々なものがあります。初期のアドベンチャーゲームでは、プレイヤーが「ドアを調べる」「鍵を使う」「北に行く」といった自然言語でコマンドを入力し、ゲームがそれを解析して結果を返すシステムでしたが、徐々に行動の選択肢が示されたり、キャラクターとの会話によってエンディングが分岐するなど複雑なものが登場するようになりました。近年、Large Language Models(LLM)の登場により、アドベンチャーゲーム開発に新たな可能性が生まれています。従来の固定的な選択肢システムから、より自由度の高い対話システムへの回帰が可能になったのです。
動的対話システム: プレイヤーが「店主に昨夜の事件について聞く」と入力すると、LLMが現在のゲーム状況(時間、プレイヤーが知っている情報、NPCの性格設定)を考慮して、適切な返答を生成します。
文脈理解による推理サポート: 「この血痕と被害者の身長を考えると、犯人の身長は?」といった複合的な推理に対して、収集済みの証拠を基に論理的な回答を提供できます。
感情認識対応: プレイヤーの入力文から感情を読み取り、「怒っている時の質問」と「冷静な時の質問」で異なる反応を返すNPCシステムが実現できます。
この章では、Claude(Anthropic)のようなAIアシスタントと協力して、本格的なアドベンチャーゲームを開発する方法を学びます。プログラミングをAIに任せるだけではなく、コンテンツとなるストーリー展開や、キャラクターの会話などをどのように設計していくのが良いか学んでいきましょう。
Step 1: ゲームコンセプトの設計
まずは作りたい世界観などを作成していきます。探偵ものなのか、SFなのか、自身が作成したいテーマを考えていきましょう。
世界観の設定
「近未来の東京を舞台に、AIが支配する社会で人間の探偵が謎を解く」のような具体的な設定を決めます。世界観は、プレイヤーの感情移入を促進し、ゲーム体験を豊かにする重要な要素です。
主人公とキャラクター設定
プレイヤーが操作する主人公の背景、動機、能力を設定します。「元警察官で、AIによる冤罪で職を失った探偵」のような具体的なバックストーリーが、プレイヤーの行動選択に深みを与えます。
ゲームメカニクス
選択肢による分岐、アイテム収集、謎解き要素など、どのような遊び方をプレイヤーに提供するかを決めます。
Step 2: AIへの効果的な依頼方法
AIアシスタントに効果的にゲーム開発を依頼するためのプロンプト設計は、成功の鍵となります。
具体的で構造化されたプロンプト例:
「以下の仕様でブラウザで動作するアドベンチャーゲームを作成してください:
【基本設定】
- 舞台:2030年の東京
- 主人公:元刑事の私立探偵
- ゲーム形式:テキストベースの選択式アドベンチャー
【必要な機能】
- 複数選択肢のあるシーン展開
- インベントリ(所持品)システム
- セーブ・ロード機能
- BGM対応(オプション)
【技術要件】
- HTML/CSS/JavaScriptのみで動作
- モバイル対応のレスポンシブデザイン
- ブラウザのローカルストレージ利用
【ストーリー】
失踪した科学者を探す依頼から始まり、AIと人間の関係性を問う深いテーマに発展させる」
このような構造化されたプロンプトにより、AIは明確な方向性を持ってコードを生成できます。
Step 3: OpenAIのAPIに接続して、ストーリーを自動生成する
ある程度、ゲームの設計ができたら、ストーリー生成をAIに任せてみましょう。
下記のようなコマンドを入力することで、OpenAIのAPIに接続を行いストーリーを自動生成するように作成します。
このゲームをOpenAIを活用して、テキストは都度自動生成されるようにしてください。
アプリケーションのapi keyは、最初の画面で入力して、localstorageで保存するように作ってください。
見た目は最初と変わっていませんが、ストーリーの選択肢が増え、さまざまなパターンの物語が展開するようになりました。
第2部:応用編 - 本格的なゲーム開発の実践
LangGraphによる高度なAIシステム設計
単純にLLMに接続を行うだけでも、十分にアドベンチャーゲームとしての機能は担保されているように思います。ただ、繰り返しプレイを行うと、ストーリーと、手がかりなどに矛盾が生じていたり、登場人物の会話に脈略がなかったりと、細かな部分に違和感があることに気が付きます。このような矛盾や違和感を少なくするために、LLM自身に都度、検証をしながら進めることができます。
「ストーリーを作る人」「手がかりを管理する人」「物語に矛盾がないかチェックする人」「登場人物のキャラクター設定を考える人」「キャラクター設定を参考に、会話を作成する人」など用途ごとに、役割分担をさせることによって、こうした矛盾のある設定や人物などを排他することが可能となります。このような役割を作成するためにLangGraphを活用します。LangGraphは、複数のAIエージェントを協調させるフレームワークです。これを利用することで、従来の静的なゲームAIを超えた、動的で複雑な行動パターンを持つNPCシステムが構築できます。
マルチエージェント設計の概念
現代のゲーム開発では、単一のAIシステムですべてを処理するのではなく、専門化されたエージェントが連携するアーキテクチャが主流です。下記の図は、LangGraphの公式サイト(https://blog.langchain.dev/langgraph-multi-agent-workflows/) から引用したものですが、このような構造を簡単に実装することができます。
// ゲームノードの専門化例
this.nodes = {
storyGenerator: this._generateStory.bind(this), // ストーリー生成エージェント
actionProcessor: this._processAction.bind(this), // アクション処理エージェント
sceneUpdater: this._updateScene.bind(this), // シーン更新エージェント
clueManager: this._manageClues.bind(this), // 手がかり管理エージェント
consistencyChecker: this._checkConsistency.bind(this), // 整合性チェックエージェント
consistencyRepairer: this._repairConsistency.bind(this) // 整合性修復エージェント
};
この設計により、各エージェントが独立してタスクを処理しながら、全体として統合されたゲーム体験を提供できます。
Agent Supervisorパターンの実装
ゲーム開発において、複数のAIシステムを調整するSupervisorパターンは非常に重要です。これは、各専門エージェントの出力を監視し、必要に応じて介入や調整を行うシステムです。
Supervisorの役割:
- 品質管理: 各エージェントの出力がゲームの品質基準を満たしているかチェック
- 整合性保証: ストーリーライン、キャラクター設定、世界観の一貫性を維持
- リソース管理: 計算リソースの効率的な配分と優先度制御
- エラー処理: 異常な出力や矛盾を検出し、自動修復を試行
整合性管理システムの設計
大規模なアドベンチャーゲームでは、ストーリーとキャラクターの整合性維持が最大の課題となります。
StoryConsistencyManager(ストーリー整合性管理)
プレイヤーの選択により分岐するストーリーラインを追跡し、過去の選択と現在のイベントの整合性を保証します。これには以下の機能が含まれます:
- 選択履歴の追跡とデータベース化
- 矛盾する展開の検出と警告
- 分岐パスの動的調整
- フラグ管理による状態制御
CharacterConsistencyManager(キャラクター整合性管理)
NPCの性格、記憶、関係性を一貫して維持するシステムです:
- キャラクター固有の口調や行動パターンの維持
- 過去の会話や出来事の記憶システム
- プレイヤーとの関係値の動的変化
- 感情状態の継続的な管理
DialogueConsistencyManager(対話整合性管理)
会話システムにおける自然性と一貫性を保証します:
- 文脈を考慮した応答生成
- キャラクター固有の語彙選択
- 感情的な継続性の維持
- 矛盾する発言の自動修正
実装環境とツールチェーン
Google Colabを活用した開発環境
Google Colabは、クラウドベースのPythonノートブック環境として、AIゲーム開発に理想的なプラットフォームです。その理由は:
- GPUリソースへの無料アクセス
- 各種AIライブラリのプリインストール
- 共同作業機能による チーム開発支援
- バージョン管理の簡素化
Discussion