キーリピート抑制 - Casio Basicプログラミング
Casio Basicプログラミング
誤字脱字・記載ミスや分かりにくい表現は随時追記・修正します
更新 2016/10/12
更新 2016/10/12
キーリピートを抑制したい。
先ず、キーリピートするプログラムとして「キー判別プログラム」を作り、軽く素早くキーを叩いても、複数回キーが押されたような動作、つまりキーリピート動作することを確認する。その後、このキーリピートを抑制する。
最初に、[1] キーが押されたことを判別し、[1] HIT と表示するプログラムを、fx-5800P 用と fx-9860GII 用を、それぞれを作る。
キー | fx-5800P | fx-9860GII / fx-CG20 |
[1] | 35 | 72 |
キーリピートするプログラム (fx-5800P)
While 1
Do
Getkey→K
LpWhile K=0
If K=35
Then "[1] HIT"
IfEnd
WhileEnd
キーリピートするプログラム (fx-9860GII / fx-CG20)
While 1
Do
Getkey→K
LpWhile K=0
If K=72
Then "[1] HIT"
IfEnd
WhileEnd
何かキーが押されるまで Do ループが継続し、何かキーが押されれば Do ループが終わる。押したキーが [1] キーの場合は、If 文の記述に従って、 [1] HIT と表示する。
上のサンプルプログラムでは、[1] キーを素早く叩いても、複数回押されたような、キーリピート動作をする。
このキーリピートを抑制するために、茶色文字で示した2行(※)を追加する。
キーリピート抑制したプログラム (fx-5800P)
While 1
While Getkey (※)
WhileEnd (※)
Do
Getkey→K
LpWhile K=0
If K=35
Then "[1] IS HIT"
IfEnd
WhileEnd
キーリピート抑制したプログラム (fx-9860GII / fx-CG20)
While 1
While Getkey (※)
WhileEnd (※)
Do
Getkey→K
LpWhile K=0
If K=72
Then "[1] IS HIT"
IfEnd
WhileEnd
While Getkey
WhileEnd
の2行はループ構造であり、Getkey が 0 でない時ループを継続する。Getkey が 0 の時、ループを抜ける。
※ 「Getkey が 0 でない」とは、Getkey が実行され、そこで得られたキーコードが 0 でない、という意味.
この2行は、以下のように書いても同じことになる。これを理解するには2つの重要ポイントがある。
While Getkey≠0
WhleEnd
ループ継続条件の判定について
While [ループ継続条件]
WhileEnd
の書式の [ループ継続条件] は、それが「真」か「偽」かを判定するのが本質となる。
Getkey≠0 は、「Getkeyの実行結果が0でないこと」が、「真」であるか?「偽」であるか?が判定される。
判定における「真」と「偽」
判定結果が、「真」か「偽」かは、Casio Basicの処理の内部では、それが「0でない=真」か「0である=偽」として処理されている。
この内部処理は、While だけでなく、Do ループで使う LpWhile や If 、⇒ 命令などの全ての条件判定で通用する本質的なもので、重要なポイントだ。この考え方は、Casio Basic独自のものではなく、プログラミング言語で広く受け入れられ採用されているものである。Casio Basic はプログラミング言語の標準仕様を取り入れている、と言える。
つまり、Getkey≠0 を判定条件として使う場合、Getkey≠0 が 成り立てば「真」、成り立たないと「偽」となる。
一方判定条件として、Getkey とだけ記述する場合、Getkey が実行された結果が 0 でなければ「真」、0 ならば「偽」と判定される。
これらの2つの記述は、全く異なった判定方法であり、それは上の2つの重要ポイントから理解できる。
While Getkey は、While Getkey≠0 の省略形ではない。
上のサンプルプログラムでは、While 1 / WhileEnd と言う記述があるが、While 1 の 「1」 は、判定条件として常に「真」であることを意味している。だから、この表記は無限ループになるわけだ。
==========
以上を正しく理解した上で、改めてプログラムの動作を詳しくみてゆく。
Getkey は、これが実行された時に、何かキーが押されているかどうかを判定し、キーコードを調べる。従って押されたキーの判定を Getkey で行うには、ループの中に Getkey を記述し、何かキーが押された時に必ず Getkey が実行されるようにしなければならない。つまりGetkey はループ処理の中で使う必要がある。
そして、何か1つのキーが押されている時に Getkey が実行されると、Getkey は 0 以外の2桁のキーコードを得る。何もキーが押されていない時に Getkey が実行されると Getkey は 0 を得る。
そして、ループの継続条件として、Getkey とだけ記述しているので、Getkey が 0 でない (=真)か 0 である (=偽) かで判定される。その結果、このループは、以下の動作をする。
1) 何かキーが押されている時はこのループが継続し、プログラムが先に進まない。
2) ループが回っている時にキーが押されていないと、ループを抜けて、プログラムが先へ進む。
3) キーが押されていない時にこの While Getkey が実行されると、ループに入らず、プログラムは先へ進む。
⇒ Casio Basic コマンドリファレンス - Do ループ
⇒ Casio Basic コマンドリファレンス - While ループ
⇒ Casio Basic コマンドリファレンス - Getkey
応援クリックをお願いします。励みになるので...
- 関連記事
-
-
逆引き Casio Basic について 2015/04/28
-
矢印キーで項目選択(2) - Casio Basicプログラミング 2015/04/28
-
矢印キーで項目選択(1) - Casio Basicプログラミング 2015/04/28
-
矢印キーの判別 - Casio Basicプログラミング 2015/04/28
-
キーリピート抑制 - Casio Basicプログラミング 2015/04/28
-