龍神録の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
これは仕様なのでしょうか?
誰か、解説出来る方がいましたら、よろしくお願いします。
cshotについて
Re:cshotについて
(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だと思います。
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だと思います。
Re:cshotについて
>の「%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
はありえません。
交互に左右のボンボンから発射するためです。
%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
はありえません。
Re:cshotについて
> 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
こういう計算はしません。
> 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
こういう計算はしません。