Skip to content

Instantly share code, notes, and snippets.

@yakimelon
Last active February 20, 2016 04:18
Show Gist options
  • Save yakimelon/2ef1c34eff1298db46c5 to your computer and use it in GitHub Desktop.
Save yakimelon/2ef1c34eff1298db46c5 to your computer and use it in GitHub Desktop.
/*ストーリー読み込み*/
TextClass::LoadStory(){
//真の変数
int FileHandle; //ファイルハンドル
char TmpBuf[128]; //テキスト取得用一時変数
char FileName[64]; //ファイル名格納
std::string TmpText; //テキスト取得後操作用一時オブジェクト
std::vector<std::string> SplitTextArray; //分割された文字を格納する配列
//カウンタ
int Count = 0; //カウンタ
int Scene = 0; //シーンカウンタ
//行数管理
int SerifNo = -1; //セリフのナンバーを格納(最初は必ず加算されるので、初期値は負の数にしておく)
//定数
const int SceneMax = 5; //シーンの最大値(シーン5まで読み込む)
const int LoadTextLen = 128; //読み込むテキストの文字数
const int NAME = 0; //分割された文字列を格納する配列に関するもの
const int TEXT = 1; //分割された文字列を格納する配列に関するもの
//SceneMax(定数)までロード
while( Scene <= SceneMax ){
//ファイル名を取得
sprintf(FileName,"./resource/story/story scene%d.txt",Scene);
//ファイルオープン
FileHandle = FileRead_open(FileName);
//ファイル終端までループ
while( FileRead_eof(FileHandle) == 0 ){
//ファイルから一行取得
FileRead_gets(TmpBuf,LoadTextLen,FileHandle);
//一文字目が '\0' なら空行と判断しスキップ
if( TmpBuf[0] == '\0' ) continue;
//char型配列のTmpBufをStringオブジェクトのTmpTextに変換
TmpText = TmpBuf;
//TmpTextの一文字目が'\0'ならば空行と判断しスキップ
if( TmpText[0] == NULL ) continue;
//全角・半角スペースを除去
CutSpace(TmpText);
//TmpTextの一文字目が'\0'ならば空行と判断しスキップ
if( TmpText[0] == '\0' ) continue;
//TmpTextをNameとTextに分割
SplitTextArray = StringSplit(TmpText,':');
//分割された文字列をNameとTextに代入
Name[Scene][Count] = SplitTextArray[NAME];
Text[Scene][Count] = SplitTextArray[TEXT];
//Nameが"コメント"ならコメントと判断しスキップ
if( Name[Scene][Count] == "コメント" ) continue;
//Textが'\0'なら前のテキストの続きと判断し、Nameに続きと代入し、TextにName(一行全て入ってる)の内容をコピー & 行数加算
//それ以外ならば次のテキストと判断し、SerifNoを加算し、行数加算
if( Text[Scene][Count] == "\0" ){
Text[Scene][Count] = Name[Scene][Count];
Name[Scene][Count] = "続き";
LineNo[Scene][SerifNo]++;
}else{
SerifNo++;
LineNo[Scene][SerifNo]++;
}
//最大行数加算
LineMax[Scene]++;
//カウントを進める
Count++;
}
//シーンカウントを進める
Scene++;
//カウント初期化
Count=0;
SerifNo=-1;
}
}
/*文字列分割*/
std::vector<std::string> TextClass::StringSplit(const std::string &Str,char Sep){
//いろいろ宣言
std::vector<std::string> V;
std::stringstream Ss(Str);
std::string Buffer;
const std::string EndOfText = "\0";
//文字列分割
while( std::getline(Ss,Buffer,Sep) ) V.push_back(Buffer);
//終端文字 '\0' を挿入
V.push_back(EndOfText);
return V;
}
/*テキストからスペースを取り除く*/
int TextClass::CutSpace(std::string &TmpText){
//変数宣言
int i = 0;   //空白除去処理に使うカウンタ
char TmpStr[3];   //空白除去処理につかう一時変数
const int BigSpaceSize = 2; //全角スペースのサイズ
//全角空白を取り除く処理
if( TmpText.length() >= BigSpaceSize ){
do{
if( TmpText.length() <= i ){
TmpText[0] = '\0';
return 0;
}
TmpStr[0] = TmpText[i];
TmpStr[1] = TmpText[i+1];
TmpStr[2] = '\0';
i+=2;
}while( strcmp(TmpStr," ") == 0 );
TmpText = &TmpText[i-2];
}
//半角スペースを取り除く処理
i=0;
while( TmpText[i] == ' ' ){
i++;
if( TmpText.length() <= i ){
TmpText[0] = '\0';
return 0;
}
}
TmpText = &TmpText[i];
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment