モジュール機能のサンプルに寄せて

・ “modvar_sample_01.hsp”に寄せて
3番目に書いたモジュールです
パラメータとかに参照するように書きました
並び替えをする必要がないので、そういう意味では楽です
自分、基本、今回はデータは読み出して使用して戻すという流れを
想定していましたが、
このモジュールは、並び替えなくて良さそうなので、
少々データと操作がまとまっています

・”modvar_sample_02.hsp”に寄せて
2番目に書いたモジュールです
(ちなみに最初に書いたのはさすがに汚いですw)
プレイヤーの所持している武器データの管理用です
武器レベルはないので、武器の使用回数だけ管理しています
武器の強さも実装してみたかったのですが
時間的に実装しきれなさそうなので諦めました
諦めたのにGAMEの完成は出来ませんでしたw
そういえばこのモジュールも
setterとgetter以外のデータの操作を書いてます
並び替えにミスがあっても致命的ではないような気がしましたので
最初に書いたモジュールがsetterとgetterがいっぱいあったので
このモジュールでは、setterとgetterをまとめてみました

・”modvar_sample_03_module.hsp”に寄せて
4番目に書いたモジュールです
キャラクターデータとキャラクター属性データと
それぞれの予備を管理しているのですが
モジュール変数の管理のモジュールを使い回してます
少々詳しく記述した文章は後述です

・今後の改善点。IDに関して
モジュール変数にキャラクターIDを格納しているのですが
作成するたびに増えるキャラクターIDと
最初に指定したまんまのキャラクターIDが混ざっています
キャラクターのデータは作成のたびに増える方がいいでしょうし
武器のデータとかはIDは固定した方がいいでしょう
更にキャラクターのデータは存在しなければIDが-1にしている
モジュールもあってややこしいです
モジュール固有のID。キャラクターID。存在するか削除されているかのID
と分けてモジュール変数を持った方がいいかもしれません。
という改善点です
改善した方がいいなら改善しとおいて。と思うかもしれませんが
現在10月20なんにちで改善したいけれど
改善していたら締め切りを破りそうなので
完成しなそうなので資料としての投稿としたのに
そういうことをやっていたら
締め切りを余裕で突破しそうです
そもそもモジュール変数の利用の仕方の応用がよくわかってないから
ちゃんと締め切りを守れないのでしょう
アジャイルな開発のごとく何周かして品質を高めるのが
よろしそうですが
毎年、思うがままに書いて
書いたスクリプトの保守とかをしないから
10月に作成しはじめて完成するのかもしれませんね
今回はよくわかんなくなるのを織り込んで
少々早く製作し始め
且つ途中で、よくわからなくなるのも想定して
自分で書いたスクリプトを写経しながらやっていたら
実は開発期間はもっと必要そうという結論です
モジュール変数が多いと、一行に書ききれないかもしれませんが
例えば炎素質と雷素質が一つのモジュールに入っていたりするので
操作はめんどくさそうですが分けた方がいい気もします
“modvar_sample_03_module.hsp”
でキャラクターの属性データを
委譲をしたモジュールに属性を格納してるのですが
属性データはそんないにいっぱい格納しなくていいし
インスタンスに委譲をしないモジュール変数として
mem_typeとかそんなかんじの
モジュール変数として記述をすればいいのかなと思いました
とまあいっぱいデータを作成したんですが
デバッグがわかりにくいんですよね
モジュールに分けて管理していても
そこでsetterしたIDの番号とか
getterしたIDの番号とかをlogmesすれば
;そもそもその手法にバグあれば別ですが
;そこが大丈夫なら
このIDにsetしたな。とか
このIDからgetしたな。とかがわかるわけです
なのでそのIDからちゃんとsetしたかちゃんとgetしたか想像するのです

