今回は分岐と選択肢で
セリフを管理する構造体にどこへ飛ぶか用に変数を追加
ロードのcase3が追加した変数にデータを保存しています
名前(なしのとき0)*セリフ*選択肢(なしでも可)*@数字(選択肢がないときなし)
で管理を行いました
数字には飛びたい行の数字-1を入れる
例えば、テスト用では
一行目、二行目は表示され
三行目のときに
選択肢1を選択すると一行目が表示され、ループします
選択肢2を選択すると名前と四行目が表示される
セーブ以外は実装したいものが形になってきたので
次はストーリーとゲーム性について考えてきます
オフトピック
実装したいもの
- セーブ
- セリフ表示
- セリフをスクリプトで管理
- 選択肢と分岐
*テスト用
► スポイラーを表示
CODE:
0*一行目
0*二行目
0*三行目…*選択肢1@選択肢2*@0@3
名前*四行目
*構造体
► スポイラーを表示
CODE:
struct Display_t{
//名前
char name[100];
//セリフ
char words[256];
//選択肢
char choice[256];
//飛ぶ
int step[/*最大個数*/2];
};
struct Novel_t{
//表示管理
Display_t display[/*最大行*/10];
//時間
int time;
//文字位置
int cpos;
//行位置
int tpos;
//カーソル
int cursor;
};
*ロード
► スポイラーを表示
CODE:
//スクリプトロード
void Load( int FileHandle ){
int line,pos,env;
line=0;
pos=0;
env=0;
char words;
Novel_t novel_ini={0,};
novel=novel_ini;
for(;;){
/*ファイルの終わりか*/
if( FileRead_eof(FileHandle)!=0 ){
break;
}
/*文字の取得*/
words = (char)FileRead_getc( FileHandle );
switch(env){
case 0:/*名前*/
switch(words){/*読み込みルール*/
case '*':
novel.display[line].name[pos]='\0';
env++;
pos=0;
break;
case 10:
break;
case '0':
novel.display[line].name[pos]=0;
pos++;
break;
default:/*それ以外*/
novel.display[line].name[pos]=words;
pos++;
break;
}
break;
case 1:/*セリフ*/
switch(words){/*読み込みルール*/
case '*':
env++;
pos=0;
break;
case 10:/*改行*/
break;
case 13:/*復帰*/
novel.display[line].words[pos]='\0';
line++;
pos=0;
env=0;
break;
default:/*それ以外*/
novel.display[line].words[pos]=words;
pos++;
break;
}
break;
case 2:/*選択肢*/
switch(words){/*読み込みルール*/
case '*':
env++;
pos=0;
break;
case 10:/*改行*/
break;
case 13:/*復帰*/
novel.display[line].choice[pos]='\0';
line++;
pos=0;
env=0;
break;
default:/*それ以外*/
novel.display[line].choice[pos]=words;
pos++;
break;
}
break;
case 3:/*どこへ飛ぶか*/
//整数値用文字列
char words_i[3]={0};
for(int i=0;i<SIZELONG(novel.display[line].step); i++){
for(int j=0;j<SIZELONG(words_i);j++){
//数字か@かを確認するため
char words_s=(char)FileRead_getc( FileHandle );
if(words_s=='@')
break;
words_i[j]=words_s;
novel.display[line].step[i]=atoi(words_i);
}
}
line++;
pos=0;
env=0;
break;
}
}
}