番外篇第二章~与音乐共舞的弹幕

>>点此回到教程目录

这章简直要疯了。 (译者注:这一章简直高能!如果您能上niconico的话请务必看看本章弹幕的视频!) (搬运者注:去看了下,就是弹幕出现会配合BGM,比如几个鼓点的时候就炸几发弹幕出来,像放烟花一样)

首先请您看一下本章制作出来弹幕的视频。 请务必将音箱音量调高来听。

(niconico动画在这里)



采纳了“不妨把按照自己兴趣做出来的弹幕也开源大家看看如何”的建议,因此我试着在本次第43章中这样做了(译者注:后改名为番外篇第二章),不过代码看起来不是那么适合阅读就是了^^;。

这就是写好的弹幕函数(只有一个函数)。

呀~我可没说您一定要把它看完哦……

为了对别的文件不产生影响因此我自行定义了一些变量,因此请不要以此作为参考哦。(啥?)

— 编写新的文件 boss_shotElse.cpp,进行以下追加 —-

#include "../include/GV.h"

extern int search_boss_shot();
extern int search_lazer();
extern int search_child();
extern double bossatan2();
extern double bossatan3(int k,double x,double y);//指定坐标和子弹所成的角
extern double bossatan4(int k);//制定子弹和自机所成的角
extern int move_boss_pos(double x1,double y1,double x2,double y2,double dist, int t);
extern void input_phy_pos(double x,double y,int t);
extern void input_lphy(lazer_t *laz, int time, double angle);
extern int search_boss_shot_n(int from, int to);//返回指定的空编号

//曲子的节奏(rhythm)数据
int tm12[1000]={
    459,509,559,605,653,703,751,798,848,893,941,990,1038,1086,1134,1183,1231,1277,1325,1374,1420,1469,1520,
    1571,1620,1679,1738,1814,1837,1858,1878,1897,1915,1934,1955,1974,1996,2015,2037,2057,2076,2097,2117,2137,
    2157,2176,2198,2218,2239,2258,2278,2297,2318,2337,2358,2380,2400,2421,2440,2460,2481,2500,2520,2540,2559,
    2579,2599,2621,2640,2660,2680,2701,2721,2742,2762,2782,2802,2822,2842,2863,2884,2904,2924,2944,2964,2984,
    3005,3025,3045,3065,3085,3105,3124,3144,3165,3226,3246,3265,3286,3348,3368,3387,3408,3469,3490,3508,3528,
    3592,3611,3630,3650,3710,3730,3749,3770,3832,3852,3871,3893,3913,3933,3954,3973,3993,4014,4075,4096,4116,
    4136,4156,4174,4195,4215,4237,4258,4278,4298,4318,4337,4358,4378,4398,4418,4438,4458,4477,4498,4520,4540,
    4559,4580,4601,4622,4642,4662,4680,4701,4720,4740,4760,4780,4801,4822,4842,4863,4883,4903,4924,4944,4965,
    4985,5005,5024,5043,5064,5086,5106,5127,5150,5170,5188,5208,5227,5248,5267,5288,5308,5328,5404
};

//音乐的视觉效果用的数据
#define VMX 52
#define VMY 30
BYTE signal[10][VMX]={
    {2,3,4,5,6,5,4,3,2,3,4,3,2,4,6,5,4,3,2,3,4,5,6,5,4,7,10,7,4,4,4,6,8,6,4,3,2,5,8,7,6,4,2,4,6,7,8,6,4,6,8,8},
    {4,5,6,8,10,7,4,6,8,5,2,4,6,8,10,9,8,7,6,7,8,9,10,11,12,8,4,4,4,6,8,6,4,7,10,8,6,7,8,9,10,7,4,4,4,5,6,5,4,5,6,6,},
    {8,7,6,4,2,3,4,6,8,6,4,4,4,5,6,6,6,8,10,7,4,3,2,3,4,7,10,9,8,6,4,5,6,8,10,7,4,6,8,9,10,11,12,10,8,7,6,6,6,5,4,4,},
    {6,5,4,7,10,7,4,4,4,3,2,6,10,7,4,3,2,4,6,5,4,5,6,8,10,7,4,3,2,3,4,3,2,6,10,6,2,3,4,3,2,3,4,3,2,5,8,5,2,4,6,6,},
    {2,3,4,7,10,9,8,5,2,3,4,3,2,3,4,6,8,9,10,6,2,4,6,8,10,8,6,5,4,5,6,5,4,7,10,7,4,3,2,2,2,5,8,7,6,5,4,3,2,3,4,4,},

    {2,3,4,5,6,8,10,11,12,15,18,13,8,7,6,7,8,11,14,18,22,20,18,20,22,21,20,18,16,17,18,20,22,17,12,15,18,16,14,15,16,13,10,8,6,5,4,6,8,5,2,2,},
    {2,6,10,7,4,7,10,18,26,18,10,9,8,7,6,9,12,17,22,22,22,16,10,9,8,6,4,7,10,12,14,19,24,19,14,13,12,9,6,8,10,14,18,22,26,23,20,16,12,8,4,4,},
    {4,7,10,14,18,13,8,14,20,18,16,17,18,14,10,15,20,14,8,8,8,7,6,7,8,9,10,13,16,15,14,12,10,9,8,9,10,14,18,12,6,8,10,9,8,13,18,12,6,5,4,4,},
    {6,8,10,11,12,16,20,17,14,11,8,6,4,5,6,8,10,14,18,14,10,14,18,14,10,12,14,18,22,19,16,13,10,8,6,7,8,9,10,8,6,7,8,14,20,17,14,15,16,15,14,14,},
    {2,5,8,12,16,10,4,5,6,6,6,11,16,11,6,11,16,10,4,7,10,14,18,17,16,13,10,8,6,8,10,8,6,6,6,7,8,15,22,15,8,7,6,6,6,5,4,9,14,9,4,4,},
};
//视觉效果用的结构体
typedef struct{
    int cnt;
    BYTE num[VMX];
}visual_effect_t;
visual_effect_t visual_effect;

//视觉效果的正方形的边长
#define VWIDE 8

