ページ 11

龍神録11章の日が暮れてしまうところ

Posted: 2013年6月29日(土) 20:13
by mi_l
龍神録の11章で、init関係のところで説明が端折られてるところについて質問です。

とても気になっていました。

質問箇所のコードをコピペして貼ります

コード:

//敵の出現情報をエクセルから読み込んで格納する関数
void load_story(){
        int n,num,i,fp;
        char fname[32]={"../dat/csv/storyH0.csv"};        //(質問)なぜ配列数は32個なのか(以下2行同様64個なのか?)
        int input[64];
        char inputc[64];                          //(質問)256ではだめなのか?

        fp = FileRead_open(fname);//ファイル読み込み      //(質問)fpがint型なのはなぜ?char型だとどうなるのか?
        if(fp == NULL){
                printfDx("read error\n");
                return;
        }
        for(i=0;i<2;i++)//最初の2行読み飛ばす
                while(FileRead_getc(fp)!='\n');

        n=0 , num=0;
        while(1){
                for(i=0;i<64;i++){
                        inputc[i]=input[i]=FileRead_getc(fp);//1文字取得する
                        if(inputc[i]=='/'){//スラッシュがあれば                //(質問)スラッシュなんてない(あるのは意味はわからないが「-1」という値)
                                while(FileRead_getc(fp)!='\n');//改行までループ
                                i=-1;//カウンタを最初に戻して                       //(質問)なんで「-1」なのか?      
                                continue;
                        }
                        if(input[i]==',' || input[i]=='\n'){//カンマか改行なら       //(質問)改行は何が基準なのか?どうすれば改行とみなされる?(txtファイルの場合は?)
                                inputc[i]='\0';//そこまでを文字列とし
                                break;
                        }
                        if(input[i]==EOF){//ファイルの終わりなら
                                goto EXFILE;//終了
                        }
                }
                switch(num){                                  //(質問)ここは、「inputc(char型)」で受け取った値を正数値(int型)に直して代入、ということでよいのか・・・
                        case 0: enemy_order[n].cnt      =atoi(inputc);break;
                        case 1: enemy_order[n].pattern  =atoi(inputc);break;
                        case 2: enemy_order[n].knd      =atoi(inputc);break;
                        case 3: enemy_order[n].x        =atof(inputc);break;
                        case 4: enemy_order[n].y        =atof(inputc);break;
                        case 5: enemy_order[n].sp       =atof(inputc);break;
                        case 6: enemy_order[n].bltime   =atoi(inputc);break;
                        case 7: enemy_order[n].blknd    =atoi(inputc);break;
                        case 8: enemy_order[n].col      =atoi(inputc);break;
                        case 9: enemy_order[n].hp       =atoi(inputc);break;
                        case 10:enemy_order[n].blknd2   =atoi(inputc);break;
                        case 11:enemy_order[n].wait     =atoi(inputc);break;
                        case 12:enemy_order[n].item_n[0]=atoi(inputc);break;
                        case 13:enemy_order[n].item_n[1]=atoi(inputc);break;
                        case 14:enemy_order[n].item_n[2]=atoi(inputc);break;
                        case 15:enemy_order[n].item_n[3]=atoi(inputc);break;
                        case 16:enemy_order[n].item_n[4]=atoi(inputc);break;
                        case 17:enemy_order[n].item_n[5]=atoi(inputc);break;
                }
                num++;
                if(num==18){
                        num=0;
                        n++;
                }
        }
EXFILE:
        FileRead_close(fp);
}

質問もコード内に書いてしまいましたが・・・

それと、ダウンロードしたcsvファイル内の「-1」とはなんなのでしょうか?どのように利用されるのでしょうか?

ご教授お願いします。

Re: 龍神録11章の日が暮れてしまうところ

Posted: 2013年6月29日(土) 20:38
by non

コード:

        char fname[32]={"../dat/csv/storyH0.csv"};        
//(質問)なぜ配列数は32個なのか(以下2行同様64個なのか?)

多ければメモリがもったいないだけで問題ないと思います。

コード:

        char inputc[64];                          //(質問)256ではだめなのか?
同様に、いいんじゃないですか。

コード:

fp = FileRead_open(fname);//ファイル読み込み      
//(質問)fpがint型なのはなぜ?char型だとどうなるのか?
関数の戻り値がintになってるから、intにするのが当たり前。

コード:

