■ 新・ゲーム開発講座




■ へっぽこプログラミング入門♪


■第15夜:改行

さて、いよいよスクリプトコマンド充実編です♪ 今回は簡単なところから「改行」を実現してみましょう。仕様としては以下のようなものでした。

■書式: ;

■内容:テキスト表示を改行する



・・・ミもフタも無いような仕様ですが、まあ中身は超簡単です(笑)。改行というのは、文字の表示位置を変える操作です。テキスト・インタプリタでは1文字表示毎に文字位置をインクリメント(加算)しており、その値はグローバル変数 TEXT_X、TEXT_Y で保持しています。今回は、これを変更してやれば最小限の機能は実現できそうです。

■実行開始(撃つ)

今回は、コマンドと言っても実際には制御文字の処理にあたるものです。そこで、トリガ(引き金)は制御文字評価を行っている Check_control_chr() 内に設置します。と言っても、「;」を見つけたら改行を行う関数 Com_linefeed() を呼ぶだけです。



int Check_control_chr()
//*TEXT のポイントする1バイト文字をチェックし、
//制御文字であれば処理して true を返し、それ以外は
//false を返す

{

switch ( *TEXT ) {
case '#': Command_call(); //コマンド処理部を呼ぶ
TEXT++;
return true;

case 0x09: //TAB
case 0x0a: //LF
case 0x0d: //CR
return true; //何もしないで戻る==無視♪

case ';': Com_linefeed(); //[ ; ] 改行
return true;

}

return false; //制御文字に該当しなかった → falseを返す


}

実際のコマンド処理部分は以下のようなものです(Text_Com_01.cpp 参照)。テキスト表示位置を Xは行頭に、Yは1行下に変更しているだけです。あまりに単純なため、「回す」「締める」にあたる処理はありません。

int Com_linefeed()
{

//改行とは、表示位置を X → 行先頭に Y → 1段下にすること

TEXT_X = TEXT_AREA.left;

TEXT_Y += TEXT_Y_PITCH;

//※ここではまだ画面最下端を飛び出すところまでは想定していない
/*
if ( TEXT_Y > TEXT_AREA.bottom-TEXT_Y_PITCH ) {
本来、ここで「改ページ」処理を呼ぶ筈だが・・・まだ作ってない(汗 ^^;)

}
*/

return 0;


}


ただし、改行を続けていけばいつかは画面下端に当たってしまいます。その場合は「改ページ」処理が必要なのですが、残念ながらまだ作成していません。とりあえず、ここでは暫定仕様のままにして先に進みたいと思います。サンプルソースはこちらですので、動作を確認してみてください。




※文字が見にくい場合は TextEngine.cpp の Text_engine() にある色指定の部分を変更してみてください