2016年09月16日

所持品をどのように管理するか

5つの宝島を作っていた頃からの課題なんだけど、所持品ってどうやって管理するのが楽なんだろうな
正しいじゃなくて。装備品も絡めると、結構厄介な問題になると思うんだ

RPGにおけるアイテムの扱い

ドラクエやWizなどの初期の雰囲気を残すRPGは除き、一般的なRPGでは所持品はキャラクターに属さずパーティーで一つの管理を行う
だからゲーム内で一つの連想配列itemsを持っておけば十分だ
一方、装備品はキャラクターに属するので、各キャラのequip.arms equip.armor equip.shieldなどの属性にアイテムインスタンスを突っ込むというのが大体の設計方針になると思う
ここで問題になるのは2つ

  • 装備したら所持品から1個減る処理
  • あるアイテムを持っているかの判定をitemsとequip両方見なきゃいけない

このうち上のやつは大した問題じゃない。装備品の管理を必ず1関数で管理スレばいいだけの話で、
それだけならプログラミングに一般的な責任の分離の規則で対応できる。

問題は下のやつだ。



これを持ってたら別イベント

よくあるやつが、キーアイテム○○を持っていたら扉が開くとか、住民の話が変わるとか言う奴
装備できないアイテムだったら、連想配列itemsのあるキーの値が1以上とか、そういう判定をすればいいんだけど
装備品だったら、現在パーティーにいるキャラクター全員のequip構造体を走査して、特定のキーを検索する必要がある
さらにパーティーが現パーティーだけならいいんだけど

  • 馬車にこもってる奴らの装備品はフラグ立つの?
  • 酒場に入ってる奴らの装備品はフラグ立つの?
  • もっと言うとフィールドでは馬車にこもっていればOKだけど洞窟に入ると本隊と馬車組は物理的にかなり離れてるけどこういうやつの装備品はフラグ立つの?

などなど、考えだしたらきりがない。
ココらへん対策のため、equip構造体はとらず、items連想配列の方に「誰々が装備してますよ」フラグを持つって手もあるけど
そうするとキャラの攻撃力・防御力の計算とかが超厄介になるんだよな・・・

装備品に特殊能力をもたせると・・・

そうそう、アイテムが壊れるとか失われるとか、別の何かに取り替えられるイベントが発生すると
装備品の特殊能力の再計算が異常に大変になるんだ。これは大問題
単に攻撃力や防御力が減るだけならなんとでもなるんだけど、これがMAXHPが変わるとかだったら現在HPの再計算も必要になるし
装備をするコマンド以外にも何かしらアイテムに変化があるたびにステータス再計算関数を通す必要が出てくる。
こういうの、単純なオブジェクト指向では解決できなさそうな問題だと思うんだけどどうするんだろ
なんかスマートな設計方針あるのかな・・?

今回の問題、大した結論もだせなさそうだ。正しくなくていいから楽な解決法はないのかな。関数を引数にすれば楽だよー、とかさ。。。

次回以降に続く!(次回解決するとは限らない)
ラベル:龍の宝珠
posted by LoyalTouch at 06:43| Comment(0) | TrackBack(0) | プログラム全般 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:


この記事へのトラックバック