cshotについて

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

cshotについて

#1

投稿記事 by kai » 15年前

龍神録のcshot.cppについて分からない点があったので教えてください。
一部、丸ごとコピーします。
if(ch.power>=100){
for(int i=0;i<(ch.power<300?2:4);i++){
if((k=search_cshot())!=-1){
cshot[k].flag=1;
cshot[k].cnt=0;
cshot[k].angle=option0ang;
cshot[k].spd=8;
cshot[k].x=option_bb[i%2].x;
cshot[k].y=option_bb[i%2].y;
cshot[k].power=10-7*(i/2); //マイナスにならないよう注意(50)
cshot[k].knd=1;
cshot[k].img=img_cshot[1]; //画像番号代入(49)
}
}
}
この部分についてお聞きしたいのですが、
まず、
cshot[k].x=option_bb[i%2].x;
cshot[k].y=option_bb[i%2].y;
の「%2」とは、何のために%2を書いているのでしょうか?

もう一つ、
cshot[k].power=10-7*(i/2); //マイナスにならないよう注意
の部分ですが、「マイナスにならないよう注意」と書いてあるにも関わらず、
ch.powerが300以上のときに、マイナスになると思うのですが、
10-7*(4/2)=-4
これは仕様なのでしょうか?
誰か、解説出来る方がいましたら、よろしくお願いします。

ひよこ

Re:cshotについて

#2

投稿記事 by ひよこ » 15年前

(ch.power<300?2:4);でch.powerが300以上だと4を指しますが、
for文なので、iは3になります。
i%2は0,1を表します。GV.hにoption_bb[2];//オプション発射元ボンボン(49)と宣言されています。
cshot[k].power=10-7*(i/2); //マイナスにならないよう注意
はマイナスになりません。powerはint型で、おそらくint型の整数は計算途中でも小数点以下を切り捨てているからだと思います。
10-7*(3/2)=10-7*1.5=-0.5 ではなく、
10-7*(3/2)=10-7*1=3だと思います。

softya

Re:cshotについて

#3

投稿記事 by softya » 15年前

>の「%2」とは、何のために%2を書いているのでしょうか?
交互に左右のボンボンから発射するためです。
%2は2で割った余りを求める演算です。

>ch.powerが300以上のときに、マイナスになると思うのですが、
for(int i=0;i<(ch.power<300?2:4);i++){
の事ですか?
ch.powerが300以上の時は、
for(int i=0;i<(ch.power<4);i++){
となりますのでiは3を超えません。
なので、
0-7*(4/2)=-4
はありえません。

box

Re:cshotについて

#4

投稿記事 by box » 15年前

> cshot[k].x=option_bb[i%2].x;
> cshot[k].y=option_bb[i%2].y;
> の「%2」とは、何のために%2を書いているのでしょうか?

option_bb[0] か option_bb[1] のいずれかにアクセスするためでしょう。

> cshot[k].power=10-7*(i/2); //マイナスにならないよう注意
> の部分ですが、「マイナスにならないよう注意」と書いてあるにも関わらず、
> ch.powerが300以上のときに、マイナスになると思うのですが、

> for(int i=0;i<(ch.power<300?2:4);i++){

このとき、i のループは 0~3 の間を回ります。
i が 4 になることはありません。したがって、

> 10-7*(4/2)=-4

こういう計算はしません。

kai

Re:cshotについて

#5

投稿記事 by kai » 15年前

>ひよこさん、softyaさん、boxさん
なるほど。
非常に分かりやすい解説のおかげで理解できました。
ありがとうございます!助かりました。

閉鎖

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