


29. ばらまきショット
このショットはこのようなショットです。
プレイヤーのいる位置を中心に弾をばらまいています。
計120個の弾をまいています。
if(EnemyShot[i].counter==2*j){
この条件文により、counterが2回に1回条件マッチします。
マッチしたらその発射する弾のフラグを上げ、弾の初期値を敵の座標にセット。
と、ここで重要なのが、角度の計算です。
今までは単純に敵の座標と自分の座標から角度を計算していましたが、今度は乱数を用いてその角度を変化させて見ます。
まず、80度位の範囲で、弾をばらまこうと思います。
1ラジアン(rad)はだいたい、57度位なので、1.5ラジアンの範囲で、乱数をとれば、80度の範囲のばらまきができます。
ということは、敵とプレイヤーの角度-0.75ラジアン〜+0.75ラジアンの範囲でばらまけばいいわけです。
-0.75〜+0.75の乱数は(double)GetRand(1500) / 1000.0f - 0.75fで作ることが出来ます。
敵とプレイヤーの角度にこの値をたします。するとこのようにかけます。
atan2(Player.y-EnemyShot[i].mem_ey,Player.x-EnemyShot[i].mem_ex)+(double)GetRand(1500)/1000.0f-0.75f;
最後のループ文は今まで通りの計算です。
void EnemyShotPattern9(int i){
        for(int j=0;j<120;j++){
                if(EnemyShot[i].counter==2*j){
                        EnemyShot[i].EnemyShots[j].x=EnemyShot[i].mem_ex;
                        EnemyShot[i].EnemyShots[j].y=EnemyShot[i].mem_ey;
                        EnemyShot[i].EnemyShots[j].flag=1;
                        EnemyShot[i].EnemyShots[j].angle = 
                             atan2(Player.y-EnemyShot[i].mem_ey,Player.x-EnemyShot[i].mem_ex)+(double)GetRand(1500)/1000.0f-0.75f;
                        StopSoundMem(sound_enemy_shot[0]);
                        PlaySoundMem(sound_enemy_shot[0],DX_PLAYTYPE_BACK);
                }       
        }
        for(int j=0;j<200;j++){
                if(EnemyShot[i].EnemyShots[j].flag==1){
                        EnemyShot[i].EnemyShots[j].x+=PATTERN1SPEED*cos(EnemyShot[i].EnemyShots[j].angle);
                        EnemyShot[i].EnemyShots[j].y+=PATTERN1SPEED*sin(EnemyShot[i].EnemyShots[j].angle);
                }
        }
}
DXライブラリ著作権表示
DX Library Copyright (C) 2001-2006 Takumi 
Yamada.