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

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

 C言語の勉強や教育用に最適です。
 2004/8/23よりStudy C Ver2の販売を開始しました。
 Study C Ver2の新しい機能については
 こちらをご参照ください。

1.キー入力で上下左右に動くボール
前回作成した、gl_getkeystate()関数を使用したプログラムを上下方向にも移動できるように改造してみます(また、ESCキーを押すとプログラムが終了する処理も追加します)。

改造は、X軸方向の処理と同じことをY軸方向に付いても行えば良いだけです。

                                                                               
#include <graph.h>

main()
{
	HBITMAP	hbmp_ball;
	int	b_xx, b_yy, bold_xx, bold_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();

		//ESCキーを押したらプログラムが終了する処理も追加
		if(gl_getkeystate(VK_ESCAPE) < 0)
			break;

		if(gl_getkeystate(VK_LEFT) < 0){
			b_xx -= 10;
			if(b_xx < 0)
				b_xx = 0;
		}
		if(gl_getkeystate(VK_RIGHT) < 0){
			b_xx += 10;
			if(b_xx > 640 - 16)
				b_xx = 640 - 16;
		}

		//カーソルの上下キーが押されているときの処理を追加
		if(gl_getkeystate(VK_UP) < 0){
			b_yy -= 10;
			if(b_yy < 0)
				b_yy = 0;
		}
		if(gl_getkeystate(VK_DOWN) < 0){
			b_yy += 10;
			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();
	}
}

このプログラムを実行して上下左右のカーソルキーを押してみてください。 上下左右方向にボールが動くと思います。ここで、上と左のカーソルキーを同時に押してみてください。 ボールが斜め方向に動くと思います。kbhit()、getch()関数の組み合わせではできなかった処理です。




2.マウスのボタン状態の取得
gl_getkeystate()関数はマウスボタンが押されているかどうかの状態も取得することができます。
マウスボタンの状態を取得するには、引数にVK_LBUTTON/VK_RBUTTONを指定します。 また、Shiftキーを押すとBEEP音を鳴らすという処理も加えました。

                                                                               
#include <graph.h>

main()
{
	HBITMAP	hbmp_ball;
	int	b_xx, bold_xx;
	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 = -1;
	b_xx = 320;
	tick = GetTickCount();

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

		//左カーソルキーが押されていれば移動処理を行います。
		if(gl_getkeystate(VK_LBUTTON) < 0){
			b_xx = b_xx - 10;
			if(b_xx < 0)
				b_xx = 0;
		}
		//右カーソルキーが押されていれば移動処理を行います。
		if(gl_getkeystate(VK_RBUTTON) < 0){
			b_xx = b_xx + 10;
			if(b_xx > 640 - 16)
				b_xx = 640 - 16;
		}
		//Shiftキーが押されたらBEEP音を鳴らします。
		if(gl_getkeystate(VK_SHIFT) < 0){
			MessageBeep(0);
		}

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

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