Casio Basic: Getkey
Casio Basic
コマンドリファレンス
Casio fx-5800P、fx-9860GII、fx-CG20、fx-CG50 で確認をとっています。Casio fx-FD10 Pro では互換性はあると考えられますが、実機で確認していないので「可能性」としてご覧ください。
fx-5800P / fx-9860GII / fx-CG20 / fx-CG50
Getkey
◆概 要:
押されたキーのキーコードを取得する。[AC]キー以外の全てのキーにはそれぞれ異なるキーコードが割り当てられている。
◆書 式: Getkey
◆引 数:なし
◆戻り値:
押されたキーのキーコードを返す。キーが押されていない場合は0を返す。
※ 互換性: キーコードはハードウェア(機種)に依存し、fx-5800P と fx-9860GII や fx-CG20/50ではキーコードが異なります。一方で、fx-9860GII と fxCG20/50 は全く同じです。
キーコードを知るには、取扱説明書を見るか、キーコード取得プログラムを実行してください。
Getkey を使うと[AC]キー以外のキーが押された時に、そのキーの判別ができます。
Getkey にはプログラムの実行を止めて、キー入力を待つ機能は備わっていません。Getkey はキーが押される時に実行されなければなりません。従って、キー入力を待ち受けるために、繰返し処理(ループ)の中に Getkey を記述する必要があります。
例えば、Do~LpWhile ループを使い、
Do
Getkey→K
[必要な処理]
LpWhile K=0
[押されたキーに応じた処理]
とします。このプログラム例は、Getkey が0を返す時(キーが押されていない時)は繰返し処理が継続され、0以外を返す時(何かキーが押された時)は、繰り返し処理を終える動作をします。
入力命令?を使うと、入力確定のために [EXE] キーを押す必要がありますが、Getkey を使えば [EXE] キーを押さずに、リアルタイムでキー入力に反応するプログラムを作れます。
fx-5800Pでは、キーが押された瞬間から所定の時間の範囲なら、Getkey でキーコードを取得できるようです。つまり、キーが押された、まさにその瞬間に Getkey が実行されていなくても、一定の時間的猶予が与えられます。
Lbl 0
0→C
Do
Getkey→K
LpWhile K=0
Locate 1,1," "
Locate 1,1,K
Goto 0
これを実行すると、最初に表示されるキーコードKの値は、プログラム実行開始で押さなければならない [EXE] キーの47となります。つまり、[EXE] が押された瞬間ではなくて、押されてから一定時間内で(短い時間ですが...)キーコードを取得していることがわかります。
次に、上のコードの冒頭のLbl 0 の上に、次のように赤文字で示した4行のコード(1000回ループ)を追加して、一定の待ち時間がかかるようにします。
1000→A
Lbl 1
Dsz A
Goto 1
Lbl 0
0→C
Do
Getkey→K
LpWhile K=0
Locate 1,1," "
Locate 1,1,K
Goto 0
すると、プログラム実行開始で押された [EXE] のキーコードを取得できないまま、キー入力待ちになります。つまり、キーが押されてから所定時間を経過すると Getkey はキーコードを取得できないことがわかります。
非常に長いループ(多くの処理が記述されていて、ループ1回がまわるのに時間がかかるループ)の内で Getkey でキー入力を監視すると、キーの取りこぼしが起こり得ます。キー入力監視は極力短めのループを使うようにすると良いでしょう。
fx-9860GII ではプログラムの実行が速いので、上記のような現象の違いを確認できません。むしろ実行速度が速いために、プログラムによっては、キーリピートを抑制するコード(赤文字部分)が必要になります。
While Getkey
WhileEnd
Do
Getkey→K
LpWhile K=0
赤文字の2行が、キーリピート抑制の働きをします。Getkey の戻り値が 0 でない限り、つまりキーがが押されている限り、このループが継続します。そして、キーが離れたら Getkey は 0 を返すのでループを脱出して次のキーコード取得が行われます。
応援クリックをお願いします。励みになるので...
コマンドリファレンス
Casio fx-5800P、fx-9860GII、fx-CG20、fx-CG50 で確認をとっています。Casio fx-FD10 Pro では互換性はあると考えられますが、実機で確認していないので「可能性」としてご覧ください。
2015/01/12 更新
fx-5800P / fx-9860GII / fx-CG20 / fx-CG50
Getkey
◆概 要:
押されたキーのキーコードを取得する。[AC]キー以外の全てのキーにはそれぞれ異なるキーコードが割り当てられている。
◆書 式: Getkey
◆引 数:なし
◆戻り値:
押されたキーのキーコードを返す。キーが押されていない場合は0を返す。
※ 互換性: キーコードはハードウェア(機種)に依存し、fx-5800P と fx-9860GII や fx-CG20/50ではキーコードが異なります。一方で、fx-9860GII と fxCG20/50 は全く同じです。
キーコードを知るには、取扱説明書を見るか、キーコード取得プログラムを実行してください。
取扱説明書 | キーコード取得プログラム | |
fx-5800P | 99 ページ | プログラムライブラリ - キーコード取得 |
fx-9860GII | 8-17 ページ | |
fx-CG20/50 | 8-20 ページ |
Getkey を使うと[AC]キー以外のキーが押された時に、そのキーの判別ができます。
Getkey にはプログラムの実行を止めて、キー入力を待つ機能は備わっていません。Getkey はキーが押される時に実行されなければなりません。従って、キー入力を待ち受けるために、繰返し処理(ループ)の中に Getkey を記述する必要があります。
例えば、Do~LpWhile ループを使い、
Do
Getkey→K
[必要な処理]
LpWhile K=0
[押されたキーに応じた処理]
とします。このプログラム例は、Getkey が0を返す時(キーが押されていない時)は繰返し処理が継続され、0以外を返す時(何かキーが押された時)は、繰り返し処理を終える動作をします。
入力命令?を使うと、入力確定のために [EXE] キーを押す必要がありますが、Getkey を使えば [EXE] キーを押さずに、リアルタイムでキー入力に反応するプログラムを作れます。
fx-5800Pでは、キーが押された瞬間から所定の時間の範囲なら、Getkey でキーコードを取得できるようです。つまり、キーが押された、まさにその瞬間に Getkey が実行されていなくても、一定の時間的猶予が与えられます。
Lbl 0
0→C
Do
Getkey→K
LpWhile K=0
Locate 1,1," "
Locate 1,1,K
Goto 0
これを実行すると、最初に表示されるキーコードKの値は、プログラム実行開始で押さなければならない [EXE] キーの47となります。つまり、[EXE] が押された瞬間ではなくて、押されてから一定時間内で(短い時間ですが...)キーコードを取得していることがわかります。
次に、上のコードの冒頭のLbl 0 の上に、次のように赤文字で示した4行のコード(1000回ループ)を追加して、一定の待ち時間がかかるようにします。
1000→A
Lbl 1
Dsz A
Goto 1
Lbl 0
0→C
Do
Getkey→K
LpWhile K=0
Locate 1,1," "
Locate 1,1,K
Goto 0
すると、プログラム実行開始で押された [EXE] のキーコードを取得できないまま、キー入力待ちになります。つまり、キーが押されてから所定時間を経過すると Getkey はキーコードを取得できないことがわかります。
非常に長いループ(多くの処理が記述されていて、ループ1回がまわるのに時間がかかるループ)の内で Getkey でキー入力を監視すると、キーの取りこぼしが起こり得ます。キー入力監視は極力短めのループを使うようにすると良いでしょう。
fx-9860GII ではプログラムの実行が速いので、上記のような現象の違いを確認できません。むしろ実行速度が速いために、プログラムによっては、キーリピートを抑制するコード(赤文字部分)が必要になります。
While Getkey
WhileEnd
Do
Getkey→K
LpWhile K=0
赤文字の2行が、キーリピート抑制の働きをします。Getkey の戻り値が 0 でない限り、つまりキーがが押されている限り、このループが継続します。そして、キーが離れたら Getkey は 0 を返すのでループを脱出して次のキーコード取得が行われます。
応援クリックをお願いします。励みになるので...