if(inputc[i]=='/'){//スラッシュがあれば                
//(質問)スラッシュなんてない(あるのは意味はわからないが「-1」という値)

ちゃんとあるでしょ。

コード:

i=-1;//カウンタを最初に戻して                       //(質問)なんで「-1」なのか?
そのあとi++されるから0になる。

コード:

if(input[i]==',' || input[i]=='\n'){//カンマか改行なら       
//(質問)改行は何が基準なのか?どうすれば改行とみなされる?(txtファイルの場合は?)

質問の意味がわからない。わかるように質問して?

コード:

//(質問)ここは、「inputc(char型)」で受け取った値を正数値(int型)に直して代入、ということでよいのか・
正数ではなく整数

>それと、ダウンロードしたcsvファイル内の「-1」とはなんなのでしょうか?どのように利用されるのでしょうか?
もっと後で使われるが、落とすアイテムがないということ。

Re: 龍神録11章の日が暮れてしまうところ

Posted: 2013年6月29日(土) 20:59
by mi_l
返信ありがとうございます

一応ダウンロードしたcsvデータをメモ帳で開いてみました

コード:

/カウンタ,移動パターン,敵の種類,x座標,y座標,スピード,発射時間,弾幕種類,弾の色,体力,弾種類,待機時間,アイテム1,2,3,4,5,6
/cnt,pattern,knd,x,y,sp,bltime,blknd,col,hp,blknd2,wait,item_n,,,,,
60,0,0,200,-20,0,60,1,0,300,5,180,0,-1,-1,-1,-1,-1
100,0,0,260,-20,0,60,1,0,300,6,180,0,-1,-1,-1,-1,-1
140,0,0,320,-20,0,60,1,0,300,7,180,0,-1,-1,-1,-1,-1
180,0,0,380,-20,0,60,1,0,300,8,180,0,-1,-1,-1,-1,-1
220,0,0,320,-20,0,60,1,0,300,9,180,0,-1,-1,-1,-1,-1
260,0,0,260,-20,0,60,1,0,300,8,180,0,-1,-1,-1,-1,-1
300,0,0,200,-20,0,60,1,0,300,7,180,0,-1,-1,-1,-1,-1
340,0,0,140,-20,0,60,1,0,300,6,180,0,-1,-1,-1,-1,-1
380,0,0,80,-20,0,60,1,0,300,5,180,0,-1,-1,-1,-1,-1
420,0,0,20,-20,0,60,1,0,300,6,180,0,-1,-1,-1,-1,-1
460,0,0,80,-20,0,60,1,0,300,7,180,0,-1,-1,-1,-1,-1
500,0,0,140,-20,0,60,1,0,300,8,180,0,-1,-1,-1,-1,-1
540,0,0,200,-20,0,60,1,0,300,9,180,0,-1,-1,-1,-1,-1
580,0,0,260,-20,0,60,1,0,300,8,180,0,-1,-1,-1,-1,-1
620,0,0,320,-20,0,60,1,0,300,7,180,0,-1,-1,-1,-1,-1
660,0,0,380,-20,0,60,1,0,300,6,180,0,-1,-1,-1,-1,-1
700,0,0,300,-20,0,60,1,0,300,5,180,0,-1,-1,-1,-1,-1
740,0,0,220,-20,0,60,1,0,300,6,180,0,-1,-1,-1,-1,-1
780,0,0,140,-20,0,60,1,0,300,7,180,0,-1,-1,-1,-1,-1
最初の2行は飛ばすので、読み込むのは数字の個所だと思うのですが・・・スラッシュってどこにあるんですか?

Re: 龍神録11章の日が暮れてしまうところ

Posted: 2013年6月29日(土) 21:30
by non
確かに、最初の2行は読み飛ばしてますが、今後間にコメントが入ることがあります。

Re: 龍神録11章の日が暮れてしまうところ

Posted: 2013年6月29日(土) 21:34
by softya(ソフト屋)
/がちゃんと動作していれば最初の2行を読み飛ばす必要も無いですけどね。 → コメント機能です。

Re: 龍神録11章の日が暮れてしまうところ

Posted: 2013年6月29日(土) 21:43
by mi_l
nonさん、ソフト屋さん、返信ありがとうございます。

なるほど、先を考えて書いたコードだったのですね!!




この質問の延長としてもう一つトピックを立てますので、そちらでもご教授お願いします。