ゲームの会話シーンなどで文字列を少しずつ表示させたいのですが、その際複数行を出せるようにしたいのです。少しずつ出す方法はゲームプログラミングの館のサウンドノベル風文字列表示法を使っています。
「
今日は
とっても
いい天気ですね。
」
この例ですと、一度に3行出ていることになります。
そして現在エクセルに書き込んだメッセージを配列に代入させるところまではできたのですが、
\nの扱いに困っています。
メッセージの代入は
mes[256] = "今日は\nとっても\nいい天気ですね。";
のように入っている状態です(と思う)。
これをmes_disp[256]に少しずつ代入して、少しずつ表示させます。
printfDxでmesとmes_dispを表示させると、しっかりと意図したところで改行がなされています。
しかし先ほどのmesもしくはmes_dispをDrawFormatStringで表示させてもエスケープシーケンスの\nは使用できないようなので、
今日は..とっても..いい天気ですね。というように表示されて改行がされません。
そこでmes_dispを
mes_disp[4][64]
という形に変更し、mes_disp[0]は一行目、mes_disp[1]は二行目…と最大で4行表示させようと考えました。
なので、まずはmesの中から\nの位置を知らなければ!ということで、テスト的に…
for(int i=0; i<256; i+=2;){//全角単位で読み込むためi+=2 if(mes=='\n') printfDx("確認"); }
としてみたところ、「確認」の文字が表示されませんでした。
ここでi+=2のところをi++に変更すると、今度は「確認」の文字が表示されます。
i+=2なのでmes[1]やmes[3]のように奇数に\nが入っていた場合、飛ばされてしまい上手く「確認」の文字が表示されないのもわかりますが、
私の場合は全て全角文字しか使用していません。
つまり「今日は\nとっても\nいい天気ですね」の場合
一つ目の\nはmes[6]に、二つめの\nはmes[15]となり、少なくとも一つ目の\nは認識されるはずです。
なのにもかかわらず一度も「確認」の文字が表示されないのはどういうことなのでしょうか…?
そして申し訳ないですがもう一つ…
龍神録プログラミングの館のエクセルを使って敵の出現データを作ってみようにて
一番初めに宣言されている、int input[64]とchar inputc[64]は何故わざわざ分けられているのでしょうか?
他の部分は全て理解できたのですが、ここだけが理解できません…
int n,num,i,fp; char fname[32]={"../dat/csv/storyH0.csv"}; int input[64];//コレ!! char inputc[64];//とコレ!! fp = FileRead_open(fname);//ファイル読み込み 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=input=FileRead_getc(fp);//1文字取得する if(inputc=='/'){//スラッシュがあれば while(FileRead_getc(fp)!='\n');//改行までループ i=-1;//カウンタを最初に戻して continue; } if(input==',' || input=='\n'){//カンマか改行なら inputc='\0';//そこまでを文字列とし break; } if(input==EOF){//ファイルの終わりなら goto EXFILE;//終了 } }