WindowsでのC言語開発の際に使用される、kbhit関数(キーイベント取得)について説明します。
※ このkbhit関数はLinuxのCコンパイラには存在しません。
LinuxのCコンパイラでkbhit関数を使用したい場合は、Linuxでのkbhit関数を参照して下さい。
kbhit関数とは、何かキーが押された場合0以外の値を返し、何もキーが押されていない場合は0を返す関数 です。
そして、関数が0以外の値を返した場合、バッファ内に入力されたキーが残ったままになっている為、
kbhit()の後には getch()でキー情報を取り出すのが定石となっています。
VC++でのヘッダーは、conio.hです。
また、VC++2005以降、kbhit関数は _kbhit関数に変更(?)されました。
・・・というわけで、VC++2010での_kbhit関数の使用例は以下の通り。
#include <stdio.h>
#include <conio.h>
#define ESC 27
int main(void)
{
int cnt = 0;
while (1) {
if (_kbhit() && _getch() == ESC) {
_cputs("\r\nYou Hit Esc-Key!!\r\n");
break;
}
printf("%d\r", ++cnt);
}
return 0;
}
実行結果)
実行するとカウンターが凄い勢いで回転し、ESCキーを押すとプログラムが終了します。
(カウンターの出力方法は、コチラを参照して下さい。)
VC++2010っぽく、
kbhit() のかわりに _kbhit()を、
getch() のかわりに _getch() を、
puts() のかわりに _cputs() を
使用してみました^^;)
この例だけだと「な~んだ、詰まらない」という気がしますが、
例えばC言語でテトリス・ぷよぷよ・インベーダーゲーム等のゲームを開発する際は、このkbhit関数は非常に重宝しますよ~。
ひょっとしたら参考になるかもしれないページ: