[龍神録]反射の回数の指定の仕方がわからない
Posted: 2010年6月04日(金) 20:22
龍神録で、全方向の弾をそれぞれ一回だけ壁に当たったら反射する
というプログラムの作り方が分かりません。
プログラムは
void boss_shot_bulletH002(){
#define TM002 200
int i,k=0,t=boss_shot.cnt%TM002,t2=boss_shot.cnt;
int a=GetRand(FMX);
int b=GetRand(FMY/3);
static int cnum=0;//ターンのカウンタ
if(t==0){//1ターンごとの初期化
move_boss_pos(40,70,FMX-40,120,60,200);
delete_boss_assist(0);
if(cnum%5==0){
assist_way(boss.x,boss.y,0,PI2/10,2,10,0,0,1);
bullet_way(boss.x,boss.y,0,PI2/10,2,10,0,0,1);
}
if(cnum%5==1){
assist_way(boss.x,boss.y,0,PI2/12,2,12,0,0,1);
bullet_way(boss.x,boss.y,0,PI2/12,2,12,0,0,1);
}
if(cnum%5==2){
assist_way(boss.x,boss.y,0,PI2/8,2,8,0,0,1);
bullet_way(boss.x,boss.y,0,PI2/8,2,8,0,0,1);
}
if(cnum%5==3){
assist_way(boss.x,boss.y,0,PI2/15,2,15,0,0,1);
bullet_way(boss.x,boss.y,0,PI2/15,2,15,0,0,1);
}
if(cnum%5==4){
assist_way(boss.x,boss.y,0,PI2/16,4,16,0,0,0);
bullet_way(boss.x,boss.y,0,PI2/16,4,16,0,0,0);
}
se_flag[4]=1;
}
for (i=0;i<BOSS_BULLET_MAX;i++){
if (boss_shot.bullet.flag > 0&&boss_shot.assist.state==1&&boss_shot.bullet.state==1) {
double x=boss_shot.bullet.x;
double y=boss_shot.bullet.y;
double state=boss_shot.bullet.state;
double state2=boss_shot.assist.state;
// 横の壁
if ( x < 9 || x > FMX-9 ){
boss_shot.bullet.angle = PI - boss_shot.bullet.angle;
boss_shot.assist.angle = PI - boss_shot.assist[i].angle;
}
// 上の壁
if ( y < 9){
boss_shot.bullet[i].angle = PI2 - boss_shot.bullet[i].angle;
boss_shot.assist[i].angle = PI2 - boss_shot.assist[i].angle;
}
}
}
//ここから先はアシストからの弾登録などです。
for (i = 0; i < BOSS_ASSIST_MAX; i++) {
if (boss_shot.assist[i].flag > 0) {
int state = boss_shot.assist[i].state;
double x = boss_shot.assist[i].x;
double y = boss_shot.assist[i].y;
switch(state){
case 0:
case 1:
// アシストから弾幕登録
if (t%20 == 0){
bullet_way(x,y,bossatan3(k,a,b),0,0,1,1,0,2);
se_flag[0]=0;
break;
}
default:
break;
}
}
}
for(i=0;i<BOSS_BULLET_MAX;i++){
if(boss_shot.bullet[k].flag>0){
int state = boss_shot.bullet[i].state;
switch(state){
case 2:
//速度変更
if(t>=150 && boss_shot.bullet[i].spd<=1)
boss_shot.bullet[i].spd +=0.05;
break;
default:
break;
}
}
}
if(t==TM002-1)
cnum++;
}
このようになっていて、stateが1のものだけ反射するようにしてあります。だから反射したらstateを0にすればいいと思ったんですが、そうしたらそれ以降のものが一回も反射しなくなってしまいました。
どうすればいいのでしょうか?教えてください。
ちなみに、assist_wayとbullet_wayの引数はそれぞれ
(発射するx座標,y座標,発射角度,弾の間隔,スピード,何way弾か,弾の画像,色,状態(state))となっています。
というプログラムの作り方が分かりません。
プログラムは
void boss_shot_bulletH002(){
#define TM002 200
int i,k=0,t=boss_shot.cnt%TM002,t2=boss_shot.cnt;
int a=GetRand(FMX);
int b=GetRand(FMY/3);
static int cnum=0;//ターンのカウンタ
if(t==0){//1ターンごとの初期化
move_boss_pos(40,70,FMX-40,120,60,200);
delete_boss_assist(0);
if(cnum%5==0){
assist_way(boss.x,boss.y,0,PI2/10,2,10,0,0,1);
bullet_way(boss.x,boss.y,0,PI2/10,2,10,0,0,1);
}
if(cnum%5==1){
assist_way(boss.x,boss.y,0,PI2/12,2,12,0,0,1);
bullet_way(boss.x,boss.y,0,PI2/12,2,12,0,0,1);
}
if(cnum%5==2){
assist_way(boss.x,boss.y,0,PI2/8,2,8,0,0,1);
bullet_way(boss.x,boss.y,0,PI2/8,2,8,0,0,1);
}
if(cnum%5==3){
assist_way(boss.x,boss.y,0,PI2/15,2,15,0,0,1);
bullet_way(boss.x,boss.y,0,PI2/15,2,15,0,0,1);
}
if(cnum%5==4){
assist_way(boss.x,boss.y,0,PI2/16,4,16,0,0,0);
bullet_way(boss.x,boss.y,0,PI2/16,4,16,0,0,0);
}
se_flag[4]=1;
}
for (i=0;i<BOSS_BULLET_MAX;i++){
if (boss_shot.bullet.flag > 0&&boss_shot.assist.state==1&&boss_shot.bullet.state==1) {
double x=boss_shot.bullet.x;
double y=boss_shot.bullet.y;
double state=boss_shot.bullet.state;
double state2=boss_shot.assist.state;
// 横の壁
if ( x < 9 || x > FMX-9 ){
boss_shot.bullet.angle = PI - boss_shot.bullet.angle;
boss_shot.assist.angle = PI - boss_shot.assist[i].angle;
}
// 上の壁
if ( y < 9){
boss_shot.bullet[i].angle = PI2 - boss_shot.bullet[i].angle;
boss_shot.assist[i].angle = PI2 - boss_shot.assist[i].angle;
}
}
}
//ここから先はアシストからの弾登録などです。
for (i = 0; i < BOSS_ASSIST_MAX; i++) {
if (boss_shot.assist[i].flag > 0) {
int state = boss_shot.assist[i].state;
double x = boss_shot.assist[i].x;
double y = boss_shot.assist[i].y;
switch(state){
case 0:
case 1:
// アシストから弾幕登録
if (t%20 == 0){
bullet_way(x,y,bossatan3(k,a,b),0,0,1,1,0,2);
se_flag[0]=0;
break;
}
default:
break;
}
}
}
for(i=0;i<BOSS_BULLET_MAX;i++){
if(boss_shot.bullet[k].flag>0){
int state = boss_shot.bullet[i].state;
switch(state){
case 2:
//速度変更
if(t>=150 && boss_shot.bullet[i].spd<=1)
boss_shot.bullet[i].spd +=0.05;
break;
default:
break;
}
}
}
if(t==TM002-1)
cnum++;
}
このようになっていて、stateが1のものだけ反射するようにしてあります。だから反射したらstateを0にすればいいと思ったんですが、そうしたらそれ以降のものが一回も反射しなくなってしまいました。
どうすればいいのでしょうか?教えてください。
ちなみに、assist_wayとbullet_wayの引数はそれぞれ
(発射するx座標,y座標,発射角度,弾の間隔,スピード,何way弾か,弾の画像,色,状態(state))となっています。