void boss_shot_bulletElse(){
    int i,j,k,s,n,t=boss_shot.cnt,t2=0;
    static int num,sound_handle,base_col;
    static double lzv,base_angle;
    if(t==0){
        //如果启动注释了的这三行的话,就从num所设定音乐的地方开始
        //num是tm12中设定的音乐节奏的数据,一直到188。
//        num=20;
//        t=t2=tm12[num];
        boss.endtime=tm12[188]+800;
        lzv=0;
        base_col=0;
        boss.graph_flag=1;
        sound_handle=LoadSoundMem("../dat/music/Rage.wav");
//        SetSoundCurrentTime( (int)(t2*16.666666-100) , sound_handle);
        PlaySoundMem(sound_handle, DX_PLAYTYPE_BACK, FALSE);
        boss_shot.cnt=t2;
        base_angle=-PI/2;
        memset(&visual_effect,0,sizeof(visual_effect_t));
    }
    if(t==tm12[num]){//计算节奏
        num++;
    }
    //取得与音乐同步的处理
    if(t%60==59 && t<tm12[188]){
        int gettm=GetSoundCurrentTime(sound_handle);
        int nowflame=(int)(t*16.6666);
//        printfDx("%d\n",gettm-nowflame);
        if(abs(gettm-nowflame)>100){
            StopSoundMem(sound_handle);
            SetSoundCurrentTime( (int)(t*16.666666) , sound_handle);
            PlaySoundMem(sound_handle, DX_PLAYTYPE_BACK,FALSE);
//            printfDx("调整后%d\n",GetSoundCurrentTime(sound_handle));
        }
    }
//最初的激光乱射~
    if(t<180){
        for(i=0;i<2;i++){
            if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                boss_shot.bullet[k].col   = 0;//子弹的颜色
                boss_shot.bullet[k].x     = FMX/2;//坐标
                boss_shot.bullet[k].y     = 0;
                boss_shot.bullet[k].knd   = 2;//子弹的种类
                boss_shot.bullet[k].angle = PI/120*t;//角度
                boss_shot.bullet[k].flag  = 1;
                boss_shot.bullet[k].cnt   = 0;
                boss_shot.bullet[k].spd   = 1.5;//速度
                boss_shot.bullet[k].eff   = 1;
                boss_shot.bullet[k].state = 0;
            }
            if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                boss_shot.bullet[k].col   = 4;//子弹的颜色
                boss_shot.bullet[k].x     = FMX/2;//坐标
                boss_shot.bullet[k].y     = 0;
                boss_shot.bullet[k].knd   = 2;//子弹的种类
                boss_shot.bullet[k].angle = (PI+PI/240)-PI/120*t;//角度
                boss_shot.bullet[k].flag  = 1;
                boss_shot.bullet[k].cnt   = 0;
                boss_shot.bullet[k].spd   = 2;//速度
                boss_shot.bullet[k].eff   = 1;
                boss_shot.bullet[k].state = 0;
            }
        }
    }
    //接下来是蓝色的蝴蝶从上面飘下来
    if(t==240){
        for(j=0;j<15;j++){
            for(i=0;i<30;i++){
                if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                    boss_shot.bullet[k].col   = 1;//子弹的颜色
                    boss_shot.bullet[k].x     = FMX/2;//坐标
                    boss_shot.bullet[k].y     = 0;
                    boss_shot.bullet[k].knd   = 11;//子弹的种类
                    boss_shot.bullet[k].angle = PI/30*i;//角度
                    boss_shot.bullet[k].flag  = 1;
                    boss_shot.bullet[k].cnt   = 0;
                    boss_shot.bullet[k].spd   = 3-0.2*j;//速度
                    boss_shot.bullet[k].eff   = 1;
                    boss_shot.bullet[k].state = 0;
                }
            }
        }
    }
    //闪屏
    if(t==tm12[0]){
        flash.flag=1;
        flash.knd=1;//闪!
        flash.to_cnt=90;//在90次计数中变化
        flash.cnt=0;
    }
    //和音乐一起涌上来的激光
    if(t==tm12[0]+1){
        {
            k=0;
            lazer[k].col      = 0;//子弹的颜色
            lazer[k].knd      = 0;//子弹的种类
            lazer[k].angle    = PI;//角度
            lazer[k].startpt.x= FMX;//坐标
            lazer[k].startpt.y= 0;
            lazer[k].flag     = 1;
            lazer[k].cnt      = 0;
            lazer[k].haba     = 20;//幅度
            lazer[k].state    = 0;//状态
            lazer[k].length   = FMX+60;//激光的长度
            lazer[k].hantei      = 0.6;
            lazer[k].lphy.conv_flag=0;//旋转flag
            lazer[k].lphy.conv_base_x=0;//旋转基准位置
            lazer[k].lphy.conv_base_y=0;
            lazer[k].lphy.conv_x=0;//旋转元的位置
            lazer[k].lphy.conv_y=0;
            input_lphy(&lazer[k],0,0);//代入
        }
        {
            k=1;
            lazer[k].col      = 0;//子弹的颜色
            lazer[k].knd      = 0;//子弹的种类
            lazer[k].angle    = 0;//角度
            lazer[k].startpt.x= 0;//坐标
            lazer[k].startpt.y= FMY;
            lazer[k].flag     = 1;
            lazer[k].cnt      = 0;
            lazer[k].haba     = 20;//幅度
            lazer[k].state    = 0;//状态
            lazer[k].length   = FMX+60;//激光的长度
            lazer[k].hantei      = 0.6;
            lazer[k].lphy.conv_flag=0;//旋转flag
            lazer[k].lphy.conv_base_x=0;//旋转基准位置
            lazer[k].lphy.conv_base_y=0;
            lazer[k].lphy.conv_x=0;//旋转元的位置
            lazer[k].lphy.conv_y=0;
            input_lphy(&lazer[k],0,0);//代入
        }
    }
    //对角线方向飞散
    if(tm12[1]-15<=t && t<=tm12[7]){
        for(i=1;i<=8;i++){
            if(t==tm12[i]){
                for(s=0;s<2;s++){
                    for(j=0;j<3;j++){
                        if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                            boss_shot.bullet[k].col   = 2;//子弹的颜色
                            boss_shot.bullet[k].x     = boss.x;//坐标
                            boss_shot.bullet[k].y     = boss.y;
                            boss_shot.bullet[k].knd   = 0;//子弹的种类
                            boss_shot.bullet[k].angle = PI*0.75+rang(PI/10)+PI*s+PI/2*(num%2);//角度
                            boss_shot.bullet[k].flag  = 1;
                            boss_shot.bullet[k].cnt   = 0;
                            boss_shot.bullet[k].spd   = 6-0.7*j;//速度
                            boss_shot.bullet[k].eff   = 1;
                            boss_shot.bullet[k].state = 0;
                        }
                    }
                    for(j=0;j<5;j++){
                        if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                            boss_shot.bullet[k].col   = 1;//子弹的颜色
                            boss_shot.bullet[k].x     = boss.x;//坐标
                            boss_shot.bullet[k].y     = boss.y;
                            boss_shot.bullet[k].knd   = 1;//子弹的种类
                            boss_shot.bullet[k].angle = PI*0.75+rang(PI/8)+PI*s+PI/2*(num%2);//角度
                            boss_shot.bullet[k].flag  = 1;
                            boss_shot.bullet[k].cnt   = 0;
                            boss_shot.bullet[k].spd   = 5.5-0.6*j;//速度
                            boss_shot.bullet[k].eff   = 1;
                            boss_shot.bullet[k].state = 0;
                        }
                    }
                    for(j=0;j<7;j++){
                        if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                            boss_shot.bullet[k].col   = 0;//子弹的颜色
                            boss_shot.bullet[k].x     = boss.x;//坐标
                            boss_shot.bullet[k].y     = boss.y;
                            boss_shot.bullet[k].knd   = 11;//子弹的种类
                            boss_shot.bullet[k].angle = PI*0.75+rang(PI/6)+PI*s+PI/2*(num%2);//角度
                            boss_shot.bullet[k].flag  = 1;
                            boss_shot.bullet[k].cnt   = 0;
                            boss_shot.bullet[k].spd   = 5-0.6*j;//速度
                            boss_shot.bullet[k].eff   = 1;
                            boss_shot.bullet[k].state = 0;
                        }
                    }
                    for(j=0;j<15;j++){
                        if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                            boss_shot.bullet[k].col   = 0;//子弹的颜色
                            boss_shot.bullet[k].x     = boss.x;//坐标
                            boss_shot.bullet[k].y     = boss.y;
                            boss_shot.bullet[k].knd   = 10;//子弹的种类
                            boss_shot.bullet[k].angle = PI*0.75+rang(PI/4)+PI*s+PI/2*(num%2);//角度
                            boss_shot.bullet[k].flag  = 1;
                            boss_shot.bullet[k].cnt   = 0;
                            boss_shot.bullet[k].spd   = 4-0.2*j;//速度
                            boss_shot.bullet[k].eff   = 1;
                            boss_shot.bullet[k].state = 0;
                        }
                    }
                }
            }
        }
        for(i=1;i<=8;i++){
            if(tm12[i]-15<=t && t<=tm12[i]){
                lzv+=0.2;
                lazer[0].startpt.y+=lzv;
                lazer[1].startpt.y-=lzv;
            }
            if(t==tm12[i])
                lzv=0;
        }
    }
    //闪屏!
    if(t==tm12[7]){
        flash.flag=1;
        flash.knd=1;//闪屏!
        flash.to_cnt=90;//在90次计数中进行
        flash.cnt=0;
        lazer[0].flag=0;
        lazer[1].flag=0;
    }
    //一大波激光
    if(t==tm12[7]){
        for(i=0;i<6;i++){
            k=i;
            lazer[k].col      = 1;//子弹的颜色
            lazer[k].knd      = 0;//子弹的种类
            lazer[k].angle    = PI/2+PI*i;//角度
            lazer[k].startpt.x= 160*i+40;//坐标
            lazer[k].startpt.y= FMY*(i%2);
            lazer[k].flag     = 1;
            lazer[k].cnt      = 0;
            lazer[k].haba     = 2;//幅度
            lazer[k].state    = 0;//状态
            lazer[k].length   = FMY+60;//激光的长度
            lazer[k].hantei      = 0;
            lazer[k].lphy.conv_flag=0;//旋转flag
            lazer[k].lphy.conv_base_x=0;//旋转基准位置
            lazer[k].lphy.conv_base_y=0;
            lazer[k].lphy.conv_x=0;//旋转元的位置
            lazer[k].lphy.conv_y=0;
            input_lphy(&lazer[k],0,0);//代入
        }
    }
    if(tm12[8]-15<=t && t<=tm12[14]){
        for(i=8;i<=14;i++){
            if(tm12[i]-15<=t && t<=tm12[i]){
                lzv+=0.2;
                for(j=0;j<6;j++){
                    lazer[j].haba+=0.7;
                    lazer[j].startpt.x-=lzv;
                    lazer[j].hantei      = 0.6;
                }
            }
            if(t==tm12[i])
                lzv=0;
        }
    }
    //对角线方向飞散
    if(tm12[8]-15<=t && t<=tm12[14]){
        for(i=8;i<=14;i++){
            if(t==tm12[i]){
                for(s=0;s<2;s++){
                    for(j=0;j<3;j++){
                        if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                            boss_shot.bullet[k].col   = 1;//子弹的颜色
                            boss_shot.bullet[k].x     = boss.x;//坐标
                            boss_shot.bullet[k].y     = boss.y;
                            boss_shot.bullet[k].knd   = 0;//子弹的种类
                            boss_shot.bullet[k].angle = PI*0.75+rang(PI/10)+PI*s+PI/2*(num%2);//角度
                            boss_shot.bullet[k].flag  = 1;
                            boss_shot.bullet[k].cnt   = 0;
                            boss_shot.bullet[k].spd   = 5-0.6*j;//速度
                            boss_shot.bullet[k].eff   = 1;
                            boss_shot.bullet[k].state = 0;
                        }
                    }
                    for(j=0;j<5;j++){
                        if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                            boss_shot.bullet[k].col   = 0;//子弹的颜色
                            boss_shot.bullet[k].x     = boss.x;//坐标
                            boss_shot.bullet[k].y     = boss.y;
                            boss_shot.bullet[k].knd   = 1;//子弹的种类
                            boss_shot.bullet[k].angle = PI*0.75+rang(PI/8)+PI*s+PI/2*(num%2);//角度
                            boss_shot.bullet[k].flag  = 1;
                            boss_shot.bullet[k].cnt   = 0;
                            boss_shot.bullet[k].spd   = 4.5-0.5*j;//速度
                            boss_shot.bullet[k].eff   = 1;
                            boss_shot.bullet[k].state = 0;
                        }
                    }
                    for(j=0;j<7;j++){
                        if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                            boss_shot.bullet[k].col   = 3;//子弹的颜色
                            boss_shot.bullet[k].x     = boss.x;//坐标
                            boss_shot.bullet[k].y     = boss.y;
                            boss_shot.bullet[k].knd   = 11;//子弹的种类
                            boss_shot.bullet[k].angle = PI*0.75+rang(PI/6)+PI*s+PI/2*(num%2);//角度
                            boss_shot.bullet[k].flag  = 1;
                            boss_shot.bullet[k].cnt   = 0;
                            boss_shot.bullet[k].spd   = 4-0.5*j;//速度
                            boss_shot.bullet[k].eff   = 1;
                            boss_shot.bullet[k].state = 0;
                        }
                    }
                    for(j=0;j<15;j++){
                        if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                            boss_shot.bullet[k].col   = 1;//子弹的颜色
                            boss_shot.bullet[k].x     = boss.x;//坐标
                            boss_shot.bullet[k].y     = boss.y;
                            boss_shot.bullet[k].knd   = 10;//子弹的种类
                            boss_shot.bullet[k].angle = PI*0.75+rang(PI/4)+PI*s+PI/2*(num%2);//角度
                            boss_shot.bullet[k].flag  = 1;
                            boss_shot.bullet[k].cnt   = 0;
                            boss_shot.bullet[k].spd   = 3-0.1*j;//速度
                            boss_shot.bullet[k].eff   = 1;
                            boss_shot.bullet[k].state = 0;
                        }
                    }
                }
            }
        }
    }
    if(t==tm12[14]){
        flash.flag=1;
        flash.knd=1;//闪屏!
        flash.to_cnt=90;//在90次计数中变化
        flash.cnt=0;
        for(i=0;i<6;i++)
            lazer[i].flag=0;
    }
    //激光
    if(t==tm12[14]){
        for(i=0;i<6;i++){
            k=i;
            lazer[k].col      = i%2;//子弹的颜色
            lazer[k].knd      = 0;//子弹的种类
            lazer[k].angle    = PI*i;//角度
            lazer[k].startpt.x= FMX*(i%2);//坐标
            lazer[k].startpt.y= 160*i;
            lazer[k].flag     = 1;
            lazer[k].cnt      = 0;
            lazer[k].haba     = 2;//幅度
            lazer[k].state    = 0;//状态
            lazer[k].length   = FMX+60;//激光的长度
            lazer[k].hantei      = 0;
            lazer[k].lphy.conv_flag=0;//旋转flag
            lazer[k].lphy.conv_base_x=0;//旋转基准位置
            lazer[k].lphy.conv_base_y=0;
            lazer[k].lphy.conv_x=0;//旋转元的位置
            lazer[k].lphy.conv_y=0;
            input_lphy(&lazer[k],0,0);//代入
        }
    }
    if(tm12[15]-15<=t && t<=tm12[20]){
        for(i=14;i<=20;i++){
            if(tm12[i]-15<=t && t<=tm12[i]){
                lzv+=0.2;
                for(j=0;j<6;j++){
                    lazer[j].haba+=0.4;
                    lazer[j].startpt.y-=lzv;
                    lazer[j].hantei    = 0.6;
                }
            }
            if(t==tm12[i])
                lzv=0;
        }
    }
    //对角线方向飞散
    if(tm12[15]-15<=t && t<=tm12[20]){
        for(i=14;i<=20;i++){
            if(t==tm12[i]){
                for(s=0;s<2;s++){
                    for(j=0;j<1;j++){
                        if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                            boss_shot.bullet[k].col   = (num+1)%2;//子弹的颜色
                            boss_shot.bullet[k].x     = FMX*((s+num)%2);//坐标
                            boss_shot.bullet[k].y     = FMY*(s);
                            boss_shot.bullet[k].knd   = 0;//子弹的种类
                            boss_shot.bullet[k].angle = bossatan4(k);//角度
                            boss_shot.bullet[k].flag  = 1;
                            boss_shot.bullet[k].cnt   = 0;
                            boss_shot.bullet[k].spd   = 4-0.6*j;//速度
                            boss_shot.bullet[k].eff   = 1;
                            boss_shot.bullet[k].state = 0;
                        }
                    }
                    for(j=0;j<3;j++){
                        if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                            boss_shot.bullet[k].col   = num%2;//子弹的颜色
                            boss_shot.bullet[k].x     = FMX*((s+num)%2);//坐标
                            boss_shot.bullet[k].y     = FMY*(s);
                            boss_shot.bullet[k].knd   = 1;//子弹的种类
                            boss_shot.bullet[k].angle = bossatan4(k)+rang(PI/28);//角度
                            boss_shot.bullet[k].flag  = 1;
                            boss_shot.bullet[k].cnt   = 0;
                            boss_shot.bullet[k].spd   = 3.5-0.6*j;//速度
                            boss_shot.bullet[k].eff   = 1;
                            boss_shot.bullet[k].state = 0;
                        }
                    }
                    for(j=0;j<5;j++){
                        if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                            boss_shot.bullet[k].col   = 3*(num%2);//子弹的颜色
                            boss_shot.bullet[k].x     = FMX*((s+num)%2);//坐标
                            boss_shot.bullet[k].y     = FMY*(s);
                            boss_shot.bullet[k].knd   = 11;//子弹的种类
                            boss_shot.bullet[k].angle = bossatan4(k)+rang(PI/26);//角度
                            boss_shot.bullet[k].flag  = 1;
                            boss_shot.bullet[k].cnt   = 0;
                            boss_shot.bullet[k].spd   = 3-0.5*j;//速度
                            boss_shot.bullet[k].eff   = 1;
                            boss_shot.bullet[k].state = 0;
                        }
                    }
                    for(j=0;j<10;j++){
                        if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                            boss_shot.bullet[k].col   = num%2;//子弹的颜色
                            boss_shot.bullet[k].x     = FMX*((s+num)%2);//坐标
                            boss_shot.bullet[k].y     = FMY*(s);
                            boss_shot.bullet[k].knd   = 10;//子弹的种类
                            boss_shot.bullet[k].angle = bossatan4(k)+rang(PI/20);//角度
                            boss_shot.bullet[k].flag  = 1;
                            boss_shot.bullet[k].cnt   = 0;
                            boss_shot.bullet[k].spd   = 3-0.1*j;//速度
                            boss_shot.bullet[k].eff   = 1;
                            boss_shot.bullet[k].state = 0;
                        }
                    }
                }
            }
        }
    }
    if(t==tm12[20]){
        flash.flag=1;
        flash.knd=1;//闪屏!
        flash.to_cnt=90;//
        flash.cnt=0;
        for(i=0;i<6;i++)
            lazer[i].flag=0;
    }
    //激光乱射~
    if(tm12[21]-20<=t && t<=tm12[21]+30 && t%2){
        for(i=0;i<2;i++){
            if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                boss_shot.bullet[k].col   = 0;//子弹的颜色
                boss_shot.bullet[k].x     = FMX;//坐标
                boss_shot.bullet[k].y     = 0;
                boss_shot.bullet[k].knd   = 2;//子弹的种类
                boss_shot.bullet[k].angle = PI-PI/2/50*(t-(tm12[21]-20));//角度
                boss_shot.bullet[k].flag  = 1;
                boss_shot.bullet[k].cnt   = 0;
                boss_shot.bullet[k].spd   = 3;//速度
                boss_shot.bullet[k].eff   = 1;
                boss_shot.bullet[k].state = 0;
            }
        }
    }
    if(tm12[23]-20<=t && t<=tm12[23]+30 && t%2){
        for(i=0;i<2;i++){
            if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                boss_shot.bullet[k].col   = 4;//子弹的颜色
                boss_shot.bullet[k].x     = 0;//坐标
                boss_shot.bullet[k].y     = FMY;
                boss_shot.bullet[k].knd   = 2;//子弹的种类
                boss_shot.bullet[k].angle = -PI/2/50*(t-(tm12[23]-20));//角度
                boss_shot.bullet[k].flag  = 1;
                boss_shot.bullet[k].cnt   = 0;
                boss_shot.bullet[k].spd   = 3;//速度
                boss_shot.bullet[k].eff   = 1;
                boss_shot.bullet[k].state = 0;
            }
        }
    }
    //从四面八方发射
    double x4[4]={0,FMX,FMX,0};
    double y4[4]={0,0,FMY,FMY};
    if(t==tm12[25]){
        for(j=0;j<4;j++){
            for(i=0;i<90;i++){
                if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                    boss_shot.bullet[k].col   = 1;//子弹的颜色
                    boss_shot.bullet[k].x     = x4[j];//坐标
                    boss_shot.bullet[k].y     = y4[j];
                    boss_shot.bullet[k].knd   = 2;//子弹的种类
                    boss_shot.bullet[k].angle = PI/2*j+PI/2/90*i;//角度
                    boss_shot.bullet[k].flag  = 1;
                    boss_shot.bullet[k].cnt   = 0;
                    boss_shot.bullet[k].spd   = 3;//速度
                    boss_shot.bullet[k].eff   = 1;
                    boss_shot.bullet[k].state = 1;
                }
            }
        }
    }
    if(t==tm12[27]){
        flash.flag=1;
        flash.knd=1;//闪屏!
        flash.to_cnt=90;//在90次计数中变化
        flash.cnt=0;
        for(i=0;i<6;i++)
            lazer[i].flag=0;
    }
    //阶段。视觉特效
    if(t>=tm12[27] && t<tm12[180] && (t-tm12[28])%20==0){
        visual_effect.cnt=0;
        int r=GetRand(4);
        if(num<100 && (num-27)%16==0)
            r+=5;
        for(j=0;j<VMX;j++){
            n=signal[r][j]*0.7-visual_effect.num[j];
            for(i=0;i<n;i++){
                k=VMY*j+visual_effect.num[j]+i;
                boss_shot.bullet[k].col   = 0;//子弹的颜色
                boss_shot.bullet[k].x     = k/VMY*VWIDE;//坐标
                boss_shot.bullet[k].y     = (k%VMY)*VWIDE;
                boss_shot.bullet[k].knd   = 12;//子弹的种类
                boss_shot.bullet[k].angle = 0;//角度
                boss_shot.bullet[k].flag  = 1;
                boss_shot.bullet[k].cnt   = 0;
                boss_shot.bullet[k].eff  = 1;
                boss_shot.bullet[k].state = 0;//状態
                boss_shot.bullet[k].spd   = 0;//速度
            }
            if(n>0)
                visual_effect.num[j]+=n;
        }
    }
    visual_effect.cnt++;
    for(j=0;j<VMX;j++){
        if(visual_effect.cnt>=5 && GetRand(3)==0){
            if(visual_effect.num[j]==0)continue;
            if(visual_effect.num[j]<=2 && visual_effect.cnt%2==0)continue;
            if(visual_effect.num[j]<=4 && visual_effect.cnt%4==0)continue;
            if(visual_effect.num[j]<=6 && visual_effect.cnt%6==0)continue;
            k=VMY*j+visual_effect.num[j];
            boss_shot.bullet[k].flag=0;
            visual_effect.num[j]--;
        }
    }
    //激光
    if(t>=tm12[26] && t<tm12[90]){
        for(i=26;i<=90;i++){
            if(t==tm12[i] && (num-26+6)%8==0 && num<=57 ||
                t==tm12[i] && (num-58+2)%4==0 && num>=58 && num<=90 ){
//                double angle=atan2(ch.y,ch.x-FMX/2);
                if(num<85){
                    double angle=rang(PI);
                    for(j=0;j<15;j++){
                        for(s=0;s<40;s++){
                            if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                                boss_shot.bullet[k].col   = 0;//子弹的颜色
                                boss_shot.bullet[k].x     = FMX/2;//坐标
                                boss_shot.bullet[k].y     = 0;
                                boss_shot.bullet[k].knd   = 11;//子弹的种类
                                boss_shot.bullet[k].angle = angle+PI2/40*s;//角度
                                boss_shot.bullet[k].flag  = 1;
                                boss_shot.bullet[k].cnt   = 0;
                                boss_shot.bullet[k].spd   = 5-3.0/15.0*j;//速度
                                boss_shot.bullet[k].eff   = 1;
                                boss_shot.bullet[k].state = 0;
                            }
                        }
                    }
                }
                for(j=0;j<11;j++){
                    if((k=search_lazer())!=-1){
                        lazer[k].col      = 0;//子弹的颜色
                        lazer[k].knd      = 0;//子弹的种类
                        lazer[k].angle    = -PI/2+PI/10*j+rang(PI/20);//角度
                        lazer[k].startpt.x= 0;//坐标
                        lazer[k].startpt.y= FMY/2+rang(50);
                        lazer[k].flag     = 1;
                        lazer[k].cnt      = 0;
                        lazer[k].haba     = 1;//幅度
                        lazer[k].state    = 1;//状态
                        if(num>=58)
                            lazer[k].state=2;
                        lazer[k].length   = FMX*1.2;//激光的长度
                        lazer[k].hantei      = 0;
                        lazer[k].lphy.conv_flag=0;//旋转flag
                        lazer[k].lphy.conv_base_x=0;//旋转基准位置
                        lazer[k].lphy.conv_base_y=0;
                        lazer[k].lphy.conv_x=0;//旋转元的位置
                        lazer[k].lphy.conv_y=0;
                        input_lphy(&lazer[k],0,0);//代入
                    }
                }
                for(j=11;j<22;j++){
                    if((k=search_lazer())!=-1){
                        lazer[k].col      = 1;//子弹的颜色
                        lazer[k].knd      = 0;//子弹的种类
                        lazer[k].angle    = PI+PI/2+PI/10*j+rang(PI/20);//角度
                        lazer[k].startpt.x= FMX;//坐标
                        lazer[k].startpt.y= FMY/2+rang(50);
                        lazer[k].flag     = 1;
                        lazer[k].cnt      = 0;
                        lazer[k].haba     = 1;//幅度
                        lazer[k].state    = 1;//状态
                        if(num>=58)
                            lazer[k].state=2;
                        lazer[k].length   = FMX*1.2;//激光的长度
                        lazer[k].hantei      = 0;
                        lazer[k].lphy.conv_flag=0;//旋转flag
                        lazer[k].lphy.conv_base_x=0;//旋转基准位置
                        lazer[k].lphy.conv_base_y=0;
                        lazer[k].lphy.conv_x=0;//旋转元的位置
                        lazer[k].lphy.conv_y=0;
                        input_lphy(&lazer[k],0,0);//代入
                    }
                }
            }
        }
    }
    //从91开始哒~哒~哒~哒~↑♪
    int st,ed;
    st=91; ed=94;
    if(tm12[st]<=t && t<=tm12[ed]){
        for(i=st;i<=ed;i++){
            if(tm12[i]==t){
                for(s=0;s<3;s++){
                    int setx[3]={0,-30,30};
                    if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                        boss_shot.bullet[k].col   = 0;//子弹的颜色
                        boss_shot.bullet[k].x     = setx[s]+50+(FMX-100)/3*(num-1-st);//坐标
                        boss_shot.bullet[k].y     = 0;
                        boss_shot.bullet[k].knd   = 0;//子弹的种类
                        boss_shot.bullet[k].angle = PI/2;//角度
                        boss_shot.bullet[k].flag  = 1;
                        boss_shot.bullet[k].cnt   = 0;
                        boss_shot.bullet[k].spd   = 6-s;//速度
                        boss_shot.bullet[k].eff   = 0;
                        boss_shot.bullet[k].state = 0;
                    }
                }
                for(s=0;s<6;s++){
                    if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                        boss_shot.bullet[k].col   = 1;//子弹的颜色
                        boss_shot.bullet[k].x     = rang(30)+50+(FMX-100)/3*(num-1-st);//坐标
                        boss_shot.bullet[k].y     = 0;
                        boss_shot.bullet[k].knd   = 1;//子弹的种类
                        boss_shot.bullet[k].angle = PI/2;//角度
                        boss_shot.bullet[k].flag  = 1;
                        boss_shot.bullet[k].cnt   = 0;
                        boss_shot.bullet[k].spd   = 5.5-3.0/6*s;//速度
                        boss_shot.bullet[k].eff   = 0;
                        boss_shot.bullet[k].state = 0;
                    }
                }
                for(s=0;s<10;s++){
                    if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                        boss_shot.bullet[k].col   = 0;//子弹的颜色
                        boss_shot.bullet[k].x     = rang(20)+50+(FMX-100)/3*(num-1-st);//坐标
                        boss_shot.bullet[k].y     = 0;
                        boss_shot.bullet[k].knd   = 10;//子弹的种类
                        boss_shot.bullet[k].angle = PI/2;//角度
                        boss_shot.bullet[k].flag  = 1;
                        boss_shot.bullet[k].cnt   = 0;
                        boss_shot.bullet[k].spd   = 5.5-4.0/10*s;//速度
                        boss_shot.bullet[k].eff   = 0;
                        boss_shot.bullet[k].state = 0;
                    }
                }
            }
        }
    }
    //哒~哒~哒~哒~↑♪第二次
    st=95; ed=98;
    if(tm12[st]<=t && t<=tm12[ed]){
        for(i=st;i<=ed;i++){
            if(tm12[i]==t){
                for(s=0;s<3;s++){
                    int setx[3]={0,-30,30};
                    if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                        boss_shot.bullet[k].col   = 1;//子弹的颜色
                        boss_shot.bullet[k].x     = setx[s]+FMX-50-(FMX-100)/3*(num-1-st);//坐标
                        boss_shot.bullet[k].y     = 0;
                        boss_shot.bullet[k].knd   = 0;//子弹的种类
                        boss_shot.bullet[k].angle = PI/2;//角度
                        boss_shot.bullet[k].flag  = 1;
                        boss_shot.bullet[k].cnt   = 0;
                        boss_shot.bullet[k].spd   = 6-s;//速度
                        boss_shot.bullet[k].eff   = 0;
                        boss_shot.bullet[k].state = 0;
                    }
                }
                for(s=0;s<6;s++){
                    if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                        boss_shot.bullet[k].col   = 0;//子弹的颜色
                        boss_shot.bullet[k].x     = rang(30)+FMX-50-(FMX-100)/3*(num-1-st);//坐标
                        boss_shot.bullet[k].y     = 0;
                        boss_shot.bullet[k].knd   = 1;//子弹的种类
                        boss_shot.bullet[k].angle = PI/2;//角度
                        boss_shot.bullet[k].flag  = 1;
                        boss_shot.bullet[k].cnt   = 0;
                        boss_shot.bullet[k].spd   = 5.5-3.0/6*s;//速度
                        boss_shot.bullet[k].eff   = 0;
                        boss_shot.bullet[k].state = 0;
                    }
                }
                for(s=0;s<10;s++){
                    if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                        boss_shot.bullet[k].col   = 1;//子弹的颜色
                        boss_shot.bullet[k].x     = rang(20)+FMX-50-(FMX-100)/3*(num-1-st);//坐标
                        boss_shot.bullet[k].y     = 0;
                        boss_shot.bullet[k].knd   = 10;//子弹的种类
                        boss_shot.bullet[k].angle = PI/2;//角度
                        boss_shot.bullet[k].flag  = 1;
                        boss_shot.bullet[k].cnt   = 0;
                        boss_shot.bullet[k].spd   = 5.5-4.0/10*s;//速度
                        boss_shot.bullet[k].eff   = 0;
                        boss_shot.bullet[k].state = 0;
                    }
                }
            }
        }
    }
    //斜方向哒~哒~哒~哒~↑♪
    st=99; ed=102;
    if(tm12[st]<=t && t<=tm12[ed]){
        for(i=st;i<=ed;i++){
            if(tm12[i]==t){
                for(s=0;s<3;s++){
                    double setx[3]={0,-PI/20,PI/20};
                    if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                        boss_shot.bullet[k].col   = 0;//子弹的颜色
                        boss_shot.bullet[k].x     = 0;//坐标
                        boss_shot.bullet[k].y     = 0;
                        boss_shot.bullet[k].knd   = 0;//子弹的种类
                        boss_shot.bullet[k].angle = setx[s]+PI/2-(PI/2-PI/10)/3*(num-1-st);//角度
                        boss_shot.bullet[k].flag  = 1;
                        boss_shot.bullet[k].cnt   = 0;
                        boss_shot.bullet[k].spd   = 6-s;//速度
                        boss_shot.bullet[k].eff   = 0;
                        boss_shot.bullet[k].state = 0;
                    }
                }
                for(s=0;s<6;s++){
                    if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                        boss_shot.bullet[k].col   = 1;//子弹的颜色
                        boss_shot.bullet[k].x     = 0;//坐标
                        boss_shot.bullet[k].y     = 0;
                        boss_shot.bullet[k].knd   = 1;//子弹的种类
                        boss_shot.bullet[k].angle = PI/2-(PI/2-PI/10)/3*(num-1-st)+rang(PI/20);//角度
                        boss_shot.bullet[k].flag  = 1;
                        boss_shot.bullet[k].cnt   = 0;
                        boss_shot.bullet[k].spd   = 5.5-3.0/6*s;//速度
                        boss_shot.bullet[k].eff   = 0;
                        boss_shot.bullet[k].state = 0;
                    }
                }
                for(s=0;s<10;s++){
                    if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                        boss_shot.bullet[k].col   = 0;//子弹的颜色
                        boss_shot.bullet[k].x     = 0;//坐标
                        boss_shot.bullet[k].y     = 0;
                        boss_shot.bullet[k].knd   = 10;//子弹的种类
                        boss_shot.bullet[k].angle = PI/2-(PI/2-PI/10)/3*(num-1-st)+rang(PI/30);//角度
                        boss_shot.bullet[k].flag  = 1;
                        boss_shot.bullet[k].cnt   = 0;
                        boss_shot.bullet[k].spd   = 5.5-4.0/10*s;//速度
                        boss_shot.bullet[k].eff   = 0;
                        boss_shot.bullet[k].state = 0;
                    }
                }
            }
        }
    }
    st=103; ed=106;
    if(tm12[st]<=t && t<=tm12[ed]){
        for(i=st;i<=ed;i++){
            if(tm12[i]==t){
                for(s=0;s<3;s++){
                    double setx[3]={0,-PI/20,PI/20};
                    if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                        boss_shot.bullet[k].col   = 1;//子弹的颜色
                        boss_shot.bullet[k].x     = FMX;//坐标
                        boss_shot.bullet[k].y     = 0;
                        boss_shot.bullet[k].knd   = 0;//子弹的种类
                        boss_shot.bullet[k].angle = setx[s]+PI/2+(PI/2-PI/10)/3*(num-1-st);//角度
                        boss_shot.bullet[k].flag  = 1;
                        boss_shot.bullet[k].cnt   = 0;
                        boss_shot.bullet[k].spd   = 6-s;//速度
                        boss_shot.bullet[k].eff   = 0;
                        boss_shot.bullet[k].state = 0;
                    }
                }
                for(s=0;s<6;s++){
                    if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                        boss_shot.bullet[k].col   = 0;//子弹的颜色
                        boss_shot.bullet[k].x     = FMX;//坐标
                        boss_shot.bullet[k].y     = 0;
                        boss_shot.bullet[k].knd   = 1;//子弹的种类
                        boss_shot.bullet[k].angle = PI/2+(PI/2-PI/10)/3*(num-1-st)+rang(PI/20);//角度
                        boss_shot.bullet[k].flag  = 1;
                        boss_shot.bullet[k].cnt   = 0;
                        boss_shot.bullet[k].spd   = 5.5-3.0/6*s;//速度
                        boss_shot.bullet[k].eff   = 0;
                        boss_shot.bullet[k].state = 0;
                    }
                }
                for(s=0;s<10;s++){
                    if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                        boss_shot.bullet[k].col   = 1;//子弹的颜色
                        boss_shot.bullet[k].x     = FMX;//坐标
                        boss_shot.bullet[k].y     = 0;
                        boss_shot.bullet[k].knd   = 10;//子弹的种类
                        boss_shot.bullet[k].angle = PI/2+(PI/2-PI/10)/3*(num-1-st)+rang(PI/30);//角度
                        boss_shot.bullet[k].flag  = 1;
                        boss_shot.bullet[k].cnt   = 0;
                        boss_shot.bullet[k].spd   = 5.5-4.0/10*s;//速度
                        boss_shot.bullet[k].eff   = 0;
                        boss_shot.bullet[k].state = 0;
                    }
                }
            }
        }
    }
    //哒~哒~哒~最后的谢幕(last curtain)
    st=106;
    if(tm12[st]==t){
        for(n=st;n<st+3;n++){
            int setx[3]={0,-30,30};
            for(s=0;s<3;s++){
                if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                    boss_shot.bullet[k].col   = n%2 ? 1 : 0;//子弹的颜色
                    boss_shot.bullet[k].x     = setx[s]+FMX-50-(FMX-100)/2*(n-st);//坐标
                    boss_shot.bullet[k].y     = 0;
                    boss_shot.bullet[k].knd   = 0;//子弹的种类
                    boss_shot.bullet[k].angle = PI/2;//角度
                    boss_shot.bullet[k].flag  = 1;
                    boss_shot.bullet[k].cnt   = 0;
                    boss_shot.bullet[k].spd   = 6-s;//速度
                    boss_shot.bullet[k].eff   = 0;
                    boss_shot.bullet[k].state = 0;
                }
            }
            for(s=0;s<6;s++){
                if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                    boss_shot.bullet[k].col   = n%2 ? 0 : 1;//子弹的颜色
                    boss_shot.bullet[k].x     = rang(30)+FMX-50-(FMX-100)/2*(n-st);//坐标
                    boss_shot.bullet[k].y     = 0;
                    boss_shot.bullet[k].knd   = 1;//子弹的种类
                    boss_shot.bullet[k].angle = PI/2;//角度
                    boss_shot.bullet[k].flag  = 1;
                    boss_shot.bullet[k].cnt   = 0;
                    boss_shot.bullet[k].spd   = 5.5-3.0/6*s;//速度
                    boss_shot.bullet[k].eff   = 0;
                    boss_shot.bullet[k].state = 0;
                }
            }
            for(s=0;s<10;s++){
                if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                    boss_shot.bullet[k].col   = n%2 ? 1 : 0;//子弹的颜色
                    boss_shot.bullet[k].x     = rang(20)+FMX-50-(FMX-100)/2*(n-st);//坐标
                    boss_shot.bullet[k].y     = 0;
                    boss_shot.bullet[k].knd   = 10;//子弹的种类
                    boss_shot.bullet[k].angle = PI/2;//角度
                    boss_shot.bullet[k].flag  = 1;
                    boss_shot.bullet[k].cnt   = 0;
                    boss_shot.bullet[k].spd   = 5.5-4.0/10*s;//速度
                    boss_shot.bullet[k].eff   = 0;
                    boss_shot.bullet[k].state = 0;
                }
            }
        }
    }
    //上升后抛洒(shower)
    st=107;
    if(tm12[st]<=t && t<=tm12[st]+60 && t%5==0){
        for(s=0;s<=150;s++){
            if(s%6<4)continue;
            if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                boss_shot.bullet[k].col   = (s/6)%9;//子弹的颜色
                boss_shot.bullet[k].x     = boss.x;//坐标
                boss_shot.bullet[k].y     = boss.y;
                boss_shot.bullet[k].knd   = 2;//子弹的种类
                boss_shot.bullet[k].angle = 0;//角度
                boss_shot.bullet[k].flag  = 1;
                boss_shot.bullet[k].cnt   = 0;
                boss_shot.bullet[k].spd   = 0;//速度
                boss_shot.bullet[k].eff   = 0;
                boss_shot.bullet[k].state = 2;
                boss_shot.bullet[k].vx    = -2.5+5.0/150*s;
                boss_shot.bullet[k].vy    = -8;
            }
        }
    }
    //两端下方
