STG2

Rom
記事: 25
登録日時: 15年前
住所: 日本

STG2

投稿記事 by Rom » 14年前

当たり判定ができたのは良かった
しかしステージ作りが予想以上にうまくいかなかった
何で敵の出現や動きを制御するのか

仕方がなく私は禁忌 カンニング を行うことにした




・・・・・・うまくいかない
参考にしているのは龍神録プログラミングの館 11章
どうも無限ループに陥っているらしい
原因を探る





長時間の格闘の結果どうやら if(input==EOF) に問題があるらしい
input の値が 255 を示すようになってから変化がない
そこで私はこの 255 にすればとにかくうまくいくじゃんと判断し実行  成功

なぜうまくいかなかったのか考える
ダウンロードしたプロジェクトを実行したときはうまくいった

なにかincludeしていないからだろうかと思い調べてみるもそうではなかった

さらに調べてみる


Dxライブラリの関数に FileRead_eof(int FileHandle) というものがあることを発見する
ファイルの終端かどうか調べるにはこの関数を使うらしい (終端なら0を返す)
よって
if(inputc==EOF) を
if(FileRead_eof(fp) != 0)
としてやればよさそうだ

DXライブラリの仕様がかわったのだろうか う~んなぞだ

アバター
みけCAT
記事: 6734
登録日時: 14年前

Re: STG2

投稿記事 by みけCAT » 14年前

inputの型はなんですか?
unsigned charになっていませんか?

Rom
記事: 25
登録日時: 15年前
住所: 日本

RE: STG2

投稿記事 by Rom » 14年前

ここ↓(龍神録の館11章)を参考にしたのでint型になってますね charにしたらよかったんでしょうか
http://dixq.net/rp/11.html

でも↑のを実行するとちゃんと動くのでう~んってなります

アバター
みけCAT
記事: 6734
登録日時: 14年前

Re: STG2

投稿記事 by みけCAT » 14年前

intの方がいいです。
inputcがunsigned charになっていませんか?

Rom
記事: 25
登録日時: 15年前
住所: 日本

RE: STG2

投稿記事 by Rom » 14年前

CODE:

//敵の出現情報をエクセルから読み込んで格納する関数
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);
}
char になってます
これで問題なく動いてるので、不便はないのですが

アバター
みけCAT
記事: 6734
登録日時: 14年前

Re: STG2

投稿記事 by みけCAT » 14年前

じゃあ、きちんと関数を使って判定しているこっちの方が安全でしょう。