ミシャグジさま弾幕をボスも使えるようにしたい
Posted: 2010年9月08日(水) 15:28
初めまして
龍神録プログラミングの館の16章「ミシャグジさま弾幕を作ってみよう」で作った弾幕を
ボスも扱えるようにしようと、boss_shotH.cppに同じ内容を書き、そこから変数(?)などを書き換えて、
見やすくするために色を変えていたり、多少違います
これで実行してみると、後から発射された弾が、先に発射された弾を追い越してしまいます。
その弾は
・角度が変わるまで時間が掛かる。(追い越した後に角度が変わりだす)
・スピードが速い(追い越した後、角度が変わると共にスピードが落ちだす)
・このように動きが違う弾はランダムに飛んでくる。(10回中2回の時もあれば、1回の時もありました)
ここから考えて、恐らく
if(30<cnt && cnt<120){
ここに当てはまらないため、しばらくの間、スピードも落ちなければ、角度も変わらないのだと思いました。
今したいことは、追い越すような事をなくしたいということです。
どのように書き換えればいいのでしょうか?
分かりにくい場所がありましたら、指摘お願いします。
Cの知識は、初心者レベルです。
ご教授宜しくお願いします。
龍神録プログラミングの館の16章「ミシャグジさま弾幕を作ってみよう」で作った弾幕を
ボスも扱えるようにしようと、boss_shotH.cppに同じ内容を書き、そこから変数(?)などを書き換えて、
void boss_shot_bulletH039()
{
int t=boss_shot.cnt;
int k=1;
if(t<1000 && t%200==0){
double angle=rang(PI);
for(int j=0;j<2;j++){//途中から2分裂する分
for(int i=0;i<60;i++){//一度に60個
if(boss_shot.bullet[k].flag!=2 && (k=search_boss_shot())!=-1){
boss_shot.bullet[k].knd =8;//8番の弾
boss_shot.bullet[k].angle =angle+PI2/60*i;//円形60個
boss_shot.bullet[k].flag =1;
boss_shot.bullet[k].x =boss.x;
boss_shot.bullet[k].y =boss.y;
boss_shot.bullet[k].col =4;//4番の色
boss_shot.bullet[k].cnt =0;
boss_shot.bullet[k].state =j;//ステータス。0か1かで回転がかわる
boss_shot.bullet[k].spd =2;
if(j==1){
boss_shot.bullet[k].col =0;//見やすくするため
}
}
}
}
se_flag[0]=1;//発射音鳴らす
}
for(int i=0;i<SHOT_BULLET_MAX;i++){//全弾分
if(boss_shot.bullet[k].flag>0){//登録されている弾があれば
int state=boss_shot.bullet.state;
int cnt=boss_shot.bullet.cnt;
if(30<cnt && cnt<120){//30~120カウントなら
boss_shot.bullet.spd-=1.2/90.0;//90カウントかけて1.2減らす
boss_shot.bullet.angle+=(PI/2)/90.0*(state?-1:1);//90カウントかけて90°傾ける
}
}
}
}見やすくするために色を変えていたり、多少違います
これで実行してみると、後から発射された弾が、先に発射された弾を追い越してしまいます。
その弾は
・角度が変わるまで時間が掛かる。(追い越した後に角度が変わりだす)
・スピードが速い(追い越した後、角度が変わると共にスピードが落ちだす)
・このように動きが違う弾はランダムに飛んでくる。(10回中2回の時もあれば、1回の時もありました)
ここから考えて、恐らく
if(30<cnt && cnt<120){
ここに当てはまらないため、しばらくの間、スピードも落ちなければ、角度も変わらないのだと思いました。
今したいことは、追い越すような事をなくしたいということです。
どのように書き換えればいいのでしょうか?
分かりにくい場所がありましたら、指摘お願いします。
Cの知識は、初心者レベルです。
ご教授宜しくお願いします。
