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

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

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


1.マウスカーソル位置の取得
マウスカーソルの位置を取得するには、gl_gemousepos()関数を使用します。 マウスカーソルの(X,Y)座標がパラメータで指定した変数に格納され返されます。 パラメータ変数に値を返すのでポインタとして指定します。

                                                                               
gl_getmousepos(long *px, long *py);
px : マウスカーソルのX座標が返されます。
py : マウスカーソルのY座標が返されます。
long型へのポインタなので注意してください。

返り値が1の場合、マウスカーソルがウィンドウ内にあり、ウィンドウが前面に表示されています。
それ以外の場合は、0が返されます。

例)
long px, py;
gl_getmousepos(&px, &py);
マウスカーソルの位置が変数px、pyにセットされます。

いつものボールが表示されるプログラムを改造して、マウス位置にボールが移動するプログラムを作成します。 gl_getmousepos()関数が返すマウスカーソルの位置をボールの位置用の変数(b_xx,b_yy)に代入すれば、マウスカーソルの移動にあわせてボールが動くようになります。

                                                                               
#include <graph.h>

main()
{
	HBITMAP	hbmp_ball;
	int	b_xx, b_yy, bold_xx, bold_yy, rc;
	long	xx, yy;
	unsigned long
		tick;

	gl_openwin(-1, -1, 640, 480, 0);

	hbmp_ball = gl_loadbitmap("ball.bmp");
	if(hbmp_ball == NULL){
		printf("ビットマップファイルが見つかりません.\n");
		exit(0);
	}

	bold_xx = bold_yy = -1;
	b_xx = 320;
	b_yy = 240;
	tick = GetTickCount();

	for(;;){
		if(GetTickCount() >= tick && GetTickCount() < tick + 50)
			continue;
		tick = GetTickCount();

		if(gl_getkeystate(VK_ESCAPE) < 0)
			break;

		//マウスカーソルの位置を取得する。
		if(gl_getmousepos(&xx, &yy)){
			//long型へのポインタなので一旦別の変数xx,yyで取得し
			//b_xx,b_yyへ代入する。
			b_xx = xx;
			b_yy = yy;

			//ボールがウィンドウからはみ出さないためのチェック
			if(b_xx < 0)
				b_xx = 0;
			if(b_xx > 640 - 16)
				b_xx = 640 - 16;
			if(b_yy < 0)
				b_yy = 0;
			if(b_yy > 480 - 16)
				b_yy = 480 - 16;
		}

		if(bold_xx != b_xx || bold_yy != b_yy){
			if(bold_xx != -1 && bold_yy != -1){
				gl_fillrect(bold_xx, bold_yy, bold_xx + 16, bold_yy + 16, RGB(0, 0, 0));
			}
			bold_xx = b_xx;
			bold_yy = b_yy;
			gl_drawbitmap(hbmp_ball, b_xx, b_yy, 16, 16, 0, 0);
		}
		gl_refresh();
	}
}

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