龍神録21章について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
mi_l

龍神録21章について

#1

投稿記事 by mi_l » 11年前

C言語の勉強で龍神録を1行ずつ理解しながらやっていこうとしているのですが、

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

コード:

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


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

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

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

教えてほしいです。

よろしくお願いします。

nil
記事: 428
登録日時: 12年前

Re: 龍神録21章について

#2

投稿記事 by nil » 11年前

CheckStatePadはボタン、またはキーの押されているフレーム数を返します。
この場合、pushに代入されるのは
上下左右キーの押されているフレーム数の合計です。

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

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

jay
記事: 314
登録日時: 13年前
住所: 大阪市
連絡を取る:

Re: 龍神録21章について

#3

投稿記事 by jay » 11年前

該当箇所に書いてあったコメントとコードを見る限り
「何かしらの移動入力があった場合」に処理を行うようですね

だから上下左右の入力状態を同時に取得し
まとめて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 )
      {

      }
みたいにバラバラに書くより色々と楽だから、ではないでしょうか。
まぁどれが読みやすいのかは人によるでしょうけどね
♪僕たちは まだ森の中 抜け出そう 陽のあたる場所へ

mi_l

Re: 龍神録21章について

#4

投稿記事 by mi_l » 11年前

返信ありがとうございます。


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


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

閉鎖

“C言語何でも質問掲示板” へ戻る