データの値を打ち込んでそのまま読み込ませることにしました。
そうすると敵も表示され、しかもちゃんと動きます。
しかし敵の何匹かが途中でいきなり自機の画像に入れ替わりました
例えは悪いですがポケモンのメタモンの「変身」のように。
このプログラムでは、龍神録のようにenemy_order[n]を用意してですが、データを読み取る場合
変数の入れ物は必要でしょうか?
処理が追いつかず入れ替わりが起こるのでしょうか?
#include "dxlibp.h"
#include "GV.h"
#define ENEMY_PATTERN_MAX 11
extern void enemy_pattern0(int);extern void enemy_pattern1(int);extern void enemy_pattern2(int);
extern void enemy_pattern3(int);extern void enemy_pattern4(int);extern void enemy_pattern5(int);
extern void enemy_pattern6(int);extern void enemy_pattern7(int);extern void enemy_pattern8(int);
extern void enemy_pattern9(int);extern void enemy_pattern10(int);
void (*enemy_pattern[ENEMY_PATTERN_MAX])(int) = {
enemy_pattern0, enemy_pattern1, enemy_pattern2, enemy_pattern3, enemy_pattern4,
enemy_pattern5, enemy_pattern6, enemy_pattern7, enemy_pattern8, enemy_pattern9,
enemy_pattern10,
};
int enemy_num_search(){
int i;
for(i=0;i<ENEMY_MAX;i++){//フラグのたって無いenemyを探す
if(enemy.flag==0){
return i;//使用可能番号を返す
}
}
return -1;//全部埋まっていたらエラーを返す
}
//敵情報を登録
void enemy_enter(){//敵の行動を登録・制御する関
int n,i;
int cnt1[11] ={100,180,260,340,420,500,580,660,740,820,900};
int pattern1[11] ={0,1,2,3,4,5,6,7,8,9,10};
int knd1[11] ={0,0,0,0,0,0,0,0,0,0,0};
int bltime1[11] ={0,0,0,0,0,0,0,0,0,0,0};
int blknd1[11] ={0,0,0,0,0,0,0,0,0,0,0};
int blknd21[11] ={0,0,0,0,0,0,0,0,0,0,0};
int col1[11] ={0,0,0,0,0,0,0,0,0,0,0};
int wait1[11] ={120,120,120,120,120,120,120,120,120,120,350};
int hp1[11] ={100,100,100,100,100,100,100,100,100,100,100};
double x1[11] ={180,200,180,200,180,200,180,200,180,200,180};
double y1[11] ={-20,-20,-20,-20,-20,-20,-20,150,150,150,-20};
double sp1[11] ={0,0,0,0,0,0,0,0,0,0,0};
for(n=0;n<11;n++){
if(cnt1[n]==stage_count){//現在の瞬間がオーダーの瞬間なら
if((i=enemy_num_search())!=-1){
enemy.flag =1;
enemy.cnt =0;
enemy.pattern=pattern1[n];
enemy.muki =1;
enemy.knd =knd1[n];
enemy.x =x1[n];
enemy.y =y1[n];
enemy.sp =sp1[n];
enemy.bltime =bltime1[n];
enemy[i].blknd =blknd1[n];
enemy[i].blknd2 =blknd21[n];
enemy[i].col =col1[n];
enemy[i].wait =wait1[n];
enemy[i].hp =hp1[n];
enemy[i].hp_max =enemy[i].hp;
enemy[i].vx =0;
enemy[i].vy =0;
enemy[i].ang =0;
}
}
}
}
//敵の行動制御
void enemy_act(){
int i;
for(i=0;i<ENEMY_MAX;i++){
if(enemy[i].flag==1){//その敵のフラグがオンになってたら
enemy_pattern[enemy[i].pattern](i);
enemy[i].x+=cos(enemy[i].ang)*enemy[i].sp;
enemy[i].y+=sin(enemy[i].ang)*enemy[i].sp;
enemy[i].x+=enemy[i].vx;
enemy[i].y+=enemy[i].vy;
enemy[i].cnt++;
enemy[i].img=enemy[i].muki*3+(enemy[i].cnt%24)/6;
//敵が画面から外れたら消す
if(enemy[i].x<-20 || FIELD_MAX_X+20<enemy[i].x || enemy[i].y<-20 || FIELD_MAX_Y+20<enemy[i].y)
enemy[i].flag=0;
}
}
}
//敵処理メイン
void enemy_main(){
enemy_enter();
enemy_act();
}