相変わらず中途半端なので公開は出来ないが、偽スパイダソリティアの拡張について。
まだゲーム本編の方につけなきゃならない機能とかあるんだけどさ。アイテムとか。その前に、そのアイテムを買ったり、最初のメニューで選べる横幅拡張とかフリーエリアとかを購入するためのメニューを取り付けたり、購入しないと使えない制限を設けたり、デバッグのために購入しなくても使い放題モード作ったりといった作業をしている。
で、このメニューを取り付ける以上、絶対に避けられないものがある。それはファイル操作。
ネットでファイル操作というと、デスクトップが晒されたり、ページを開くとCDトレイが開いたり、マイピクチャの画像が全部ぼっさんになってたり、c:ドライブがフォーマットされたりという恐ろしげなものしか想像できないだろうがそう言うものではなく、単なるゲームデータのセーブだ。
あの偽スパイダソリティアは、基本ルールでは同じ色の逆順、もしくはまったく同じブロックしか積めない。だが、それだと本家のスパイダソリティア同様高難易度になるとクリアは厳しい。それどころか、初期配置が完全ランダムだし、ブロックが勝手に増える。ますます無理。
そこで、同じ色なら積めたりと言った様々なずるを用意してあるわけだが、最初からそれが使えてはつまらない。そこで、レベルの低いヌルいゲームでしこしことポイントをため、こういったスキルをゲットして更に難しいステージに挑んでどーんと荒稼ぎというのが、このゲームの基本的な趣旨だ。
だから、この辺りの機能はこのゲームの根幹でもある。ようやくそれに着手したわけだ。
で。そうなるとセーブデータの取り扱いと言うことになる。
実は、以前の旗鞠騙しぃでも最終的にはベスト記録やクリア状況をセーブできる機能を取り付けようと思っていたが、そこまで行く前にいろいろな意味でダメになってしまった。なので、フラッシュによるファイル操作は今回が初めてだ。
FLASH制作の攻略本のような本を読み、該当する機能について調べ、実践。
ファイルを開くためのメソッドはSharedObject.getLocal()、引数としてファイルの名前を拡張子なしの文字列で。うん。いわゆるファイルオープンだな。で、読み込むのは?
……何でも、開くと同時に全部読み込んじゃうらしい。nantara = SharedObject.getLocal("kantara");とするだけで、ファイルkantaraの中身がごっそりnantaraの中に入ってしまうと。
読み込む機能の前に、そのファイルが存在しないといけない。書き出しに必要になるファイル操作関連のメソッドはflush()。……えーと、他は?それと、このメソッドの引数は?これだけで何が出来るんだ。
どうやら、これを使う前に下準備がいると言うことが判明。nantara.data.untaraなど、SharedObjectクラスであるnantaraオブジェクトの中に作られるdataプロパティに、好き勝手に名前を付けてデータを詰め込んでからnantara.flush();とやってやると、そのdataの中身がそっくりファイルに収められ、次にgetLocalで読み込んだとき、そっくり復元されるという仕組みらしい。ファイル操作も分かりやすくなったもんだなー。ま、flashの中だけの話だけど。
ポイントとして、最初の書き込みを行うためにもあらかじめ、ファイルの割り当てとして存在もしないファイルkantaraを読み込むことになる。その時はデータが全部"undifined"になっているので、それを感知したらデータ初期化を行うといいよとのことだった。
BASICやCでファイルいじってたときは結構面倒だったから腰が引けてたのに、この分かりやすさはなんだ。
これ利用すれば、FLASH間のデータのやりとりも簡単だな。ファイル共有すりゃいいんだから。もうこれからはファイル応用したフラッシュとかがんがん作りまくっちまうぞ?
でも、そんなデータ保存が必要なフラッシュってゲームくらいしか思い浮かばないけど。実用ソフト?フラッシュで?なんのために?