当たり判定ができたのは良かった
しかしステージ作りが予想以上にうまくいかなかった
何で敵の出現や動きを制御するのか
仕方がなく私は禁忌 カンニング を行うことにした
・・・・・・うまくいかない
参考にしているのは龍神録プログラミングの館 11章
どうも無限ループに陥っているらしい
原因を探る
長時間の格闘の結果どうやら if(input==EOF) に問題があるらしい
input の値が 255 を示すようになってから変化がない
そこで私はこの 255 にすればとにかくうまくいくじゃんと判断し実行 成功
なぜうまくいかなかったのか考える
ダウンロードしたプロジェクトを実行したときはうまくいった
なにかincludeしていないからだろうかと思い調べてみるもそうではなかった
さらに調べてみる
Dxライブラリの関数に FileRead_eof(int FileHandle) というものがあることを発見する
ファイルの終端かどうか調べるにはこの関数を使うらしい (終端なら0を返す)
よって
if(inputc==EOF) を
if(FileRead_eof(fp) != 0)
としてやればよさそうだ
DXライブラリの仕様がかわったのだろうか う~んなぞだ
STG2
RE: STG2
ここ↓(龍神録の館11章)を参考にしたのでint型になってますね charにしたらよかったんでしょうか
http://dixq.net/rp/11.html
でも↑のを実行するとちゃんと動くのでう~んってなります
http://dixq.net/rp/11.html
でも↑のを実行するとちゃんと動くのでう~んってなります
RE: STG2
//敵の出現情報をエクセルから読み込んで格納する関数
void GameFrame::load_story(){
int num,i,fp;
char fname[32]={"enemy_data.csv"};
int input[64];
char inputc[64];
Ch enemy;
fp = FileRead_open(fname);//ファイル読み込み
if(fp == 0){
printfDx("read error\n");
return;
}
for(i=0;i<2;i++)//最初の2行読み飛ばす
while(FileRead_getc(fp)!='\n');
num=0;
while(1){
for(i=0;i<64;i++){
inputc[i]=input[i]=FileRead_getc(fp);//1文字取得する
/*if(inputc[i]=='/'){//スラッシュがあれば
while(FileRead_getc(fp)!='\n');//改行までループ
i=-1;//カウンタを最初に戻して
continue;
}*/
if(input[i]==',' || input[i]=='\n'){//カンマか改行なら
inputc[i]='\0';//そこまでを文字列とし
break;
}
if(FileRead_eof(fp)!=0){//ファイルの終わりなら
goto EXFILE;//終了
}
}
switch(num){
case 0: enemy.cnt =atoi(inputc);break;
case 1: enemy.pattern =atoi(inputc);break;
case 2: enemy.type =atoi(inputc);break;
case 3: enemy.x =atof(inputc);break;
case 4: enemy.y =atof(inputc);break;
case 5: enemy.spd =atof(inputc);break;
case 6: enemy.atktime =atoi(inputc);break;
case 7: enemy.atktype =atoi(inputc);break;
case 8: enemy.life =atoi(inputc);break;
case 9: enemy.bltype =atoi(inputc);break;
case 10:enemy.wait =atoi(inputc);break;
}
num++;
if(num==11){
num=0;
enemctrl.enemy_order.push_back(enemy);
}
}
EXFILE:
FileRead_close(fp);
}
これで問題なく動いてるので、不便はないのですが