龍神録29章の条件演算子について

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

龍神録29章の条件演算子について

#1

投稿記事 by todo » 13年前

龍神録29章の恋の迷路を作るプログラムでわからない部分があります

コード:

void boss_shot_bulletH003(){
#define TM003 600
#define DF003 20 
    int i,j,k,t=boss_shot.cnt%TM003,t2=boss_shot.cnt;
    static int tcnt,cnt,cnum;
    double angle;
    if(t2==0){
        //40<x<FMX-40  50<y<150 の範囲で100離れた位置に80カウントで移動する
        input_phy_pos(FMX/2,FMY/2, 50);
        cnum=0;
    }
    if(t==0){
        boss_shot.base_angle[0]=bossatan2();
        cnt=0;
        tcnt=2;
    }
    if(t<540 && t%3){
        angle=bossatan2();
        if(tcnt-2==cnt || tcnt-1==cnt){
            if(tcnt-1==cnt){
                boss_shot.base_angle[1]=boss_shot.base_angle[0]+PI2/DF003*cnt*(cnum?-1:1)-PI2/(DF003*6)*3;
                tcnt+=DF003-2;
            }
        }
        else{
            for(i=0;i<6;i++){
                if((k=search_boss_shot())!=-1){
                    boss_shot.bullet[k].col   = cnum?1:4;
                    boss_shot.bullet[k].x     = boss.x;
                    boss_shot.bullet[k].y     = boss.y;
                    boss_shot.bullet[k].knd   = 8;
                    boss_shot.bullet[k].angle 
                     = boss_shot.base_angle[0]+PI2/DF003*cnt*(cnum?-1:1)+PI2/(DF003*6)*i*(cnum?-1:1);
                    boss_shot.bullet[k].flag  = 1;
                    boss_shot.bullet[k].cnt   = 0;
                    boss_shot.bullet[k].spd   = 2;
                    se_flag[0]=1;
                }
            }
        }
        cnt++;
    }
    if(40<t&&t<540 && t%30==0){
        for(j=0;j<3;j++){
            angle=boss_shot.base_angle[1]-PI2/36*4;
            for(i=0;i<27;i++){
                if((k=search_boss_shot())!=-1){
                    boss_shot.bullet[k].col      = cnum?6:0;
                    boss_shot.bullet[k].x     = boss.x;
                    boss_shot.bullet[k].y     = boss.y;
                    boss_shot.bullet[k].knd   = 7;
                    boss_shot.bullet[k].angle = angle;
                    boss_shot.bullet[k].flag  = 1;
                    boss_shot.bullet[k].cnt      = 0;
                    boss_shot.bullet[k].spd      = 4-1.6/3*j;
                    se_flag[0]=1;
                }
                angle-=PI2/36;
            }
        }
    }
//    for(i=0;i<BOSS_BULLET_MAX;i++){
//        if(boss_shot.bullet[i].flag>0){
//
//        }
//    }
    if(t==TM003-1)
        cnum++;
}
の、cnum?-1:1やcnum?6:0の部分なのですが、例えばcnum>10?-1:1といったものならわかるのですが、cnum?-1:1という風になるとcnumが真かどうかを調べてると解釈しているのですが、[cnumが真かどうか]
とは具体的にどういう条件式、考え方になっているんでしょうか。staticで保持しているのが関係してるんでしょうか。
教えていただけないでしょうか。

box
記事: 2002
登録日時: 15年前

Re: 龍神録29章の条件演算子について

#2

投稿記事 by box » 13年前

cnum != 0 ? -1 : 1
のことです。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

non
記事: 1097
登録日時: 15年前

Re: 龍神録29章の条件演算子について

#3

投稿記事 by non » 13年前

例えば
if (1)
とすれば、これは常に成立する。また、
if(0) 
は、必ず不成立になります。
すなわち、( )の中の条件式は 0なら不成立(FALSE)、0以外なら成立(TRUE)と評価されます。
if(cnum)
cnumが0のときは不成立、0以外の時は成立になります。
non

naohiro19
記事: 256
登録日時: 15年前
住所: 愛知県

Re: 龍神録29章の条件演算子について

#4

投稿記事 by naohiro19 » 13年前

if文と同じです。

todo

Re: 龍神録29章の条件演算子について

#5

投稿記事 by todo » 13年前

nonさん、boxさん、よくわかりました。ご回答ありがとうございます!

閉鎖

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