・今後の改善点。委譲に関して
最初は委譲はなんか似たような処理になりそうで
躊躇していたのですが
実装してみると委譲を利用したモジュールは
使い回せることに気付きました
“modvar_sample_03_module.hsp”
ではキャラクターデータとキャラクター属性データで
とそれぞれの予備。に委譲したのを使い回してます
委譲の使い回しはめんどくさいしデバッグもしにくそうですが
管理するデータを配列形式でたくさん持てますし
命令の使用もポリモーフィズムのように共通になります
(インスタンスの名前で区別するかんじになります)
最初に記述したモジュールも委譲を使用した方が
すっきりとする気もしてきました

・今後の改善点。配列かモジュールか
どうもファミコンとかでは複数のかたまりのデータを
配列で管理してる気がするんです
例えばキャラクターAの変数Aの隣にキャラキクターBの変数Aを置くみたいな
それに対してプレステ2とかは構造体っぽく
キャラクターAの変数Aの隣にキャラクターAの変数Bを置くみたいに
データの格納を行っている気がします
キャラクターのデータを多くしてみた今回は構造体っぽく
1キャラごとのデータがまとまっているかんじで実装しました
並び替えもしたいのでそうしたんですが
仕様を詰めてないのでどんな変数が現れるかよくわかりませんでした
そういう時は一つめの案のように配列で管理する方がいいのかもしれません
ただ今年くらいにプログラムの写経をしてて
写経したプログラムで
インスタンスの中に予備変数を保持しているプログラムがあって
それを参考に予備のモジュール変数を作成してみました
足りなくなったらまたオブジェクトを作成すればいいかな。と
モジュールの委譲をすればいいですし
使い回せばいいですし
委譲の利点として
repeatでsetterとか繰り返せます
とか言って調子に乗って
0~9を炎10~19を雷とかやってたんですが
逆にknowbugで値を参照するのがめんどくさいし
参照出来る値が途中で切れてるし
(まあ少々古めのknowbug使ってるのもありますが)
あんまり調子に乗るのも問題ですね
そこではインスタンスを4種類に分けた方が楽っぽいですし
0と10と20と30とか
繰り返しが(最初はそうでもないかもですが)理解しにくくなるぽいです
大量にデータ記述するとどの種類の何番目とか
考えるのめんどくさくなりますし

・今後の改善点。中途はんぱなローカル変数もどき
HSPはローカル変数はあまり相性よくないですよね
よくjumpしますし
しかしローカル変数的に使いたい時もあります
自分はローカル変数にはloc_なんとか
命令に入ってない時はtmp_なんとか。とか命名します
しかし、たまにtmp_なんとかの変数を遠くから参照してたりします
バグは起きないんですけど
こういう使い方をするとセーブ/ロードがどうやればいいのかな。だなんて
めんどくさいから全部vsave/vloadでやってて思ったんですけど
vsave/vloadしたファイルを
教えてもらったのに上手く暗号かけれないですし
そういう意味ではこまめに命令化してローカル変数機能を多用した方が
いいのかな。なんて思います
命令は増えても保存しなくていいし

・検討案。キャラメイクか転職か
自分、今回はキャラメイクとキャラの並び替えを想定して
コーディングしてました
しかし、現在締め切りが迫っているのに
星ドラにはまっちゃったりして
ちょうど5周年で30000ジェムくれたり色々優遇されてたりもして
はまっちゃいましたw
で、星ドラは自分のキャラは3人で他にキャラメイクしたりせず
転職して他の職業を楽しめます
で、思ったんですけど
キャラメイクシステムは管理するキャラも増えますし
自分、今回は最大8キャラと想定しました
並び替えもバグると致命的な不具合にもなります
ユーザーさん的には不親切かもしれませんが
僕みたいな短編ばかり作ってる人は
転職システムの方が向いてるのかな。と思いました
繰り返しですが管理するキャラクター少ないですし
並び替えもいらないですし
キャラクターが減るとデバッグの労力も減りますし
自分、キャラメイクシステムのゲームも好きではありますがw