Hatena::Groupnadesiko

雪乃☆雫のなでしこ日和

2016/04/05 (火)

キー設定を作る・・・の前に、ナゾ現象についてぼやく

| 13:34 | キー設定を作る・・・の前に、ナゾ現象についてぼやく - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - キー設定を作る・・・の前に、ナゾ現象についてぼやく - 雪乃☆雫のなでしこ日和 キー設定を作る・・・の前に、ナゾ現象についてぼやく - 雪乃☆雫のなでしこ日和 のブックマークコメント

 週末に札幌に行ってTクモを見てみたら、丁度デモ機のところにゲームパッドが置いてあったんだけど、あれれ~? A、Bボタンの位置がスーファミやプレステとは逆だ~?!(@_@)

 ・・・と思っていたら、海外ではーゆうふうになっていて、プレステも、×ボタンで決定、○ボタンキャンセルってことになってるので、海外製のゲームを日本人がやると、はじめはまごまごするとかΣ(゜д゜;


 まあ、なんかんなわけで、やっぱりキー設定を作った方がいいんだなあと思い、以前ちょっと試しに作ってみていたキーボードの場合のキー設定のプログラムを眺めていたんだけど、の時に件の選択肢の怪現象についての天啓がひらめいたんですよw

 エディタ上でキーを押したら、のキーの名称がエディタ表示され、キー番号がINIファイルに保存されるというプログラムだったんだけど、この時にもナゾ現象が発生して、の問題自体はわりとすぐに解決したんだけども、びみょーにナゾのものは解明しなかった。


 問題が発生していたのはこの関数

*キー表示(Sで)
  Sで条件分岐
    0ならば「」で戻る
    37ならば「←」で戻る
    38ならば「↑」で戻る
    39ならば「→」で戻る
    40ならば「↓」で戻る
#
#中略
#
    違えば
      もし、(ASC("A")<=S)かつ(S<=ASC("Z"))ならばCHR(S)で戻る
      違えばもし、(ASC("0")<=S)かつ(S<=ASC("9"))ならばCHR(S)で戻る
      違えばもし、(96<=S)かつ(S<=106)ならば、「テンキー{(S-96)}」で戻る
      違えば、Sで戻る
  ここまで

 ちなみにこれは、なでしこの行動タブの中にある「キー番号の挿入」の内容を、ほとんど引き写したものw

 エディタ上でキーを押した時には正常に表示するのに、INIファイルを読んだ内容を表示させようとすると、テンキー4、5、6、7、8、9の表示がおかしくなってしまう。

 これは、引数の「(Sで)」を「({整数}Sで)」とすることで解決した。

 INIファイルを読んで変数代入した内容は、数字であっても整数じゃ無くて文字列だよと言うのなら、それはまあ納得出来るんだけど、だったらなんで他のキーはもとより、テンキー1、2、3は問題が出ないのだ?

 びみょーに一部分にだけ問題が出るってゆうのが、どうもよくわかんないんだよねえ・・・

通り道通り道2016/04/05 21:02実際に並べると一目瞭然な感じですが・・・
0 96
1 97
2 98
3 99
4 100
5 101

以下の3つは成立しますが、
(96<=100)かつ(100<=106)
(96<=99)かつ(99<=106)
("96"<="99")かつ("99"<="1062)

以下はダメです。
("96"<="100")かつ("100"<="106")

雪乃☆雫雪乃☆雫2016/04/05 21:42 な、なるほど!
 ・・・と言いつつ、意味が分からず30分ほど固まっていたのは内緒(汗)
 配列ソートと配列数値ソートをしてみたら、ようくようく分かりましたデス(> <)/
 おかげさまでナゾ解明して、ひとつ賢くなることが出来ました。
 ありがとうございますっ!!


 ・・・いや~、誰も見てないかと思ってバカばっかし書き散らしていたら、見て下さってる方、いらっしゃるもんですねぇ~(^▽^;;;

通り道通り道2016/04/06 00:09すいません、訂正です。

よくよく見直すと、ここの式が成り立ってませんでした。
("96"<="99")かつ("99"<="106")
この、右の式が成り立っていません(falseになる)。実際は、こうなっているようです。
("96"<="99")かつ(99<=106)

同じように書きなおすと、ダメなパターンでは、
("96"<="100")かつ("100"<="106")
ではなく、
("96"<="100")かつ(100<=106)
となります。

確認してみたら、ソースのコメントに、
// (混合) 右辺を尊重して比較
とありました。この辺の細かい挙動、マニュアルにも記載があるとよいんですけどね・・・

雪乃☆雫雪乃☆雫2016/04/07 04:15 なるほど! やっと意味が分かったあぁぁ。(頭悪すぎ;)
 つまり、元のコードだと「(96<=S)かつ(S<=106)」で、Sは文字列だから、前の方の式は右辺のSを尊重して文字列、後の式は106で整数として扱われているとゆうことなんですねぇ~(.. )ψメモメモ
 ありがとうございます☆

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