0からのゲームプログラミング > コンソール API

Back Next
更新日 2004.04.07
コンソール API

 ウィンドウズ・アプリケーションを創るのは、慣れるまで非常に時間が掛かりますよね。そこで、ここでは、コンソール・アプリケーションで簡単なゲームを創ってみましょう。


 コンソールで文字の色を変更したり、文字の表示位置を変更したり出来る コンソール API が幾つかあります。例えば、

SetConsoleCursorInfo
SetConsoleCursorPosition
SetConsoleTextAttribute
GetConsoleScreenBufferInfo
FillConsoleOutputAttribute
FillConsoleOutputCharacter


等です。これらの API を簡単に使って頂く為に、CConsole クラス として、一つのクラスにまとめてみました。これらの API の個別の使い方は、CConsole クラス のソースやMSDN 等を見て下さい。


 それでは、CConsole クラス の使用例を見てみます。まずは、カーソルの位置を変更し、自由な位置に文字を表示してみます。


サンプルコード

#include	<stdio.h>
#include	"Console.h"

void main(void)
{
	// CConsole クラスを宣言
	CConsole	cnsl;

	printf("012");

	// カーソルの位置を 3 列目の 1 行目に移動
	cnsl.SetCursorPosition(3, 1);

	printf("345");
}

実行結果
012
   345


 SetCursorPosition メンバ関数で、カーソルの位置を設定しています。第1引数には列 [x座標] を、第2引数には行 [y座標] を指定します。


 もちろんこの場合には、以下のようにした方が簡単ですが。
 

	printf("012\n   345");


 次は、前景色・背景色を変更してみましょう。

サンプルコード

#include	<stdio.h>
#include	"Console.h"

void main(void)
{
	// CConsole クラスを宣言
	CConsole	cnsl;

	printf("012");

	// カーソルの位置を 3 列目の 1 行目に移動
	cnsl.SetCursorPosition(3, 1);

	// 前景色は黄色、背景色は黒色
	cnsl.SetColor(H_YELLOW, L_BLACK);

	printf("345");
}

実行結果
012
   345


 SetColor メンバ関数で、前景色と背景色を設定しています。第1引数には前景色 [文字色] を、第2引数には背景色を指定します。引数に指定出来るのは、0 〜 15 の 16 パターンの色を指定出来ます。数字だと何色か分かり難いので、列挙型として定義しています。

 

//====================================================================
//			列挙型
//====================================================================
enum {
	L_BLACK,  // 低輝度・黒色
	L_BLUE,   // 低輝度・青色
	L_GREEN,  // 低輝度・緑色
	L_CYAN,   // 低輝度・水色
	L_RED,    // 低輝度・赤色
	L_PURPLE, // 低輝度・紫色
	L_YELLOW, // 低輝度・黄色
	L_WHITE,  // 低輝度・白色

	H_BLACK,  // 高輝度・黒色
	H_BLUE,   // 高輝度・青色
	H_GREEN,  // 高輝度・緑色
	H_CYAN,   // 高輝度・水色
	H_RED,    // 高輝度・赤色
	H_PURPLE, // 高輝度・紫色
	H_YELLOW, // 高輝度・黄色
	H_WHITE,  // 高輝度・白色
};


 SetColor メンバ関数では、SetConsoleTextAttribute という API を使っているのですが、その API の前景色属性には、4つの定数 FOREGROUND_BLUE、FOREGROUND_GREEN、FOREGROUND_RED、FOREGROUND_INTENSITY の組み合わせしか指定出来ない為に、16 [ 24 ] パターンに限られてきます。

 同じように、背景色も 16 パターンになります。定数は、BACKGROUND_BLUE、BACKGROUND_GREEN、BACKGROUND_RED、BACKGROUND_INTENSITY の4つ。

 

#define FOREGROUND_BLUE      0x0001 // 青色(前景色)
#define FOREGROUND_GREEN     0x0002 // 緑色(前景色)
#define FOREGROUND_RED       0x0004 // 赤色(前景色)
#define FOREGROUND_INTENSITY 0x0008 // 輝度(前景色)

#define BACKGROUND_BLUE      0x0010 // 青色(背景色)
#define BACKGROUND_GREEN     0x0020 // 緑色(背景色)
#define BACKGROUND_RED       0x0040 // 赤色(背景色)
#define BACKGROUND_INTENSITY 0x0080 // 輝度(背景色)


 CConsole クラス には、カーソルの表示・非表示を切り替える SetCursorInfo メンバ関数と、画面をクリアする Clear メンバ関数も用意しています。


 後、ゲームを創る為には、キーボード入力をリアルタイムに取得する必要がありますね。scanf 関数では、処理が止まってしまいますから。以下は、リアルタイムにキーボード入力の文字コードを表示させるサンプルです。


サンプルコード

#include	<stdio.h>
#include	<conio.h>		// kbhit, getch 関数の使用に必要
#include	<windows.h>	// Sleep 関数の使用に必要

void main(void)
{
	int	nKey;	// キーコード

	// 無限ループ
	while(1)
	{
		// キーが押されていたら、キーコードを取得する
		if(kbhit())
			nKey = getch();
		else
			nKey = 0;

		printf("%d\n", nKey);

		::Sleep(60);
	}
}


 kbhit 関数は、キーボード入力の有無を調べます。キーが押されている場合のみ、getch 関数で文字コードを取得しています。現在のコンピュータは処理が非常に速いので、Sleep 関数で適当に処理を中断しています。


 以上の内容から、コンソールで簡単なゲームを創ってみて下さい。

【スポンサード リンク】


Back Next

0からのゲームプログラミング > コンソール API