ワンポイントテクニック No.001 G800シリーズ対応

キーの交互押し判定について

通常よく用いられているキーを交互に押しているかどうかの判定は次のとおりです。

10 F=0:X=0
20 K$=INKEY$
30 IF K$="1" AND F=0 THEN X=X+1:F=1
40 IF K$="3" AND F=1 THEN X=X+1:F=0
50 GOTO 20

 簡単に原理を説明します。まず、[1]を押した場合と[3]を押した場合の2通りについて判定するというのは分かると思いますが、それだけだと交互に押しているかどうかは分からないので、もう1つ別の変数を用意して前回どちらのキーが押されたのかということを記録しています。これをフラグといいます。
 これにより前回[1]が押され、かつ、今回[3]が押された場合、そして、その逆の2通りの判定を行えばよいことになります。

 実は、1つのIF文でANDさえも使わずに一発で判定する方法があるのです。

10 F=49:X=0
20 IF F=ASC INKEY$ THEN X=X+1:F=100-F
30 GOTO 20
 この方法によりメモリ節約と大幅な高速化が実現できます。
 では、なぜこれでキーの交互押しができるかと言うとFの値が49と51を繰り返すからです。これは、20行の最後に「PRINT F」を加えたら分かります。そうすれば、20行の「100」というのが使う2つのキーのアスキーコードを足したものだということが分かるでしょう。
 なお、使用するキーがテンキーの[1]〜[9]のどれか2つを使用する場合に限り、ASCの代わりにVALを使ったほうが高速化できます。例えば、[4]と[6]を交互に押す場合、Fの初期値は4となり、キーの値の合計値が10になるため20行は「F=10−F」となります。


RETURN

inserted by FC2 system