RPGのデータのロード


8

私はpythonを練習する方法として小さなテキストRPGを作成していますが、データをロードする方法についての質問に遭遇しています。ゲームはワイルドウェストゲームですが、あまり関連性はありません。武器とそのプロパティのリスト、キャラクター、シナリオなどのリストを保存する必要があります。このデータはクラスとしてですが、データの格納方法とロード方法は明確ではありません。

私の主な質問は、データとクラスの関係を中心に展開しています。私はここSEに関するいくつかの投稿を読みましたが、それらの多くはストレージに関連しているので、そこにいくつかの良い情報があります。

いつそのデータをロードする必要がありますか?たとえば、ゲームの開始時にプレイヤーはいくつかの武器から選択します。その時点ですべての武器をロードし、すべての武器オブジェクトをインスタンス化する必要がありますか?武器クラスには、インスタンス化せずにデータベースから武器を表示する機能が必要ですか?

助けてくれてありがとう。

回答:


7

「小さな」テキストRPGを言うので、私のアドバイスはすべてをプリロードすることです。膨大な量のコンテンツについて話していなければ、起動時間に大きな違いはないはずであり、Bjornが助言するように、物事をシンプルに保ちます。

あなたの質問を読んで私に起こる一つのことは、あなたは武器武器の種類の違いを考慮したいかもしれないということです。私の好みは、常に2つを明確に区別すること、および両方をコードでモデル化して、必ずしも手元にインスタンスがなくても武器の種類について質問できるようにすることです。(これを行う方法の1つは、武器のタイプをクラスにして、それを操作できるクラスメソッドを使用し、武器をそのクラスのインスタンスにすることです。実際には、この方法はお勧めしません。武器のタイプを変更するのは信じられないほど厄介です。明らかに、すべてのゲームに関係があるわけではありません。)


これらをコードでどのように区別しますか?私は確かにこの問題に遭遇しました。
timfreilly、

1
私が持っている方法は、武器のタイプが、このSOの質問で話している「ブローカー定義セット」パターンによって管理されるオブジェクトであるというものです。stackoverflow.com / questions / 401720 / … 、各武器オブジェクトは、それがどのタイプであるかを認識していますIDコード。だからあなたはobj->setWeaponType(WEAPON_TYPE_SHOTGUN)何をしてもいいし、武器はそれ自体を適切に設定する。武器のパフォーマンスメトリックでは、タイプの値をベースラインとして使用できますが、最終結果をインスタンスで変更できます。そういうこと。
混乱

リンクに感謝します。使用可能な武器のタイプのリストを表示したい場合はどうしますか?そのようなリクエストはブローカー/タイプのバージョンを通過しますか?
timfreilly、

1
@timfreilly:状況によって異なります。それがお店のようなものであれば、私は通常、実際の武器の実例をストックし、その説明をプレイヤーに表示します。それが開発者の概要やヘルプインターフェイスのようなものである場合、私はブローカーデーモンに武器タイプ定義の完全なセットを要求し、それらに関する情報を表示します。
カオス

4

最初にすべてをロードします。必要な場合を除いて、メモリとディスクの間でデータを分割することでプログラムを複雑にしないでください(たとえば、一度にメモリに保持しきれない場合)。

重要なことは、アイテムのインスタンスを表すデータとアイテムのタイプを表すデータの違いを理解することです。一般に、前者のいくつかのインスタンスは、後者の1つの共通インスタンスを共有します。


そこで追加情報を使用できます。この違いをどのようにコーディングしますか?
timfreilly、

1
@timfreilly:gamedev.stackexchange.com/questions/4516/…で、Kylotanが説明するようなアイテムシステムのサンプルクラス階層があります。これは、しばしばフライウェイトパターンと呼ばれます。

Joeが言うように、Flyweightパターンは、インスタンス間でその「タイプ」データを暗黙的に共有することにより、これを提示する1つの方法です。私は個人的にそれらを明示的に表現することを好みます。MonsterInstanceクラスとMonsterTypeクラスを使用します。MonsterInstanceの各インスタンスには、関連するMonsterTypeインスタンスへの参照があります。
Kylotan、

(私はカイロタンが言うこともやります、それでもそれをフライ級オブジェクトと呼びます。)

0

私はそれほどPythonに慣れていません。私が与える一般的なアドバイスは、シンプルに保つことです。あなたはすでにデータを表現する方法のアイデアを得ていると述べました。保存するデータのクラスがいくつかある場合は、それらをリストに保存できます。次に、そのリストをディスクに保存してonSaveおよび逆シリアル化してonLoadにすることができます。最初の実装で、データがそれほど大きくない場合、ゲームの開始時にすべてをロードし、特定の時点で保存します。


0

SQLiteを使用できます。SQLiteを使用すると、メモリとハードドライブにデータベースを作成でき、MySQLのような巨大なDBMSをインストールする必要はありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.