龍神録のプログラミングを参考にしながら、シューティングゲームを作っています。
私は入門サイトなど駆使しながらやっていますので、入門編は多分理解していると思います。
質問ですが、現在龍神録の第11章で詰まっています。
ソースコードを元にプログラムを打ち実行しますと、敵が一瞬だけ出現して消えるという現象が起きています。
ソースコード、誤字とかもチェックしましたが原因がまったく発見できませんでした。
だれか心お優しい方、教えて頂けないでしょうか。
拙い文章で申し訳ありませんが、よろしくお願いします。
使っているOS: windows 7
コンパイルソフト:Visual C++ 2008です
以下がソースになります
void enemy_pattern_0(int i){
int t=enemy[i].cnt;
if(t==0){
enemy[i].fy=2;
}
if(t==60){
enemy[i].fy=0;
}
if(t==60+enemy[i].wait){
enemy[i].fy=-2;
}
}
//------------------------------
//関数名:enemy_null_search()
//機能 :空き番号の検索
//------------------------------
//フラグの立っていないenemyを探す
int enemy_null_search(){
int i;
for(i=0; i<ENEMY_MAX; i++){
if(enemy[i].flag==0){
//使用可能な配列番号を格納する
return i;
}
}
//埋まっていたら-1(失敗)と返す
return -1;
}
//敵データの登録
void enemy_enter(){
int i;
int j;
int k;
for(k=0; k<ENEMY_ODER_MAX; k++){
if(enemy_oder[k].oder_cnt==stage_cnt){ //ゲームが始まって100カウント
if((i=enemy_null_search())!=-1){
enemy[i].flag =1; //フラグ
enemy[i].cnt =0; //カウンタ
enemy[i].pattern =enemy_oder[k].oder_pattern; //行動パターン
enemy[i].muki =1; //向き
enemy[i].kind =enemy_oder[k].oder_kind; //出現する敵の種類
enemy[i].x =enemy_oder[k].oder_x;
enemy[i].y =enemy_oder[k].oder_y;
enemy[i].sp =enemy_oder[k].oder_speed; //スピード
enemy[i].sttime =enemy_oder[k].oder_start_time;//弾幕開始時間
enemy[i].dankind =enemy_oder[k].oder_danmag_kind; //弾幕の種類
enemy[i].dankind2 =enemy_oder[k].oder_danmag_kind2; //弾の種類
enemy[i].color =enemy_oder[k].oder_enemy_color; //色
enemy[i].wait =enemy_oder[k].oder_wait; //停滞時間
enemy[i].hp =enemy_oder[k].oder_enemy_hp; //HP
enemy[i].hpmax =enemy[i].hp; //体力の初期値
enemy[i].fx =0; //水平方向
enemy[i].fy =0; //鉛直方向
enemy[i].angle =0; //角度
for(j=0; j>6; j++){
enemy[i].drop_n[j]=enemy_oder[k].oder_item[j];
}
}
}
}
}
/*敵の行動制御(移動パターンなどの基盤となるプログラム) 関数名:enemy_control (戻り値、返り値なし) */
void enemy_control(){
int i; //ローカル変数 i を定義。iはenemy_pattern関数などにも使用される共用変数
for(i=0; i<ENEMY_MAX; i++){
if(enemy[i].flag==1){
enemy_pattern_0(i); //enemy_pattern_0関数にiの内容を渡す
enemy[i].x+= cos(enemy[i].angle)*enemy[i].sp;
enemy[i].y+= sin(enemy[i].angle)*enemy[i].sp;
enemy[i].x+= enemy[i].fx;
enemy[i].y+= enemy[i].fy;
enemy[i].cnt++;
enemy[i].img=enemy[i].muki*3+(enemy[i].cnt%16)/6; //enemy[3][i](iは分割画像のNo)を指定する) 値は3~5 (中央画像の指定している)
//フラグを0にする
if(enemy[i].x < -20 || enemy[i].y <-20|| FIELD_MAX_X+20 < enemy[i].x || FIELD_MAX_Y+20 < enemy[i].y )
enemy[i].flag=0;
}
}
}
//敵処理メイン
void enemy_main(){
enemy_enter();
enemy_control();
}
//----------------------------------------------------
//変数名:load_enemy_oder()
//機能 :敵の出現情報をエクセルから読み込んで格納する
//----------------------------------------------------
void load_enemy_oder(){
//変数の定義
int n,num,i,fp;
//ファイルネームのロード
char fname[32] = {"../dat/csv/11章/storyH0.csv"};
//全角用・半角用の配列
int input [64]; //全角
char inputc [64]; //半角
//ファイル読み込み
fp = FileRead_open(fname);
//ファイル名の途中で空白文字を感知したらエラーを返す
if(fp == NULL){
printfDx("Read Error\n");
return;
}
//textファイルで展開する際に、最初の2行はデータではないので読み飛ばす
for(i=0; i<2; i++)
while(FileRead_getc(fp)!='\n');
n=0,num=0;
while(1){
for(i=0; i<64; i++){
//1文字を取得する
inputc[i]=input[i]=FileRead_getc(fp);
//スラッシュがあれば改行までループ
if(inputc[i]=='/'){
while(FileRead_getc(fp)!='\n');
i=-1;
continue;
}
//\nがあればそこまでを文字列として出力
if(input[i] == '.' || input[i] == '\n'){
inputc[i]='\0';
break;
}
//ファイルがEOFなら終了
if(input[i]==EOF){
goto EXFILE;
}
}
//エクセル読み込み(格納データは18個)
switch(num){
case 0 :enemy_oder[n].oder_cnt = atoi(inputc); break;
case 1 :enemy_oder[n].oder_pattern = atoi(inputc); break;
case 2 :enemy_oder[n].oder_kind = atoi(inputc); break;
case 3 :enemy_oder[n].oder_x = atof(inputc); break;
case 4 :enemy_oder[n].oder_y = atof(inputc); break;
case 5 :enemy_oder[n].oder_speed = atof(inputc); break;
case 6 :enemy_oder[n].oder_start_time = atoi(inputc); break;
case 7 :enemy_oder[n].oder_danmag_kind = atoi(inputc); break;
case 8 :enemy_oder[n].oder_enemy_color = atoi(inputc); break;
case 9 :enemy_oder[n].oder_enemy_hp = atoi(inputc); break;
case 10:enemy_oder[n].oder_danmag_kind2= atoi(inputc); break;
case 11:enemy_oder[n].oder_wait = atoi(inputc); break;
case 12:enemy_oder[n].oder_item[0] = atoi(inputc); break;
case 13:enemy_oder[n].oder_item[1] = atoi(inputc); break;
case 14:enemy_oder[n].oder_item[2] = atoi(inputc); break;
case 15:enemy_oder[n].oder_item[3] = atoi(inputc); break;
case 16:enemy_oder[n].oder_item[4] = atoi(inputc); break;
case 17:enemy_oder[n].oder_item[5] = atoi(inputc); break;
}
num++;
if(num==18){
num=0;
n++;
}
}
EXFILE:
FileRead_close(fp);
}