Hatena::Groupnadesiko

雪乃☆雫のなでしこ日和

2016/11/25 (金)

コンフィグも作るよ!

| 02:35 | コンフィグも作るよ! - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - コンフィグも作るよ! - 雪乃☆雫のなでしこ日和 コンフィグも作るよ! - 雪乃☆雫のなでしこ日和 のブックマークコメント

 さてさて、本体プログラムの方は、PやCでは必要の無いキャラの作成を、Sの時だけ実行するようサブルーチンにして、さくっとスクリーンセーバー側から呼び出すようにすればOK~・・・と思ったら、思わぬ事態。

 これまで、作ったモノを実行ファイルになんかしたこと無かったから、考えたことも無かったんだけど、実行ファイルにしたら、ランタイムパスは使えないんだよね。

 いや、使えるんだけど、場所が変わってしまうとゆうか。

 いままでずっと、ランタイムパスを、なでしこのインストールフォルダのよーに扱ってきたけど、実際にはvnako.exeの場所だったわけで、実行ファイルにしたらこっから起動するわけじゃなくなるもね~。

 スクリーンセーバーとして実際に使用するためには、どうしたって実行ファイルにしなくちゃならないんで、「{PROGRAMFILESパス}nadesiko_lang\」に変更。

 インストール先のフォルダを変更していたり、ZIP解凍してのまま使っていたりすると、これじゃダメだけどね。

 ・・・というわけで、やっぱりコンフィグで、フォルダの選択が出来るようにすることにした。

 ついでに、セリフの表示隔も変えれるようにしようかねー。



 なでしこのGUIに、トラックバーないのかな?

 まあ、バーでいいけど。

 母艦のX、Yの指定は、最小化ボタンや最大化ボタンの有効変更の後に行わないと、反映されないっぽい。これは、仕様と思っておいた方がいいのかね~?

 近頃、位置の指定が上手くいかないではまるコトばっかりだぁ・・・

 あとは、iniファイルの読み書きも、なでこらでやったとうりで、特筆するようなことはナイ・・・と思っていたんだけど・・・

#-----------------------------------------------------------------------
# INI
設定ファイル名とは文字列=「{母艦パス}ぷろぐらみんぐ講座?.ini」

# 設定
ナデシコパスとは文字列=「{PROGRAMFILESパス}nadesiko_lang\」  #なでしこのインストールフォルダ
科白表示隔とは整数=5
シナリオ隔とは整数=科白表示隔。
設定読み込み。

# 色指定
透明色とは整数=$00FF00。肌色とは整数=$FFDDCC。帽子とは整数=$EECC77。ネクタイとは整数=$FF6666。眼鏡とは整数=$CCDDEE。
うさぎとは整数=$EEBBCC。青服とは整数=$77BBBB。赤服とは整数=$EE7777。黄服とは整数=$EEDD77。橙服とは整数=$FF9966。緑服とは整数=$66CC99。

キャラ設定とは配列=「{ナデシコパス}doc\kouza\sensei.gif,0/0/{透明色},0/80/{透明色},89/0/{透明色},89/80/{透明色},75/85/{透明色},50/25/{肌色},60/50/{肌色},60/80/{青服},40/35/{眼鏡},70/35/{眼鏡}
  ・
  ・中略
  ・
{ナデシコパス}doc\kouza\gui\toolman.gif,0/0/{透明色},50/20/{帽子},50/40/{肌色},50/80/{緑服}」
#-----------------------------------------------------------------------

#-----------------------------------------------------------
*設定読み込み
  もし、設定ファイル名が存在するならば
    設定ファイル名のINI開いて設定に代入。
    設定で「スクリーンセーバーの設定」の「なでしこパス」をINI読んでナデシコパスに代入。
    設定で「スクリーンセーバーの設定」の「科白表示隔」をINI読んで科白表示隔に代入。
    シナリオ隔=科白表示隔。
    設定のINI閉じる。
  違えば、設定記録。