/*    st=107;
    if(tm12[111]-(tm12[111]-tm12[110])/3==t){
        for(s=0;s<=30;s++){
            if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                boss_shot.bullet[k].col   = 0;//子弹的颜色
                boss_shot.bullet[k].x     = 0;//坐标
                boss_shot.bullet[k].y     = FMY;
                boss_shot.bullet[k].knd   = 11;//子弹的种类
                boss_shot.bullet[k].angle = -PI/4+rang(PI/4);//角度
                boss_shot.bullet[k].flag  = 1;
                boss_shot.bullet[k].cnt   = 0;
                boss_shot.bullet[k].spd   = 1.5+rang(1);//速度
                boss_shot.bullet[k].eff   = 1;
                boss_shot.bullet[k].state = 0;
            }
        }
        for(s=0;s<=30;s++){
            if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                boss_shot.bullet[k].col   = 0;//子弹的颜色
                boss_shot.bullet[k].x     = FMX;//坐标
                boss_shot.bullet[k].y     = FMY;
                boss_shot.bullet[k].knd   = 11;//子弹的种类
                boss_shot.bullet[k].angle = PI+PI/4+rang(PI/4);//角度
                boss_shot.bullet[k].flag  = 1;
                boss_shot.bullet[k].cnt   = 0;
                boss_shot.bullet[k].spd   = 1.5+rang(1);//速度
                boss_shot.bullet[k].eff   = 1;
                boss_shot.bullet[k].state = 0;
            }
        }
    }*/
    //上升后抛洒(shower)
    st=111; ed=114;
    if(tm12[st]<=t && t<=tm12[ed]){
        for(i=st;i<=ed;i++){
            if(tm12[i]<=t && t<tm12[i]+60){
                for(s=150/4*(num-st-1);s<=150/4*(num-st);s++){
                    if(s%6<4)continue;
                    if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                        boss_shot.bullet[k].col   = (s/6)%9;//子弹的颜色
                        boss_shot.bullet[k].x     = boss.x;//坐标
                        boss_shot.bullet[k].y     = boss.y;
                        boss_shot.bullet[k].knd   = 2;//子弹的种类
                        boss_shot.bullet[k].angle = 0;//角度
                        boss_shot.bullet[k].flag  = 1;
                        boss_shot.bullet[k].cnt   = 0;
                        boss_shot.bullet[k].spd   = 0;//速度
                        boss_shot.bullet[k].eff   = 1;
                        boss_shot.bullet[k].state = 2;
                        boss_shot.bullet[k].vx    = -2.5+5.0/150*s;
                        boss_shot.bullet[k].vy    = -8;
                    }
                }
            }
        }
    }
    //激光
    st=115; ed=123;
    if(tm12[st]<=t && t<=tm12[ed]){
        for(i=st;i<=ed;i++){
            if(tm12[i]==t){
                for(s=0;s<2;s++){
                    if((k=search_lazer())!=-1){
                        lazer[k].col      = 0;//子弹的颜色
                        lazer[k].knd      = 0;//子弹的种类
                        lazer[k].angle    = PI/2+rang(PI/2)-PI/4+PI/2*s;//角度
                        lazer[k].startpt.x= FMX/2;//坐标
                        lazer[k].startpt.y= 0;
                        lazer[k].flag     = 1;
                        lazer[k].cnt      = 0;
                        lazer[k].haba     = 1;//幅度
                        lazer[k].state    = 3;//状态
                        lazer[k].length   = FMY*1.2;//激光的长度
                        lazer[k].hantei      = 0;
                        lazer[k].lphy.conv_flag=0;//旋转flag
                        lazer[k].lphy.conv_base_x=0;//旋转基准位置
                        lazer[k].lphy.conv_base_y=0;
                        lazer[k].lphy.conv_x=0;//旋转元的位置
                        lazer[k].lphy.conv_y=0;
                        input_lphy(&lazer[k],0,0);//代入
                    }
                    if((k=search_lazer())!=-1){
                        lazer[k].col      = 1;//子弹的颜色
                        lazer[k].knd      = 0;//子弹的种类
                        lazer[k].angle    = -PI/2+rang(PI/2)-PI/4+PI/2*s;//角度
                        lazer[k].startpt.x= FMX/2;//坐标
                        lazer[k].startpt.y= FMY;
                        lazer[k].flag     = 1;
                        lazer[k].cnt      = 0;
                        lazer[k].haba     = 1;//幅度
                        lazer[k].state    = 3;//状态
                        lazer[k].length   = FMX*1.2;//激光的长度
                        lazer[k].hantei      = 0;
                        lazer[k].lphy.conv_flag=0;//旋转flag
                        lazer[k].lphy.conv_base_x=0;//旋转基准位置
                        lazer[k].lphy.conv_base_y=0;
                        lazer[k].lphy.conv_x=0;//旋转元的位置
                        lazer[k].lphy.conv_y=0;
                        input_lphy(&lazer[k],0,0);//代入
                    }
                }
            }
        }
    }
    if(tm12[124]==t){
        for(i=0;i<8;i++){
            for(s=0;s<=40;s++){
                if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                    boss_shot.bullet[k].col   = 0;//子弹的颜色
                    boss_shot.bullet[k].x     = FMX/2;//坐标
                    boss_shot.bullet[k].y     = 0;
                    boss_shot.bullet[k].knd   = 11;//子弹的种类
                    boss_shot.bullet[k].angle = PI/40*s+rang(PI/80);//角度
                    boss_shot.bullet[k].flag  = 1;
                    boss_shot.bullet[k].cnt   = 0;
                    boss_shot.bullet[k].spd   = 4.5-3.5/8*i+rang(0.2);//速度
                    boss_shot.bullet[k].eff   = 1;
                    boss_shot.bullet[k].state = 0;
                }
            }
        }
    }
    if(t==tm12[125]){
        flash.flag=1;
        flash.knd=1;//闪屏!
        flash.to_cnt=50;//在90次计数中变化
        flash.cnt=0;
    }

    //闪~啊~闪~

    if(tm12[133]<=t && t<tm12[153] && t%3==0){
        for(i=0;i<2;i++){
            if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                boss_shot.bullet[k].col   = base_col;//子弹的颜色
                boss_shot.bullet[k].x     = boss.x;//坐标
                boss_shot.bullet[k].y     = boss.y;
                boss_shot.bullet[k].knd   = 1;//子弹的种类
                boss_shot.bullet[k].angle = base_angle-PI*0.15+PI*0.3*i;//角度
                boss_shot.bullet[k].flag  = 1;
                boss_shot.bullet[k].cnt   = 0;
                boss_shot.bullet[k].spd   = 9;//速度
                boss_shot.bullet[k].eff   = 0;
                boss_shot.bullet[k].state = 3;
            }
        }
    }
    if(tm12[133]==t||tm12[137]==t||tm12[141]==t){
        if((k=search_lazer())!=-1){
            lazer[k].col      = 1;//子弹的颜色
            lazer[k].knd      = 0;//子弹的种类
            lazer[k].angle    = bossatan2();//角度
            lazer[k].startpt.x= boss.x;//坐标
            lazer[k].startpt.y= boss.y;
            lazer[k].flag     = 1;
            lazer[k].cnt      = 0;
            lazer[k].haba     = 1;//幅度
            lazer[k].state    = 4;//状态
            lazer[k].length   = FMX;//激光的长度
            lazer[k].hantei   = 0;
            lazer[k].lphy.conv_flag=0;//旋转flag
            lazer[k].lphy.conv_base_x=0;//旋转基准位置
            lazer[k].lphy.conv_base_y=0;
            lazer[k].lphy.conv_x=0;//旋转元的位置
            lazer[k].lphy.conv_y=0;
            input_lphy(&lazer[k],0,0);//代入
        }
    }
    if(tm12[137]==t){
        base_angle+=PI/6+rang(PI/20);
        base_col=1;
    }
    if(tm12[141]==t){
        base_angle-=PI/6*2+rang(PI/20);
        base_col=0;
    }
    if(tm12[145]==t){
        base_angle+=PI/4+rang(PI/20);
        base_col=1;
    }
    if(tm12[147]==t){
        base_angle=-PI/2;
        base_col=0;
    }
    if(tm12[147]<=t && t<tm12[161] && t%3==0){
        for(i=0;i<3;i++){
            if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                boss_shot.bullet[k].col   = base_col;//子弹的颜色
                boss_shot.bullet[k].x     = boss.x;//坐标
                boss_shot.bullet[k].y     = boss.y;
                boss_shot.bullet[k].knd   = 1;//子弹的种类
                boss_shot.bullet[k].angle = base_angle-PI*0.15+PI*0.15*i;//角度
                boss_shot.bullet[k].flag  = 1;
                boss_shot.bullet[k].cnt   = 0;
                boss_shot.bullet[k].spd   = 9;//速度
                boss_shot.bullet[k].eff   = 0;
                boss_shot.bullet[k].state = 3;
            }
        }
    }
    if(tm12[147]==t||tm12[151]==t||tm12[155]==t){
        for(i=0;i<3;i++){
            if((k=search_lazer())!=-1){
                lazer[k].col      = i%2;//子弹的颜色
                lazer[k].knd      = 0;//子弹的种类
                lazer[k].angle    = bossatan2()-PI/6+PI/6*i;//角度
                lazer[k].startpt.x= boss.x;//坐标
                lazer[k].startpt.y= boss.y;
                lazer[k].flag     = 1;
                lazer[k].cnt      = 0;
                lazer[k].haba     = 1;//幅度
                lazer[k].state    = 4;//状态
                lazer[k].length   = FMX;//激光的长度
                lazer[k].hantei   = 0;
                lazer[k].lphy.conv_flag=0;//旋转flag
                lazer[k].lphy.conv_base_x=0;//旋转基准位置
                lazer[k].lphy.conv_base_y=0;
                lazer[k].lphy.conv_x=0;//旋转元的位置
                lazer[k].lphy.conv_y=0;
                input_lphy(&lazer[k],0,0);//代入
            }
        }
    }
    if(tm12[151]==t){
        base_angle-=PI/10+rang(PI/20);
        base_col=1;
    }
    if(tm12[155]==t){
        base_angle+=PI/5+rang(PI/20);
        base_col=0;
    }
    if(tm12[159]==t){
        base_angle-=PI/4+rang(PI/20);
        base_col=1;
    }
    if(tm12[161]==t){
        base_angle=-PI/2;
        base_col=0;
    }
    if(tm12[161]<=t && t<tm12[173] && t%3==0){
        for(i=0;i<4;i++){
            if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                boss_shot.bullet[k].col   = base_col;//子弹的颜色
                boss_shot.bullet[k].x     = boss.x;//坐标
                boss_shot.bullet[k].y     = boss.y;
                boss_shot.bullet[k].knd   = 1;//子弹的种类
                boss_shot.bullet[k].angle = base_angle-PI*0.18+PI*0.12*i;//角度
                boss_shot.bullet[k].flag  = 1;
                boss_shot.bullet[k].cnt   = 0;
                boss_shot.bullet[k].spd   = 9;//速度
                boss_shot.bullet[k].eff   = 0;
                boss_shot.bullet[k].state = 3;
            }
        }
    }
    if(tm12[161]==t||tm12[165]==t||tm12[169]==t){
        for(i=0;i<6;i++){
            if((k=search_lazer())!=-1){
                lazer[k].col      = (i+1)%2;//子弹的颜色
                lazer[k].knd      = 0;//子弹的种类
                lazer[k].angle    = bossatan2()+PI2/6*i;//角度
                lazer[k].startpt.x= boss.x;//坐标
                lazer[k].startpt.y= boss.y;
                lazer[k].flag     = 1;
                lazer[k].cnt      = 0;
                lazer[k].haba     = 1;//幅度
                lazer[k].state    = 4;//状态
                lazer[k].length   = FMX;//激光的长度
                lazer[k].hantei   = 0;
                lazer[k].lphy.conv_flag=0;//旋转flag
                lazer[k].lphy.conv_base_x=0;//旋转基准位置
                lazer[k].lphy.conv_base_y=0;
                lazer[k].lphy.conv_x=0;//旋转元的位置
                lazer[k].lphy.conv_y=0;
                input_lphy(&lazer[k],0,0);//代入
            }
        }
    }
    if(tm12[165]==t){
        base_angle-=PI/10+rang(PI/20);
        base_col=1;
    }
    if(tm12[169]==t){
        base_angle+=PI/5+rang(PI/20);
        base_col=0;
    }
    if(tm12[161]==t||tm12[165]==t||tm12[169]==t){
        for(i=0;i<6;i++){
            if((k=search_lazer())!=-1){
                lazer[k].col      = (i+1)%2;//子弹的颜色
                lazer[k].knd      = 0;//子弹的种类
                lazer[k].angle    = bossatan2()+PI2/6*i;//角度
                lazer[k].startpt.x= boss.x;//坐标
                lazer[k].startpt.y= boss.y;
                lazer[k].flag     = 1;
                lazer[k].cnt      = 0;
                lazer[k].haba     = 1;//幅度
                lazer[k].state    = 4;//状态
                lazer[k].length   = FMX;//激光的长度
                lazer[k].hantei   = 0;
                lazer[k].lphy.conv_flag=0;//旋转flag
                lazer[k].lphy.conv_base_x=0;//旋转基准位置
                lazer[k].lphy.conv_base_y=0;
                lazer[k].lphy.conv_x=0;//旋转元的位置
                lazer[k].lphy.conv_y=0;
                input_lphy(&lazer[k],0,0);//代入
            }
        }
    }
    if(tm12[175]==t){
        for(i=0;i<6;i++){
            if((k=search_lazer())!=-1){
                lazer[k].col      = 0;//子弹的颜色
                lazer[k].knd      = 0;//子弹的种类
                lazer[k].angle    = base_angle+PI2/6*i;//角度
                lazer[k].startpt.x= boss.x;//坐标
                lazer[k].startpt.y= boss.y;
                lazer[k].flag     = 1;
                lazer[k].cnt      = 0;
                lazer[k].haba     = 1;//幅度
                lazer[k].state    = 5;//状态
                lazer[k].length   = FMX;//激光的长度
                lazer[k].hantei   = 0;
                lazer[k].lphy.conv_flag=0;//旋转flag
                lazer[k].lphy.conv_base_x=0;//旋转基准位置
                lazer[k].lphy.conv_base_y=0;
                lazer[k].lphy.conv_x=0;//旋转元的位置
                lazer[k].lphy.conv_y=0;
                input_lphy(&lazer[k],0,0);//代入
            }
        }
    }
    if(tm12[179]==t){
        for(i=0;i<6;i++){
            if((k=search_lazer())!=-1){
                lazer[k].col      = 1;//子弹的颜色
                lazer[k].knd      = 0;//子弹的种类
                lazer[k].angle    = base_angle+PI2/6*i;//角度
                lazer[k].startpt.x= boss.x;//坐标
                lazer[k].startpt.y= boss.y;
                lazer[k].flag     = 1;
                lazer[k].cnt      = 0;
                lazer[k].haba     = 1;//幅度
                lazer[k].state    = 6;//状态
                lazer[k].length   = FMX;//激光的长度
                lazer[k].hantei   = 0;
                lazer[k].lphy.conv_flag=0;//旋转flag
                lazer[k].lphy.conv_base_x=0;//旋转基准位置
                lazer[k].lphy.conv_base_y=0;
                lazer[k].lphy.conv_x=0;//旋转元的位置
                lazer[k].lphy.conv_y=0;
                input_lphy(&lazer[k],0,0);//代入
            }
        }
    }
    if(tm12[183]-60==t){
        double sx=FMX/2,sy=420;
        for(i=0;i<20;i++){
            if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                boss_shot.bullet[k].col   = i%9;//子弹的颜色
                boss_shot.bullet[k].x     = sx+cos(PI2/20*i)*400;//坐标
                boss_shot.bullet[k].y     = sy+sin(PI2/20*i)*400;
                boss_shot.bullet[k].knd   = 4;//子弹的种类
                boss_shot.bullet[k].angle = PI2/20*i+PI;//角度
                boss_shot.bullet[k].flag  = 1;
                boss_shot.bullet[k].cnt   = 0;
                boss_shot.bullet[k].spd   = 4;//速度
                boss_shot.bullet[k].eff   = 1;
                boss_shot.bullet[k].state = 4;
                boss_shot.bullet[k].till  = 1000;
            }
        }
    }
    if(t==tm12[187]){
        flash.flag=1;
        flash.knd=1;//闪屏!
        flash.to_cnt=120;//在90次计数中变化
        flash.cnt=0;
    }
    int rflag=0;
    double rx,ry;
    for(i=VMX*VMY;i<BOSS_BULLET_MAX;i++){
        if(boss_shot.bullet[i].flag>0){
            int cnt=boss_shot.bullet[i].cnt;
            int state=boss_shot.bullet[i].state;
            double x=boss_shot.bullet[i].x,y=boss_shot.bullet[i].y;
            if(t==tm12[0]||t==tm12[7]||t==tm12[14]||t==tm12[20]||t==tm12[27])
                boss_shot.bullet[i].flag=0;
            if(state==1){
                if(cnt>35)
                    boss_shot.bullet[i].spd*=0.983;
            }
            if(state==2){
                if(boss_shot.bullet[i].vy<8)
                    boss_shot.bullet[i].vy+=0.15;
                boss_shot.bullet[i].x+=boss_shot.bullet[i].vx;
                boss_shot.bullet[i].y+=boss_shot.bullet[i].vy;
                boss_shot.bullet[i].angle=atan2(boss_shot.bullet[i].vy,boss_shot.bullet[i].vx);
            }
            if(state==3){
                if(x<0+9 || FMX-9<x || y<0+9){
                    if(x<0+9 || FMX-9<x )
                        boss_shot.bullet[i].angle=PI-boss_shot.bullet[i].angle;
                    if(y<0+9)
                        boss_shot.bullet[i].angle=PI2-boss_shot.bullet[i].angle;
                }
            }
            if(state==4){
                if(cnt==100){
                    boss_shot.bullet[i].spd=0;
                }
                if(tm12[187]==t){
                    boss_shot.bullet[i].vy=10;
                    boss_shot.bullet[i].state=5;
                }
            }
            if(state==5){
                if(boss_shot.bullet[i].vy>0){
                    boss_shot.bullet[i].vy-=0.15;
                    if(boss_shot.bullet[i].vy<0)
                        boss_shot.bullet[i].vy=0;
                }
                boss_shot.bullet[i].y-=boss_shot.bullet[i].vy;
                if(t==tm12[188]){
                    rx=boss_shot.bullet[i].x;
                    ry=boss_shot.bullet[i].y;
                    rflag=1;
                    boss_shot.bullet[i].flag=0;
                }
            }
            if(state==6){
                if(cnt<180)
                    boss_shot.bullet[i].spd*=0.98;
                if(cnt>180)
                    boss_shot.bullet[i].spd/=0.99;
                if(cnt>480)
                    boss_shot.bullet[i].spd/=0.99;
            }
        }
    }
    if(rflag==1){
        for(j=0;j<=20;j++){
            for(i=0;i<100-j*4;i++){
                if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
                    boss_shot.bullet[k].col   = GetRand(8);//子弹的颜色
                    boss_shot.bullet[k].x     = rx;//坐标
                    boss_shot.bullet[k].y     = ry;
                    boss_shot.bullet[k].knd   = 11;//子弹的种类
                    boss_shot.bullet[k].angle = PI2/(100-j*4)*i+rang(PI/200);//角度
                    boss_shot.bullet[k].flag  = 1;
                    boss_shot.bullet[k].cnt   = 0;
                    boss_shot.bullet[k].spd   = 9-9/20.0*j+rang(0.2);//速度
                    if(boss_shot.bullet[k].spd<0.1)
                        boss_shot.bullet[k].spd=0.1;
                    boss_shot.bullet[k].eff   = 1;
                    boss_shot.bullet[k].state = 6;
                    boss_shot.bullet[k].till  = 0;
                }
            }
        }
    }
    for(i=0;i<LAZER_MAX;i++){
        if(lazer[i].flag>0){
            int cnt=lazer[i].cnt;
            int state=lazer[i].state;
            if(state==1){
                if(cnt>=20*4-7 && cnt<20*4){
                    lazer[i].haba+=1.5;
                }
                if(cnt==20*4+1)
                    lazer[i].hantei=0.6;
                if(cnt>=20*8-30-7 && cnt<20*8-30){
                    lazer[i].hantei=0;
                    lazer[i].haba-=1.5;
                }
                if(cnt==20*8-30){
                    lazer[i].flag=0;
                }
            }
            if(state==2){
                if(cnt>=20*2-5 && cnt<20*2){
                    lazer[i].haba+=1.5;
                }
                if(cnt==20*2+1)
                    lazer[i].hantei=0.6;
                if(cnt>=20*6-30-5 && cnt<20*6-30){
                    lazer[i].hantei=0;
                    lazer[i].haba-=1.5;
                }
                if(cnt==20*6-30){
                    lazer[i].flag=0;
                }
            }
            if(state==3){
                if(t>=tm12[124]-7 && t<tm12[124]){
                    lazer[i].haba+=1;
                }
                if(t==tm12[124]+2)
                    lazer[i].hantei=0.6;
                if(t==tm12[125]){
                    lazer[i].flag=0;
                }
            }
            if(state==4){
                if(cnt>=20*2-10 && cnt<20*2){
                    lazer[i].haba+=1;
                }
                if(cnt==20*2+2)
                    lazer[i].hantei=0.6;
                if(cnt>=20*4-10 && cnt<20*4){
                    lazer[i].hantei=0;
                    lazer[i].haba-=1;
                }
                if(cnt==20*4){
                    lazer[i].flag=0;
                }
            }
            if(state==5){
                lazer[i].angle+=PI/180;
                if(30<cnt && cnt<40){
                    lazer[i].haba+=3.0;
                }
                if(cnt==45)
                    lazer[i].hantei=0.6;
                if(cnt>=70 && cnt<80){
                    lazer[i].hantei=0;
                    lazer[i].haba-=3.0;
                }
                if(cnt==80){
                    lazer[i].flag=0;
                }
            }
            if(state==6){
                lazer[i].angle-=PI/180;
                if(30<cnt && cnt<40){
                    lazer[i].haba+=3.0;
                }
                if(cnt==45)
                    lazer[i].hantei=0.6;
                if(cnt>=70 && cnt<80){
                    lazer[i].hantei=0;
                    lazer[i].haba-=3.0;
                }
                if(cnt==80){
                    lazer[i].flag=0;
                }
            }
        }
    }
}

为了体现一个函数一个弹幕的风格,因此就这样写到一个函数里面了……真是长啊……(汗) 这次追加了控制FPS的处理这样的东西,因此这章的内容将在下一章中继续说明。 非常抱歉连我自己都不知道修改了多少地方了,因此实际上我准备在其它章节中介绍追加了的处理。 其次,至于音乐的同捆问题,由于曲子的制作者还没有答复是否同意,因此还没有放入工程里面。

现在如果您要试着玩这个弹幕的话只能您自己准备音乐了。

http://www.nicovideo.jp/watch/sm3822557

niconico动画中有这个曲子(上面的链接中的“5. 20:30 Rage/Godspeed”。)

http://dixq.net/sr/niconico.html

您可以参考这里的介绍来把曲子扒下来。

不过,从20:30开始(实际上还要提前一点)到某个地方为止,您必须要编辑得和介绍动画里面的音乐一样才行。

可以使用 Audacity之类的软件编辑得和介绍动画中一样。

……这些怎么样都行但又麻烦到家的事情又不能不做,您如果没兴趣的话这章就可以略过了。m( ||)m

如果还有进展的话我大概会重新写一次吧。

>>点此回到教程目录

results matching ""

    No results matching ""