ページ 11

龍神録21章について

Posted: 2013年5月28日(火) 22:24
by mi_l
C言語の勉強で龍神録を1行ずつ理解しながらやっていこうとしているのですが、

21章のch.cppのcalc_ch内にある

コード:

 unsigned int push=CheckStatePad(configpad.left)+CheckStatePad(configpad.right)
                        +CheckStatePad(configpad.up)+CheckStatePad(configpad.down);
の構文の意味が分かりません。


すぐ下を見ると、「何か(方向キーが)押されたら・・」という文があるので、そのことを示してるのはわかるのですが、

なぜこのような書き方をするのか、なぜ「+」でつなぐのか・・

複数の処理を一つの変数に格納できるのか・・・

教えてほしいです。

よろしくお願いします。

Re: 龍神録21章について

Posted: 2013年5月28日(火) 22:54
by nil
CheckStatePadはボタン、またはキーの押されているフレーム数を返します。
この場合、pushに代入されるのは
上下左右キーの押されているフレーム数の合計です。

このあとには
if(ch.cnt>60 || (ch.y<FIELD_MAX_Y-20 && push))
このような条件文が記述されていますが、最後のpushは、0以外であるときに真になります。

pushが0であるときは上下左右のいずれも押されていないときなので、
pushが0以外であるときは上下左右のうち1つ以上が押されていなるときとなります。

Re: 龍神録21章について

Posted: 2013年5月28日(火) 23:00
by jay
該当箇所に書いてあったコメントとコードを見る限り
「何かしらの移動入力があった場合」に処理を行うようですね

だから上下左右の入力状態を同時に取得し
まとめてpush変数に入れているのでしょう

何も入力が無ければ戻り値はすべて0なのでpushも0になり
何か1つでも入力があればpushも0より大きくなるので、その後の処理が通るという訳です

なぜ1つにまとめて書いているかと言うと・・・
多分

コード:

unsigned int push;
      push = CheckStatePad(configpad.left);
      push += CheckStatePad(configpad.right);
      push += CheckStatePad(configpad.up);
      push += CheckStatePad(configpad.down);
 とか

コード:

      if(CheckStatePad(configpad.left)>0 || CheckStatePad(configpad.right)>0 ||
         CheckStatePad(configpad.up)>0 || CheckStatePad(configpad.down)>0 )
      {

      }
みたいにバラバラに書くより色々と楽だから、ではないでしょうか。
まぁどれが読みやすいのかは人によるでしょうけどね

Re: 龍神録21章について

Posted: 2013年5月28日(火) 23:20
by mi_l
返信ありがとうございます。


おかげで理解できました。
これでモヤモヤしないで先に進めます。


ありがとうございました。