0

テキストベースのアドベンチャーゲームの開発を開始しました。この環境は Sierra ゲームのように動作しますが、グラフィック インターフェイスはなく、すべてのコマンドはテキストです。

現在、ゲーム内のすべてのオブジェクト (キャラクター、部屋、アイテムなど) は辞書によって定義されています。キーは、次のようなデータ値の名前 (名前、説明など) です。

flash_light={
'name':'Flashlight',
'desc':'A flashlight, probably belonging to an eningeer on the ship.',
'consumable':False
}

プレーヤーのインベントリとグローバル インベントリは辞書であり、キーはアイテムを呼び出すための「コードネーム」文字列であり、アイテムはそれを参照する辞書です。たとえば、部屋で見つけたアイテムを取得したい場合、部屋の辞書には、部屋の在庫をリストとして追跡するプロパティがあります。このリストには、その中のアイテムの「コードネーム」である文字列が含まれています。

my_room={
'name':'My Room',
'codename':'my_room',
'desc':'A hot, stuffy room shared with 3 other passengers. My trunk is   here.\
The door is on the NORTH wall.',
'access':True,
'direc':{'north':'st_hall_1'},
'inven':['flashlight']
}

コマンドは、あなたが要求したアイテムが実際に部屋にあると判断した後、次のように実行されます。

current_pos.inven().remove(target)
player_inv.update({target:global_inv[target]})

これらの行は、ルームのインベントリ リストから文字列を削除し、キーとアイテムをプレーヤーのインベントリ ディクショナリに追加します。キーは取得しようとしたオブジェクトの文字列名であり、アイテムは文字列名で GLOBAL インベントリの辞書として定義されています。

プログラムの周りで非常に多くの呼び出しがある理由は、辞書に他の辞書への参照を与えたときに問題が発生し続けたためです (つまり、部屋には接続先の部屋のリストがあります)。それらの辞書はまだ定義されていない可能性があります。私は関数を可能な限り一般的なものに保ち、string-to-call-a-dict を使用して、未定義の名前をパラメーターとして指定しないようにしました。

私の主な質問は次のとおりです。可能であれば、これをより効率的にするにはどうすればよいですか? それとも、私がシステムを構築した方法を改善するには、大幅な再構築が必要でしょうか?

4

1 に答える 1