弾幕名:サイレントセレナ
作製難易度:★ (1/10)

実行結果


第一回弾幕作製講座は「サイレントセレナ」です。

円形連続発射と、ランダムにゆっくり落ちてくる弾を組み合わせた簡単な弾幕なので、実装が楽です。

.base_angleに1ターンの最初に自機とボスとの角度を格納しておき、それを基準に円形発射をします。

プログラムの流れは注釈を見て下さい。


---- boss_shotH.cpp に以下を追加 ----

//サイレントセレナ
void boss_shot_bulletH001(){
#define TM001 60
    int i,k,t=boss_shot.cnt%TM001,t2=boss_shot.cnt;
    static int cnum;
    double angle;
    if(t2==0)//最初の初期化
        cnum=0;
    if(t==0){//1ターンの最初の初期化
        boss_shot.base_angle[0]=bossatan2();//自機とボスの角度
        if(cnum%4==3){//4ターンに1回移動
            move_boss_pos(40,30,FMX-40,120,60, 60);
        }
    }
        //1ターンの最初は自機狙い、半分からは自機狙いからずらす
    if(t==TM001/2-1)
        boss_shot.base_angle[0]+=PI2/20/2;
        //1ターンに10回円形発射の弾をうつ
    if(t%(TM001/10)==0){
        angle=bossatan2();//自機-ボスの成す角
        for(i=0;i<20;i++){//20個
            if((k=search_boss_shot())!=-1){
                boss_shot.bullet[k].col   = 4;
                boss_shot.bullet[k].x     = boss.x;
                boss_shot.bullet[k].y     = boss.y;
                boss_shot.bullet[k].knd   = 8;
                                //ベース角度から20個回転して発射
                boss_shot.bullet[k].angle = boss_shot.base_angle[0]+PI2/20*i;
                boss_shot.bullet[k].flag  = 1;
                boss_shot.bullet[k].cnt   = 0;
                boss_shot.bullet[k].spd   = 2.7;//スピード
                se_flag[0]=1;
            }
        }
    }
        //4カウントに1回下に落ちる弾を登録
    if(t%4==0){
        if((k=search_boss_shot())!=-1){
            boss_shot.bullet[k].col   = 0;
            boss_shot.bullet[k].x     = GetRand(FMX);
            boss_shot.bullet[k].y     = GetRand(200);
            boss_shot.bullet[k].knd   = 8;
            boss_shot.bullet[k].angle = PI/2;//真下の角度
            boss_shot.bullet[k].flag  = 1;
            boss_shot.bullet[k].cnt   = 0;
            boss_shot.bullet[k].spd   = 1+rang(0.5);
            se_flag[0]=1;
        }
    }
    if(t==TM001-1)
        cnum++;
}


変更されているfunc.hも確認しておいて下さい。



- Remical Soft -