BOOL hassha_yudou(BOOL yudou_hassha,int i) { static int yudou_t[yudou_max]; if(yudou_hassha==TRUE){ //現在発射されている if(yudou_t[i]++>=200){ //時間で消滅させる yudou_hassha=FALSE; yudou_t[i]=0; } //時間内なら何もしない }else //プレイヤー機に当たった場合 yudou_hassha=FALSE が実行される為 yudou_t[i]=0; return yudou_hassha; //時間内であれば渡された値をそのまま返す } double idou_yudou_x(double x_player,double yudou_x,BOOL yudou_hassha,int i) //あくまでも一瞬の移動量です { static int yudou_ax[yudou_max],yudou_shusei_x[yudou_max],rax[yudou_max]; if(yudou_hassha==TRUE){ //現在発射されている if(yudou_shusei_x[i]<100){ //修正可能なら if(yudou_shusei_x[i]==0) //発射直後 rax[i]=rand()%200+800; //誘導弾毎に加速度を変える 大きい方が性能が良い if(yudou_x>x_player){ yudou_ax[i]-=rax[i]; if(yudou_ax[i]<-9000) //最大加速度は大きければいいってもんじゃない yudou_ax[i]=-9000; }else if(yudou_x9000) yudou_ax[i]=9000; }else{ //yudou_x==x_player if(yudou_ax[i]>0) yudou_ax[i]-=rax[i]; else if(yudou_ax[i]<0) yudou_ax[i]+=rax[i]; } yudou_shusei_x[i]++; //修正回数カウント } //修正不可なら何もしない }else{ //消滅後は変数の値を元に戻す yudou_ax[i]=0; yudou_shusei_x[i]=0; rax[i]=0; } return (double)1/2*yudou_ax[i]*timer_s*timer_s; //相対移動量を返す 修正不可の場合は以前の値を返す } int gensoku_yudou_vy(int yudou_vy) //初期y軸方向速度 { if(yudou_vy>0){ yudou_vy-=20; if(yudou_vy<0) yudou_vy=0; //時間が経てば自動的に元の値に戻る }else if(yudou_vy<0){ yudou_vy+=20; if(yudou_vy>0) yudou_vy=0; } return yudou_vy; //絶対速度を返す } double idou_yudou_y(double y_player,double yudou_y,int yudou_vy,BOOL yudou_hassha,int i) { static int yudou_ay[yudou_max],yudou_shusei_y[yudou_max],ray[yudou_max]; if(yudou_hassha==TRUE){ if(yudou_shusei_y[i]<100){ if(yudou_shusei_y[i]==0) ray[i]=rand()%200+800; if(yudou_y>y_player){ yudou_ay[i]-=ray[i]; if(yudou_ay[i]<-9000) yudou_ay[i]=-9000; }else if(yudou_y9000) yudou_ay[i]=9000; }else{ if(yudou_ay[i]>0) yudou_ay[i]-=ray[i]; else if(yudou_ay[i]<0) yudou_ay[i]+=ray[i]; } yudou_shusei_y[i]++; } }else{ yudou_ay[i]=0; yudou_shusei_y[i]=0; ray[i]=0; } return (double)yudou_vy*timer_s+(double)1/2*yudou_ay[i]*timer_s*timer_s; //相対移動量を返す 修正不可の場合は以前の値を返す }