文字列でプログラムを操作

アバター
せんちゃ
記事: 50
登録日時: 15年前
住所: 江別市東野幌町
連絡を取る:

文字列でプログラムを操作

投稿記事 by せんちゃ » 14年前

CODE:

//scenario.h
//会話イベントはここに書きます
//このファイルはanalyze.cpp以外でインクルードしないでください
char CMD_BUF[] = {
	""
		""
		""
		""
		""
		""
		""
		""
		""
		""
		""
		""
		""
		""
		""
		""
		""
		""
		""
		""
		""
		""
		""
		""
	""
};
自分でタブを作り文字配列を読み込む、
そしてタブによって処理を変えていきます。

CODE:

//analyze.cpp
//scenario.hの命令の解析はここで行います。

void txt_Analyze( void )
{
	//キーの入力フラグがtrueのときは命令なし
	if( WAIT == true ){
		return;
	}
	//文末に着いたら処理しない
	if( CMD_BUF[txt_index] == '\0' ){
		return;
	}
	//読み込みの開始と終了
	///////////////////////////////////////////////////////////////
	if( strncmp( &CMD_BUF[txt_index] , "" , 6 ) == 0 ){
		txt_index += 6;
		return;
	}
	if( strncmp( &CMD_BUF[txt_index] , "" , 5 ) == 0 ){
		DrawFormatString( 0 , 60 , GetColor(255,255,255) , "読み込み終了" );
		return;
	}
	///////////////////////////////////////////////////////////////

	//立ち絵の表示フラグ
	///////////////////////////////////////////////////////////////
	if( strncmp( &CMD_BUF[txt_index] , "" , 7 ) == 0 ){
		txt_index += 7;
		show_flag.player = 1;
		return;
	}
	if( strncmp( &CMD_BUF[txt_index] , "" , 7 ) == 0 ){
		txt_index += 7;
		show_flag.boss_1 = 1;
		return;
	}
	///////////////////////////////////////////////////////////////
	//立ち絵の表示番号
	///////////////////////////////////////////////////////////////
	if( strncmp( &CMD_BUF[txt_index] , "" , 7 ) == 0 ){
		txt_index += 7;
		g_point.player = 0;
		return;
	}
	if( strncmp( &CMD_BUF[txt_index] , "" , 7 ) == 0 ){
		txt_index += 7;
		g_point.player = 1;
		return;
	}
	if( strncmp( &CMD_BUF[txt_index] , "" , 7 ) == 0 ){
		txt_index += 7;
		g_point.player = 2;
		return;
	}
	if( strncmp( &CMD_BUF[txt_index] , "" , 7 ) == 0 ){
		txt_index += 7;
		g_point.boss_1 = 0;
		return;
	}
	if( strncmp( &CMD_BUF[txt_index] , "" , 7 ) == 0 ){
		txt_index += 7;
		g_point.boss_1 = 1;
		return;
	}
	if( strncmp( &CMD_BUF[txt_index] , "" , 7 ) == 0 ){
		txt_index += 7;
		g_point.boss_1 = 2;
		return;
	}
	///////////////////////////////////////////////////////////////
	//吹き出しの位置
	///////////////////////////////////////////////////////////////
	if( strncmp( &CMD_BUF[txt_index] , "" , 10 ) == 0 ){
		txt_index += 10;
		ball_x     = 200;
		ball_y     = 300;
		ball_point =   0;
		return;
	}
	if( strncmp( &CMD_BUF[txt_index] , "" , 10 ) == 0 ){
		txt_index += 10;
		ball_x     =  50;
		ball_y     = 300;
		ball_point =   1;
		return;
	}
	if( strncmp( &CMD_BUF[txt_index] , "" , 9 ) == 0 ){
		txt_index += 9;
		Serif_cnt++;
		return;
	}
	///////////////////////////////////////////////////////////////
	//アルファブレンド値
	///////////////////////////////////////////////////////////////
	if( strncmp( &CMD_BUF[txt_index] , "" , 8 ) == 0 ){
		if( b_alpha >= 255 ){
			txt_index += 8;
		}
		if( b_alpha " , 8 ) == 0 ){
		if( b_alpha = 127 ){
			b_alpha -= 10;
		}
		b_x     = 250;
		return;
	}
	if( strncmp( &CMD_BUF[txt_index] , "" , 8 ) == 0 ){
		if( p_alpha >= 255 ){
			txt_index += 8;
		}
		if( p_alpha " , 8 ) == 0 ){
		if( p_alpha = 127 ){
			p_alpha -= 10;
		}
		pl_x = -100;
		return;
	}
	///////////////////////////////////////////////////////////////
	//がきたらフラグをtrueに
	if( strncmp( &CMD_BUF[txt_index] , "" , 6 ) == 0 ){
		txt_index += 6;
		WAIT = true;
		return;
	}

}


プレイヤーサイドが喋るとき、ボスが喋るときで
吹きだしとアルファ値を別々にコントロールします。


これの読み込みフラグをボスのいる地点、座標に着いたときに
1にしてプログラム始動。

タブを使って操作するところがHAMLっぽくて面白いです。
文字配列なので文が長いほどメモリ食うのが難点

アバター
にゃおきゃっと
記事: 1
登録日時: 14年前

Re: 文字列でプログラムを操作

投稿記事 by にゃおきゃっと » 14年前

いわゆるスクリプトですね!
こういった機構を導入するのは地味に面倒なので、きちんと動く物を創り上げたのは素晴らしいです。

ただ、折角文字列から扱える様にしたのですからスクリプト部は外部ファイル化してはどうでしょう?

書いてありますが、やはりソースコードに直接記述するのでは、メモリ・実行ファイルのサイズ的に宜しく無いです。

そこで、実行時にファイルから読み込むようにすれば色々とメリットを感受出来ます。
まず、テキストファイルを弄るだけで良いのでコンパイルの必要が無くなります。
また、作業分担をする際も他のメンバーにテキストファイルのみ編集してもらうだけ、で済むので分担が明確になります。

またまたまた、読み込むファイル名を変えるだけで処理の変更が出来て非常に柔軟です。

ではでは。

アバター
せんちゃ
記事: 50
登録日時: 15年前
住所: 江別市東野幌町
連絡を取る:

Re: 文字列でプログラムを操作

投稿記事 by せんちゃ » 14年前

にゃおきゃっとさん
コメントありがとうございます!

テキストファイルを作ってファイルポインタで
読み込むといった感じでしょうかね。。。^^;

いちいちビルドしなくても中身が変わってくれるのはありがたいですね(笑

余力があれば挑戦してみたいです!
ありがとうございますm(_ _)m