問題タブ [adventure]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - クラスベースのテキストアドベンチャーゲームのデザインに関する問い合わせ。
私は夏の間 C# を学んでおり、今までの経験から小さなプロジェクトを作りたいと思っています。ある種のテキストベースのアドベンチャー ゲームに決めました。
ゲームの基本構造には、多数のセクター (または部屋) が含まれます。部屋に入ると、説明といくつかのアクションなどが出力されます。その部屋にあるものを調べ、拾い、使用する能力。おそらく戦闘システムなどです。セクターは、最大4つの他のセクターに接続できます。
とにかく、このためのコードを設計する方法について紙にアイデアを走り書きしていると、コードの一部の構造に頭を悩ませています。
プレイヤー クラスと、レベル/ダンジョン/エリアを表す「レベル」クラスを決定しました。このレベルのクラスは、相互接続された多数の「セクター」で構成されます。いつでも、プレーヤーはレベル内の特定のセクターに存在します。
だからここに混乱があります:
論理的には、player.Move(Dir d)
このようなメソッドはレベル オブジェクトの「現在のセクター」フィールドを変更する必要があります。これは、クラスPlayerがクラスLevelについて知る必要があることを意味します。うーん。また、LevelはPlayerオブジェクトを操作する必要がある場合があります (たとえば、プレーヤーが部屋に入る、何かに待ち伏せされる、在庫から何かを失う)。では、LevelもPlayerオブジェクトへの参照を保持する必要があるのでしょうか?
これは気分が悪いです。すべてが他のすべてへの参照を保持する必要があります。
この時点で、私が使用している本からデリゲートについて読んだことを思い出しました。C++ の関数ポインターについては知っていますが、デリゲートに関する章では、一種の「イベント ベース」プログラミングの観点から例が示されていましたが、それについてはあまり理解していませんでした。
これにより、次のようにクラスを設計するというアイデアが得られました。
プレーヤー:
レベル:
これはこれを行う良い方法ですか?
デリゲートの章がこのように提示されていなければ、私はそのような「イベント」を使用することを考えなかったでしょう. では、コールバックを使用せずにこれを実装するにはどうすればよいでしょうか?
細かいことまで書く癖があります…すみませんv__v
c# - テキストアドベンチャーでのコーディングインタラクション
編集:あなたがこの巨大な質問を読むのを気にすることができないならば、私は一番下に要約を置きました。
私は現在、コーディングの演習として、C#で作成するテキストアドベンチャーの一種の「フレームワーク」に取り組んでいます。このフレームワークでは、可能なアクションは「Interaction」クラスによって定義されます。
潜在的な「アクション可能な」オブジェクトは、インベントリアイテム(スティック、ガン、ソード)、環境アイテム(壁、ドア、窓)、キャラクター(人、動物)です。これらのそれぞれには、相互作用のリストであるプロパティがあります。現時点では、インタラクションは基本的に「アクション/レスポンス」の名前と値のペアです。「スマッシュウィンドウ」と入力すると、プレーヤーが利用できる可能性のあるすべてのアクション可能なアイテムが調べられ、件名(この場合は「ウィンドウ」)と一致します。次に、アクションが「スマッシュ」であることがわかり、ウィンドウのインタラクションのリスト(環境アイテム)を検索してスマッシュアクションの応答を取得し、コンソールに書き込みます。
これですべて完了ですが、ここで私が立ち往生している点があります。
アクションには、潜在的な相互作用ごとに異なる、潜在的な結果がいくつもあります。これらは:
-おそらく2番目のサブジェクトとの相互作用を調べて、アクションの結果を説明する応答を返します
どちらか -アクションの主題(インベントリアイテム、環境アイテム、またはキャラクター)は、その説明EGを変更します。「パンチウォール」は、壁の説明を変更して壁のへこみを表すことができます。 または -アクションの対象が別のアイテムEGに置き換えられます。「ボトルを壊す」と「ボトル」が「壊れたボトル」に変わるか、「ジョンを殺す」と、ジョンのキャラクターが環境アイテム「ジョンの死体」に置き換えられます。
-先行する変更EGを説明する応答を返します。「ボトルの破片が床に散らばっています。」
-エリアの説明が変更されました。例えば。「スマッシュ電球」を使用すると、部屋の説明が真っ暗な部屋の説明に変わります。
-アイテムは、インベントリまたは環境EGに追加/削除されます。「ボトルを拾う」。これでインベントリにボトルがあり、ボトルは環境から削除されます。
-移動に利用できる方向とそれらがつながる領域が変更されますEG。「鍵でドアのロックを解除する」を使用すると、東に別の部屋に移動できます
-プレイヤーは新しいエリアEGに移動します。「北へ行く」はあなたを別のエリアに連れて行きます。
特定のインタラクションがこれらの結果のどれを呼び出す必要があるかを一般的な方法で何らかの方法で決定し、それらを呼び出す必要があります。アクションは、これらの結果の多く、または1つだけを使用する可能性があります。
たとえば、アイテムがボトルの場合:
「ボトルに水を入れる」は、最初に、ボトルに水を入れたことを示す応答を返します。次に、「ボトル」アイテムを「ボトル入り飲料水」アイテムに置き換えます。これは、応答を返すこととアイテムを置き換えることの2つの結果です。
次に、「窓にボトル入り飲料水を投げる」としましょう。これはもっと複雑です。それは最初に起こった出来事を説明する応答を返します、ボトルと窓は両方とも砕けて、水はいたるところに行きます。ボトルはプレイヤーのインベントリから削除されます。次に、「水のボトル」は「壊れたボトル」に置き換えられ、「窓」は「壊れた窓」に置き換えられます。エリアの説明もこれを反映して変更されます。これは5つの結果であり、応答を返し、在庫からアイテムを削除し、2つのアイテムを置き換え、現在のエリアの説明を更新します。
ご覧のとおり、「インタラクション」ごとに、そのアクションの結果がどうなるかを定義し、アイテム、プレーヤー(インベントリ用)、エリアなどの他のオブジェクトを適切に更新できる一般的な方法が必要です。
ご不明な点がございましたら、お詫び申し上げます。ご不明な点がございましたら、できる限り明確にさせていただきます。
編集:呼び出すためのいくつかのメソッド(およびそれらのパラメーター)を渡すことができるインタラクションのメソッドを定義する方法はありますか?返される最初の応答はデフォルトの必須の結果であり、指定されている場合は追加の応答が存在する可能性があります。
たとえば、上記の例では、最初のインタラクション「水で満たす」の場合、応答(「ボトルに水を入れました」)を返し、「水で満たす」を置き換えるReplaceItemメソッドを呼び出すように指示します。 「ボトル」の件名に「ボトル入り飲料水」を添えます。
2番目のインタラクションでは、応答を返すように指示し(「ボトルが空中を駆け抜けて...」)、アクションの件名でRemoveFromInventoryを呼び出し、ボトルでUpdateStatusを呼び出します(「ボトルが壊されました」)。ウィンドウ(「ウィンドウが壊された」)およびUpdateAreaDescriptionを呼び出して、現在の領域の説明を変更します(「あなたは単一のウィンドウのある部屋に立っており、ガラスが粉々に砕かれています」)。
それは実現可能ですか?考えられるさまざまな相互作用のために、これをできるだけ一般的にしようとしています。
編集2:さらに明確にし、問題を要約しようとする:
私のゲームには、アクション可能なオブジェクト(ボトル、壁、ジョン)があります。各Actionableオブジェクトには、プレーヤーがそれらと対話する方法を説明するインタラクションオブジェクトのリストがあります。現時点では、インタラクションには「Name」プロパティ(「throw」、「hit」、「break」)があり、Response(「Youthrow」)を返します。
私が解決しようとしている問題は、インタラクションが特定のインタラクションごとに異なる他の多くのことも実行する必要があるということです。ガラス瓶を例にとってみましょう。
「ガラス瓶を投げる」
-応答が返されます(「ガラス瓶を投げました。」)
-「瓶」はプレイヤーのインベントリから削除されます。
-変更を反映するために、は新しいものに置き換えられます。(「ボトル」は「壊れたボトル」に置き換えられました)。
-2番目の応答が返されます(「ガラス瓶の破片が床に散らばっています」)。
「窓にガラス瓶を投げる」
-応答が返されます(「窓にガラス瓶を投げました。」)
-オブジェクト「ボトル」は、プレイヤーのインベントリから削除されます。
-オブジェクトは、変更を反映するために新しいオブジェクトに置き換えられます。(「ボトル」は「壊れたボトル」に置き換えられました)。
-2番目のオプションのオブジェクトは、変更を反映するために新しいオブジェクトに置き換えられます。(「ウィンドウ」は「壊れたウィンドウ」に置き換えられました)。
-現在のエリアの「説明」プロパティが更新されます。(「あなたは、壊れた窓が1つある部屋に立っています。」)
インタラクションを作成するときに、サブジェクトのステータスの変更や現在のエリアの説明の変更など、インタラクションが実行する追加のアクションをどのように変更できますか?
上記のアクションの例がさらに必要な場合は、お知らせください。さらにいくつか実行します。
nlp - テキスト アドベンチャー アクションの適切な変数名
これは難しい問題です。私は頭を悩ませてきましたが、これらの変数に適切な名前を付けました。誰かがおそらくすぐにヒットするでしょう。
これらのアクションの例を見てください:
- 「ボトルを壁に投げつける」
- 「ジョンをドアに押し込む」
- 「オーガを剣で攻撃する」
物で/と/で/中/物での行動
それぞれに変数を定義する必要がある場合は、最初の「もの」に適切な名前が必要で、2 番目の「もの」に適切な名前が必要です。だから... 「Interactor」や「Interactee」のように... しかし、適切な名前です。
私はこれを数人に説明しようとしてきましたが、概念を理解できないようです.
state - アドベンチャーゲームにおける状態管理
ポイント アンド クリック アドベンチャー ゲームを作ろうと考えています。私が直面している問題は、ゲームのロジックと状態を一般的な (そして醜くはない) 方法で表現することです。
ゲームの状態:
部屋からアイテムを取り出しましたが、それはもはやそこにあるはずではありません (簡単に実行できます) 別の部屋/画面に影響を与える何かをしようとしたキャラクターに話しました。部屋をどの状態で保存するか、キャラクターは
ゲーム ロジック:
キャラクターに話しかけると、キャラクターはアニメーションを実行し、ワールド ステートを変更します。ゲームにハードコーディングせずに、これをどのように設定しますか?
状態を表現する方法を理解することは、「アクション」を定義する方法を理解するのに大いに役立つため、質問は関連していると思います。
c# - テキスト アドベンチャーの入力を解析するためにスイッチ ブロックを使用しますか?
さて、私は今、基本的なテキストアドベンチャーを作るという目標を持っています. ただし、これを行うには、次のことを実行できる switch ステートメントが必要です。
- 文字列に SOMEWHERE という単語が含まれているかどうかを確認します。
- 文字列内のどこかに任意の組み合わせで 2 つの単語があるかどうかを確認します。
どうすればこれを達成できますか? この特定の例のコーディングを教えてください:
ユーザーはデータの入力を求められます。switch ステートメントは、1 つのケースとして「look box」をチェックし、別のケースとして「sleep」をチェックします。プログラムは単語の順序は気にしませんが、文字の順序は気にします。
すべてを詳しく説明してください。コーディングを始めたばかりです。
編集:すべての回答ありがとうございます。これを処理するためのより適切で、より複雑で、より便利な方法があることは理解していますが、まだ私のレベルではありません。
lisp - キャスティングSPELでアイテムの場所をプッシュする
私はLispでSPELをキャストしていますが、これはオブジェクトのピックアップを処理するために提案されたソリューションです。
これが非効率だと思うのは私だけですか?私が理解している限り、このpush!
関数は、プレイヤーがオブジェクトを拾うたびcons
に新しいpair
ものです。*object-locations*
これはこのような小さなゲームでは大きな問題ではないかもしれませんが、在庫からアイテムを置くオプションを追加すると、*object-locations*
リストは無限に大きくなる可能性があります...たとえば、の代わりにのを置き換えるpickup-object
必要はありません?の別のコピーを追加しますcdr
(whiskey-bottle living-room)
pair
私はLispに不慣れで、間違っているかもしれません...誰かが私の仮定が正しいかどうか説明してもらえますか?もしそうなら、Lispテキストアドベンチャーでオブジェクトのピックアップを処理するための最良の方法は何でしょうか?
java - テキストベースのゲームの継承クラス
クラス用のテキストベースのゲームを作成しようとしていますが、メイン クラスである GCPUAPP を Artifact クラスから読み取らせようとしています。
GCPUAPP クラスに入力したコードは次のとおりです。
「新しいアーティファクト」でエラーが発生します。アーティファクトにあるコードは次のとおりです。
私はJavaが初めてなので、完全に立ち往生しています。
javascript - Colossal Caves Adventure - javascript を使用してデータ ソースにアクセスする
言語を独学する方法として、元の Colossal Caves Adventure の JavaScript バージョンを作成するというアイデアをいじっています。冒険の元のデータ ファイルはここにあります -
http://jerz.setonhill.edu/if/crowther/
経験豊富な JavaScript 作成者が、テキスト データ ファイル (わずか数百行の長さ) を保存してアクセスするための最良の方法を提案してくれることを願っています。現時点では、テキストを html ページの隠し要素に埋め込んで、その方法でアクセスすることを考えていますが、それでは優雅さに欠けることはわかっています。あなたの考えは何ですか?
java - JAVA: 2D ゲーム アドベンチャー。衝突検出の問題
JAVAのアニメーションについてです。すべての画像で同じ寸法を使用すると成功しました。しかし、すべての画像のサイズを同じサイズ (幅と高さ) に保つと、プレイヤーがパンチしたときにバグが発生します。プレイヤーの手が敵の体に触れる前に、敵が死亡した
しかし、アイドル、ラン、パンチの次元が異なる私の場合の他の人. 左向きのパンチアニメーションが非常に奇妙になりました。彼の手が左にヒットした場合、彼の体は右にシフトします. これは、x と y が同じであるためです。
どうすれば修正できますか?指示が必要です:D
私はpng cozサポート透明を使用します
これは2つのオプションで修正できると思います1.衝突検出を修正します2.何らかの条件が発生したときの画像の描画位置を修正します