Last active
February 20, 2016 04:18
-
-
Save yakimelon/2ef1c34eff1298db46c5 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*ストーリー読み込み*/ | |
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