キーリピート抑制 - 逆引き Casio Basic

逆引き Casio Basic
<目次>

誤字脱字・記載ミスや分かりにくい表現は随時追記・修正します

更新 2016/10/12

[fx-5800P / fx-9860GII / fx-CG20]

キーリピートを抑制する。


先ず、キーリピートするプログラムとして「キー判別プログラム」を作り、軽く素早くキーを叩いても、複数回キーが押されたような動作、つまりキーリピート動作することを確認する。その後、このキーリピートを抑制する。

最初に、[1] キーが押されたことを判別し、[1] HIT と表示するプログラムを、fx-5800P 用と fx-9860GII 用を、それぞれを作る。

[1] キーのキーコード
キーfx-5800Pfx-9860GII / fx-CG20
[1]3572


キーリピートするプログラム (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行はループ構造であり、Getkey0 でない時ループを継続する。Getkey0 の時、ループを抜ける。

※ 「Getkey0 でない」とは、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 が実行されると、Getkey0 以外の2桁のキーコードを得る。何もキーが押されていない時に Getkey が実行されると Getkey0 を得る。

そして、ループの継続条件として、Getkey とだけ記述しているので、Getkey0 でない (=真)か 0 である (=偽) かで判定される。その結果、このループは、以下の動作をする。

1) 何かキーが押されている時はこのループが継続し、プログラムが先に進まない。

2) ループが回っている時にキーが押されていないと、ループを抜けて、プログラムが先へ進む。

3) キーが押されていない時にこの While Getkey が実行されると、ループに入らず、プログラムは先へ進む。



 ⇒ Casio Basic コマンドリファレンス - Do ループ
 ⇒ Casio Basic コマンドリファレンス - While ループ
 ⇒ Casio Basic コマンドリファレンス - Getkey





応援クリックをお願いします。励みになるので...

人気ブログランキングへ


FC2ブログランキングへ



   



keywords: CasioBasic、プログラミング入門プログラム関数電卓

リンク集 | ブログ内マップ



関連記事

テーマ : プログラム関数電卓
ジャンル : コンピュータ

コメントの投稿

非公開コメント

最新記事
最新コメント
カテゴリ
C# (3)
検索フォーム
Visitors
Online Counter
現在の閲覧者数:
プロフィール

やす (Krtyski)

Author:やす (Krtyski)
since Oct 30, 2013


プログラム関数電卓は、プログラムを作り・使ってナンボ!

実際に触って気づいたこと、自作プログラム、電卓プログラミングについて書いています

おもしろい・役に立つならクリックしてください。励みになります。

人気ブログランキングへ


FC2ブログランキングへ


写真: 「4駆で泥んこ遊び@オックスフォード郊外」

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

RSSリンクの表示
最新トラックバック
ブロとも申請フォーム

この人とブロともになる

QRコード
QR