現在、DATA系のクラスをガスガス書いている。まあ、実装を始めると自分が書いた仕様書が如何に穴だらけだということに気がつく。ありゃぁ、また書き直しかなぁ・・。
ゲームにおいてDATAは2種類あると思われる。ゲーム進行中は変化しないDATA、いわゆるGameDataとでも言おうか?それと、ゲーム中はガンガン変更して終了時にセーブして摂っておかなければいけないData、いわゆるSaveDataとでも言っておこうか。この二つ、やはり厳密に分けて管理しないといけない。でないと、SaveDataファイルが異常にでかくなったり、またはSaveしてもちゃんと再現できなかったりしてしまう。で、アイテムDATAクラスを書いていたときのこと。これ、実はかなり厄介だと言うことに気がついた。まず、アイテムの名前や具体的効果や値段等のDATA、これはゲームが進行しても変わらないのでGameDataである。一方、現在どのアイテムをいくつ所持しているか等のData、これはゲーム進行とともに変化するのでSaveDataになる。この二つをちゃんと管理すれば万事おっけ〜♪等と思っていたらとんでもなかった。GameDataだと思っていた中に思わぬ伏兵がいた。
アイテムの寿命だ!!!
いわゆる回数制限のあるアイテム。10回使ったら壊れるとかそういう奴。その場合、何回使ったかのDataはSaveDataになる。そうでないと、9回使った後一旦セーブして再起動するとまた10回使える状態に戻ってしまう。これは流石にバグだろう。というわけで、この部分だけをSaveDataとして取り出せるように設計しなおす必要が出てきた。これで解決と思いきや、また別の問題が発生した。
どのアイテムが何回使ったかがわからない!!
そもそも所有アイテムの管理方法が「何をいくつ持っているか」なので、同じアイテムに関しては量子力学並に見分けがつかない(何)。まあ、FFやツクールみたいな管理だと思ってくれてよい。あるアイテムを使う場合、同じのがたくさんあってもその中のどれを選ぶか等は考えないだろう。でもこの場合は結局のところ、いくつあっても最終的に全部の使える回数は変わらない(10回使えるアイテムが3つなら使い方によらず30回使える)ので、適当に古い奴から使うという法則でもつけておけばよいだろう。が、今回はそれだけだとうまくいかない。
消耗品が装備品の可能性があるのだ。
まあ、確かに可能性は低いかもしれない。が0ではない。「装備したときのみ使えて10回まで使えるアクセサリ」がいっぱいあって、複数のキャラクタが装備していた場合どうなるか?装備変更の際、このアクセサリを装備しようと思った場合、古い方から使いたい場合と、めいいっぱい使える状態のを装備したい場合と二通りあるだろう。そうなると、どれが何回使われたの管理まで欲しいわけだ。そうなるともうFF方式は通用しない。かといってDQ方式(全部のアイテムを区別する方法)もちょっとなぁ・・・。というわけでよい方法を模索中。