*設定記録
  設定ファイル名のINI開いて設定に代入。
  設定で「スクリーンセーバーの設定」の「なでしこパス」にナデシコパスをINI書く。
  設定で「スクリーンセーバーの設定」の「科白表示隔」に科白表示隔をINI書く。
  設定のINI閉じる。
#-----------------------------------------------------------

 これでいけるかと思ったら、「ナデシコパス」に「設定読み込み」でiniファイルを読んだ内容が反映されない

 宣言と同時に値を与えてしまうと、プログラムが走る前に、設定されてしまうのかなあ?

 それで、試しに宣言の部分を、

#-----------------------------------------------------------
キャラ設定とは配列。
キャラ設定=「{ナデシコパス}doc\kouza\seito.gif,~~~~」
#-----------------------------------------------------------

 のようにしてみたら、無事反映されたんだけど・・・

 度はコンフィグとは全然関係ないトコで、いきなりバグりました(*_*;

 うえぇ~、なんでだ~~~・・・と思っていろいろ確認していたら、どうやら入ってる物は一見同じなのに、反復した時の「それ対象)」の中身が違うんですよ。

#-----------------------------------------------------------
Aとは配列=「A,123,いろは」
Aを言う。
Aを反復
  それ言う。
「A」の変数確認して言う。

Bとは配列
B=「B,123,いろは」
Bを言う。
Bを反復
  それ言う。
「B」の変数確認して言う。
#-----------------------------------------------------------

 変数確認してみたところ、Bの場合は、先に「配列」と宣言してあっても、代入した時点で「文字列」ってことになっちゃってる。

 して、同じように反復しても、二次配列の場合「それ」は、「,」で区切られた配列として返ってくるけど、文字列の場合は「,」も込みでふつーに文字列として返ってくるんだね。

 う~ん、までんなこととは知らなんだ;;;

 二次配列の場合だけなのかな?

 まぁ、文字列だってんなら「,」で区切って配列にしちゃえばいいだけなんだけども・・・

 何か、ワタシの代入のしかた、あるいは宣言のしかたに違いがあるのかね?

 ものすごく初歩的なことのよーな気がするけど、なんかよく分からん;

 むむむー(@_@)



 ここでもまた、思わぬコトではまって、今日もまた完成させ切れなかった・・・orz

うぇいくうぇいく2016/11/26 18:45なでしこでの変数への代入は、型の変更もふくんでるので、変数宣言時の型指定はあまり活用できません。
基本的に、正しい型に変換したものを代入するしかないです。
----
Aとは変数
# 一次元。要素n=3の配列
A=「1,2,3」を","で区切る
Aを言う
# 二次元。要素(n,m)=(5,3)の配列
A=「1,2,3,4,5
4,5,6,7,8
7,8,9,10,11
」をCSV取得
A[2]を言う
# 一次元のつもりの,区切りの文字列にCSV取得すると結果は2次元配列(n,1)になるのでちゅうい。
----
ある程度慣れてきて、プログラムでいろいろ複雑なことをやろうとし始めると、型が勝手に切り替わってそれなりに動作するより、明示した型が強制されて整合が取れないならエラーとなった方が便利になるんですけどね。

雪乃☆雫雪乃☆雫2016/11/26 23:19 うぇいくさま、またまたありがとうございます!
 なるほど、やっぱり変わってしまう物なんですね。
 intだのstrだのと怒られない代わりに、こうゆうことも起こるということですね。
 ワタシなんかにとっては、意識しなくてもそれなりに判断して動作してくれるのはとってもありがたいことではあるんですけれど、知っておかないと飛んだ落とし穴にはまりますね~><
 そう言えば以前にも、整数で宣言してても文字列になっちゃう事件があって、整数変換したのでしたが、整数変換や文字列変換やハッシュ変換まであるのに、配列変換は無いのか~?と思っていましたが、後から区切らなくても、代入時に区切ったりCSV取得しちゃえば正しく判別されて代入されるんだったんですね!(.. )ψメモメモ

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20161125