ページ 1 / 1
a=x%y
Posted: 2009年6月28日(日) 16:03
by 亀猫
再び質問させていただきます・・
ゲームプログラミングの館で、
else if(x%32!=0)
x++;
という部分を入れるという文があったのですが、理解できません・・。
Ⅹ座標を32を割って、その余りが0ならば(真ならば?)実行という意味でしょうか?
%について調べたところ a=b%c という計算でbをcで割ってその余りをaに入ると書いてあったのですが
(x%32!=0)では↑の a の役割をする部分がありません・・・。
そのサイトの一部を抜粋↓
int a = 10;
int b = 3;
int c;
c = a % b;
のとき 10 ÷ 3 の余りは 1 ですから c は 1 になります。
Re:a=x%y
Posted: 2009年6月28日(日) 16:10
by ものらす
!=は、~ではなかったら。の意味ですので、
余りが0でないなら実行という意味ですよ。
なのでxが32とか64だったらx++は行われないわけです。
Re:a=x%y
Posted: 2009年6月28日(日) 16:37
by sizuma
=は代入演算子
左の変数に(左オペランド)右の値(右オペランド)を格納します。
(演算子が作用する対象をオペランドって言って、よくエラーとかで見ますね)
==や!=などは関係演算子
2つの値を比較して真か偽かを返します
他にもあるので、関係演算子で調べてみてください
というわけで、=と==は亀とスッポンくらいの違いがあります。
if文の判定では代入演算子(=)は使わないものです。
JavaやC#だとコンパイルエラーになりますし
亀猫さんも判定式などで等しいか比較するときに=と==の書き間違いには注意してくださいね
Re:a=x%y
Posted: 2009年6月28日(日) 16:55
by 亀猫
返信ありがとうございます。
=が付かないことは理解できたのですが、
この
else if(x%32!=0)
x++;
の意味が理解できません・・・。
つまり余りが0になるまで X座標に+1させるっていうことですか?
今いる地点のX座標が63だったら 63÷32で余りが出るのでX座標に+1させて 64÷32で余りが0になるので進む距離は→を1回押したので+1させたのと余りが出て+1だから 2ピクセルしか進まない・・? という意味ですか?
それとも、 →を1回押して +1なので 1÷32(少数は余りにならない・・・?)で余りが出るので X座標に+31させて 32÷32で余りが0になるので進む距離は 32ピクセル・・・?という意味でしょうか?
追記:
すみません・・・。C言語は初心者で、どこまで乗せればいいか分からなかったので・・・。
if( Key[ KEY_INPUT_RIGHT ] == 1 ) //右ボタンが押されたら
ch.x++ ; //xの値を1増やす
else if(ch.x%32!=0) //32で割り切れない区間はオートで進む
ch.x++;
です。
多分コレであってると思います・・・。
Re:a=x%y
Posted: 2009年6月28日(日) 17:07
by box
当該のif文全体を見せてください。
else ~
だけを見ても、当該のif文の全体像がわかりません。
Re:a=x%y
Posted: 2009年6月28日(日) 17:28
by non
最近、ゲームプログラミングの館を見ていないから間違っていたらごめんなさい。
mapが32ピクセル区切られていて、方向転換をするタイミングを32ピクセルの倍数の
場所だけチェックするようになっていたのではなかったでしょうか。
32の倍数でない場合は、それまでの方向に直進するようになっていたと思います。
Re:a=x%y
Posted: 2009年6月28日(日) 17:32
by MNS
これは、
キャラがいるx座標が必ず32の倍数になるように調整しているのではないでしょうか?
例えば、キャラの座標が64であったとして、
キーボードから→ボタンの押下を受け付けたとします。
if( Key[ KEY_INPUT_RIGHT ] == 1 )を満たしているので、ch.x++ が行われ、
キャラの座標は、→ボタンを押し続けている限り、1ずつ増えていきます。
ここで、座標が76のときに→ボタンを離したとします。
右ボタンが押されていない、かつ32で割り切れない条件を満たしたので、
else if(ch.x%32!=0) ch.x++; の処理が行われ、座標は1ずつ増えていきます。
そして、キャラの座標が96になったとき、96%32 == 0なので、
どちらの処理も行われなくなります。
言っていることが分かるでしょうか?
これは、キャラが中途半端なところで止まるのを防ぐための処理だと思います。
迷路などゲームで、→ボタンを一回押しただけで、一マスすすむのは、
(仮にボタンを離したとしても、一マス移動するまで動き続けると思います)
このような処理が行われているからです。
Re:a=x%y
Posted: 2009年6月28日(日) 22:48
by 亀猫
なるほど!理解できました!
ASさま sizuma様 box様 non様 MNS様 詳しく返信して頂きありがとうございます。
プログラムを一つづつ解読していかないと気がすまない性格なので・・・。