C言語ゲームプログラミング 第11回講座
 

Study C Ver2販売開始のお知らせ

 C言語の勉強や教育用に最適です。
 2004/8/23よりStudy C Ver2の販売を開始しました。
 Study C Ver2の新しい機能については
 こちらをご参照ください。
C言語でゲームプログラマーを目指す方へ
 ■C言語プログラミング講座
 C言語の勉強は、当サイトで一番人気の
 C言語学習塾をご利用ください。


1.テキストの描画
説明画面やゲームの得点表示など、ウィンドウ内に文字を描画する用途は多数あります。 今回はゲーム用のウィンドウ上に文字を描画する方法を説明します。
printf()関数では、文字をゲーム用のウィンドウに表示することができません。 Study C本体のウィンドウに表示されてしまいます(デバッグ用にprintfを使えるので便利です)。
ゲーム用のウィンドウ上に文字を表示するには、gl_textout()関数を使用します。 この関数は指定するパラメータが多いですが、しばらくは描画する文字列と文字列の位置(X,Y座標)、大きさ、色だけを指定して使うことにします。

                                                                                                       
gl_textout("MSゴシック", 大きさ, 0, 0, X座標, Y座標, 文字列, 表示色, RGB(0,0,0), 0);
・大きさはポイント単位(を10倍した値)で指定します。
 ポイントの説明はここでは省略するので90前後の大きさで色々試してみてください。
・表示色は、gl_fillrect()関数で説明したようにRGB(...)で指定します。


次のプログラムは、文字列の大きさに90、135、180を指定(色も変えてます)している例です。

                                                                                                       
#include <graph.h>

main()
{
	gl_openwin(-1, -1, 640, 480, 0);
	gl_textout("MSゴシック", 90, 0, 0, 10, 50, "テストabc", RGB(255,255,255), RGB(0,0,0), 0);
	gl_textout("MSゴシック", 135, 0, 0, 10, 100, "テスト123", RGB(255,0,255), RGB(0,0,0), 0);
	gl_textout("MSゴシック", 180, 0, 0, 10, 150, "テストABC", RGB(0,255,255), RGB(0,0,0), 0);
	gl_refresh();
}




2.ゲームスコアの描画
gl_textout()関数でゲームの得点などを描画する場合、桁が変わると前に描画した文字が残ってしまう場合があるので注意する必要があります。 次のプログラムを実行してみたください。 9999と表示後にEnterキーを押すと100ではなく1009と表示されているように見えると思います。

                                                                                                       
#include <graph.h>

main()
{
	char	buff[100];
	int	score;

	gl_openwin(-1, -1, 640, 480, 0);
	score = 9999;
	sprintf(buff, "%d", score);
	gl_textout("MSゴシック", 100, 0, 0, 10, 50, buff, RGB(255,255,255), RGB(0,0,0), 0);
	getchar();
	score = 100;
	sprintf(buff, "%d", score);
	gl_textout("MSゴシック", 100, 0, 0, 10, 50, buff, RGB(255,255,255), RGB(0,0,0), 0);
	gl_refresh();
}

これを避けるためには、gl_fillrect()関数で描画したエリアを消去してしまう方法があります。 しかし、表示する最大桁数が決まっていれば次のようにsprintfの書式指定で回避することもできます(前に表示した所へ空白文字を描画することになります)。

                                                                                                       
#include <graph.h>

main()
{
	char	buff[100];
	int	score;

	gl_openwin(-1, -1, 640, 480, 0);
	score = 9999;
	sprintf(buff, "%4d", score);
	gl_textout("MSゴシック", 100, 0, 0, 10, 50, buff, RGB(255,255,255), RGB(0,0,0), 0);
	getchar();
	score = 100;
	sprintf(buff, "%4d", score);
	gl_textout("MSゴシック", 100, 0, 0, 10, 50, buff, RGB(255,255,255), RGB(0,0,0), 0);
	gl_refresh();
}

お問い合わせ先 C言語ゲームプログラミングのトップページに戻る Copyright(C) 2003 潟Iーキッド