現在AVGゲームを作成しているのですが、シナリオスクリプトを他人に読まれたくない上、後々ページごとに特殊な処理を組み込めるようにする為に、プログラムに直接書き込む形で作ろうと思っています。
そこで、一ページ分の文字列や背景、立絵などの情報を持たせた構造体をページ数分配列定義してそれぞれに代入する形で作成しています。
現在構造体の定義やページ情報の代入、スクリプトエンジン部分が全て同じファイル内に書かれているのですが、スクリプト部分が肥大化してきたためそれを別なcppファイルに分けたいと考えております。
winmain関数からスクリプトを読み込む関数を呼び出している状態で、今後スクリプトファイル数は増えていくと思われるのですが、どのように書き換えていけばよろしいでしょうか?
特にどのファイルに何を書いてどういう風にインクルードして繋げればいいのかがよく分からないのでお願いします。
あと構造体のメンバ変数はページ情報の代入時とスクリプトエンジン関数内でしか使用しておりません。
下に必要そうなコードだけ端折って書きます。
//winmain.cpp
void AVGFunc(); //スクリプトエンジン関数のプロトタイプ宣言
#define Page0 10 //Page==そのシーンごとのページ数
#define Page1 10
struct AVG { //ページ情報を代入する構造体定義
char AVGText[120]; //文面
char AVGTextName[40]; //名前
}
AVG AVGTrack0[Page0]; //Track=シーン数
AVG AVGTrack1[Page1];
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
for(int a=0;a<Page0;a++){ //シーン1の代入
switch(a){
case 0:
strcpy(AVGTrack0[a].AVGText,"てすと@");
strcpy(AVGTrack0[a].AVGTextName,"御影石");
break;
case1:
strcpy(AVGTrack0[a].AVGText,"以下ページ数分続く@");
strcpy(AVGTrack0[a].AVGTextName,"御影石");
break;
}
}
for(;;){ //メインループのつもり
AVGFanc(); //スクリプトエンジン関数呼び出し
}
}
void AVGFanc(){ //スクリプトエンジン部分
}
これを出来れば下のような形に近づけるようなイメージでお願いします。
//winmain.cpp
void AVGFunc();
#define Page0 10 //Page==そのシーンごとのページ数
#define Page1 10
struct AVG {
char AVGText[120]; //文面
char AVGTextName[40]; //名前
}
AVG AVGTrack0[Page0]; //Track=シーン数
AVG AVGTrack1[Page1];
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
for(;;){ //メインループのつもり
AVGFanc(); //スクリプトエンジン関数呼び出し
}
}
void AVGFanc(){ //スクリプトエンジン部分
}
//track00.cpp
for(int a=0;a<Page0;a++){ //シーン1の代入
switch(a){
case 0:
strcpy(AVGTrack0[a].AVGText,"てすと@");
strcpy(AVGTrack0[a].AVGTextName,"御影石");
break;
case1:
strcpy(AVGTrack0[a].AVGText,"以下ページ数分続く@");
strcpy(AVGTrack0[a].AVGTextName,"御影石");
break;
}
}
//track01.cpp
for(int a=0;a<Page0;a++){ //シーン1の代入
switch(a){
case 0:
strcpy(AVGTrack1[a].AVGText,"てすと@");
strcpy(AVGTrack1[a].AVGTextName,"御影石");
break;
case1:
strcpy(AVGTrack1[a].AVGText,"以下ページ数分続く@");
strcpy(AVGTrack1[a].AVGTextName,"御影石");
break;
}
}