Casio Basic入門8
Casio Basic入門
誤字脱字・記載ミスや分かりにくい表現は随時追記・修正します
最終: 2018/02/10
最終: 2018/02/10
4. CasioBasicを使ってみる(続き)
Chapter 1 - 初級
Getkey と Locate コマンドを使いこなす
前回: Casio Basic入門7
◆ Chapter 1 の目標: キーコードを調べるプログラムを作る
Chapter 1-10で作ったプログラム
プログラム名 CH1-10
" GET KEYCODE"
Locate 6,3,"HIT ANY KEY"
Locate 8,4,"<AC>:QUIT"
Locate 1,4,"CNT:0 "
Lbl 0
Do
Getkey→K
LpWhile K=0
Locate 1,1,"KEYCODE = "
Locate 11,1,K
0→C
Locate 5,4," "
Do
Isz C
C≦99⇒Locate 5,4,C
C>99⇒Locate 5,4,"--"
LpWhile Getkey
Goto 0
Chapter 1 のメインテーマは、GetkeyとLocateの使いこなしです。Getkey はCasio Basicの優れた特徴を支える重要コマンドの一つで、これによって動きのあるプログラムを作り易くなっています。
そこで、Chapter 1 の締めくくりとして、これまでに実際に使ってみた命令やコマンドを使って、ダイナミックに動くプログレスバーを追加して、視覚的に動きのあるプログラムに仕上げます。
Chapter 1-11
ダイナミックな表示機能の実装
Chapter 1 で仕上げるプログラムの動作:
今回追加するプログレスバーの仕様は以下のものです。
1) プログレスバーに > を使うことにします。
2) キーカウントが増えるに従って、>>>> が右へ伸びてゆきます。
3) > の数はキーカウントと同じです。キーカウントが10の時は、> が10個まで伸びてゆきます。
4) fx-5800P のディスプレイは16桁が最大なので、プログレスバーの最大の長さは > が16個。
5) キーカウントが16を超える場合は、プログレスバーは最大長のままになります。
6) 新しいキーが押された時は、キーカウントが1になると同時に、プログレスバーは > 1個になります。
プログレスバーの実装
プログレスバーは、ディスプレイの2行目に、左から > が伸びてゆくように作ります。
ダイナミックな(動的な)プログレスバーの表示を行うためには、増えてゆくキーカウントCを表示位置に利用して、> の表示位置をCの値に応じて変更できるようにすれば良いのです。
Locate C,2,">"
と記述します。Locate の表示桁を指定するのに、変数Cを使うのがミソです。
この Locate C,2,">" は、キーカウントを反映させてプログレスバーをリアルタイムに表現するため、Doループの中に記述します。
ここまでに出来上がっているプログラムを見ると、このDoループに最初に入った時は、先ず Isz C によりCが1つ増えて、1となります。
そして、Locate C,2,">" が実行されると、Locate 1,2,">" と同じことになり、> が左端に1つ表示されます。
キーを押し続けた時は、このDoループが回るので、キーカウントCは、1つづつ増えてゆきます。すると、Locate C,2,">" のCも増えるので、> の表示桁の位置も順次増えてゆき、プログレスバーが右へ伸びてゆきます。
この部分のプログラムを詳細に見てゆきましょう。
Do
Isz C
C≦99⇒Locate 5,4,C
C>99⇒Locate 5,4,"--"
Locate C,2,">"
LpWhile Getkey
キーが押され続けると、このDoループが回るので、追加した Locate C,2,">" により、次々に
Locate 1,2,">"
Locate 2,2,">"
Locate 3,2,">"
Locate 4,2,">"
Locate 5,2,">"
・
・
・
Locate 14,2,">"
Locate 15,2,">"
Locate 16,2,">"
が実行されることになります。
ディスプレイの2行目だけに注目すると、
Locate C,2,">" (C=1の時)
> |
Locate C,2,">" (C=2の時)
> | > |
Locate C,2,">" (C=3の時)
> | > | > |
Locate C,2,">" (C=4の時)
> | > | > | > |
Locate C,2,">" (C=5の時)
> | > | > | > | > | |
・
・
・
Locate C,2,">" (C=14の時)
> | > | > | > | > | > | > | > | > | > | > | > | > | > |
Locate C,2,">" (C=15の時)
> | > | > | > | > | > | > | > | > | > | > | > | > | > | > |
Locate C,2,">" (C=16の時)
> | > | > | > | > | > | > | > | > | > | > | > | > | > | > | > |
というように、プログレスバーが1つづつ右へ伸びてゆきます。
Locate コマンドは、引数に変数を使えるため、このようなことが可能になります。
※ CasioBasicコマンドリファレンス
- Locateコマンド
さて、Locateコマンドは、表示する内容が16桁以上になるとエラーになります。そこで、このエラーを回避するには、Cが16を超えると Locate C,2,">" を実行させないことです。言い換えれば、Cが16以下の時だけ、Locate C,2,">" を実行させます。
そこで、条件ジャンプ命令 ⇒ を使って、
C≦16⇒Locate C,2,">"
とすれば良いので、Doループを、以下のように修正します。
Do
Isz C
C≦99⇒Locate 5,4,C
C>99⇒Locate 5,4,"--"
C≦16⇒Locate C,2,">"
LpWhile Getkey
改めてプログラム全体を書きます。
" GET KEYCODE"
Locate 6,3,"HIT ANY KEY"
Locate 8,4,"<AC>:QUIT"
Locate 1,4,"CNT:0 "
Lbl 0
Do
Getkey→K
LpWhile K=0
Locate 1,1,"KEYCODE = "
Locate 11,1,K
0→C
Locate 5,4," "
Do
Isz C
C≦99⇒Locate 5,4,C
C>99⇒Locate 5,4,"--"
C≦16⇒Locate C,2,">"
LpWhile Getkey
Goto 0
赤文字で示した1行を追加するだけで、プログレスバー機能の追加ができそうです。このように、たった1行だけで、ダイナミックな表示機能を追加できるのは、プログラミングの面白いところですね。
但し、残念ながらこのままだと、1つ問題があります。実際にプログラムを走らせてみると分かります。
一旦プログレスバーが伸びた後、別のキーを押しても、プログレスバーは伸びたままになってしまいます。新たなキーを押した時、プログレスバーを一旦消す必要がありますが、その動作をプログラムしていないのが原因ですね。そこで、何か新しいキーが押された時、つまりキーカウントを行うDoループの前で、プログレスバーを消去する動作を追加しましょう。
このプログラムには、Doループが2つあります。最初のDoループは、キーコードを取得するためのループです。
キーコードが取得されるまで、つまり何かキーが押されるまでは、最初のDoループが回り続けます。そして何かキーが押された時、このループを抜けて、動作が下へ進みます。
「プログラムは、何も指示が無ければ、上から下へ動作する」と言う基本を思い出してください。
2つめのDoループの Do の1つ上に Locate 5,4," " (スペース3個)がありますが、これはキーカウント表示にスペース3個を上書きして表示の初期化を行っています。
従って、プログレスバー表示の初期化も、ここで、つまり Locate 5,4," " の直後で行います。プログレスバーの初期化は、> を1つだけ表示し、残る15桁全てをスペースにして、上書きすれば良い、と分かると思います。
具体的には、
Locate 1,2,"> " (スペース15個)
を記述します。
これで、プログラムは完成です。完成したプログラム名を GET KEYCODE とします。
プログラム名 GET KEYCODE
" GET KEYCODE"
Locate 6,3,"HIT ANY KEY"
Locate 8,4,"<AC>:QUIT"
Locate 1,4,"CNT:0 "
Lbl 0
Do
Getkey→K
LpWhile K=0
Locate 1,1,"KEYCODE = "
Locate 11,1,K
0→C
Locate 5,4," "
Locate 1,2,"> "
Do
Isz C
C≦99⇒Locate 5,4,C
C>99⇒Locate 5,4,"--"
C≦16⇒Locate C,2,">"
LpWhile Getkey
Goto 0
改めて完成したプログラムは、たった20行のコンパクトなものです。1行1行に意味があるのですが、意外にシンプルですね。
プログラム全体をおさらいします。
1) プログラム全体の基本構造は、Lbl 0 と Goto 0 で作った大きなループです。
2) 最初に、プログラム名の表示、操作方法の表示、キーカウントの初期表示を行います。
3) キーコード取得は、1つめの Doループ で行います。何かキーが押されるまでこのループが回っています。
4) その後、キーコードの表示を行います。
5) 続いて、キーカウントの初期化、表示の初期化を行います。
6) 2つめのDoループで、キーカウントの表示とプログレスバーの表示を行います。キーが長押しされている間はこのループが回っています。
7) 以上の動作は Lbl 0 と Goto 0 のループにより、エンドレスに継続されます。
8) [AC]キーを押した時、プログラムは終了します。
プログラムを見て、この 1) ~ 8) を説明できれば、ほぼ完全に理解できたと言って良いと思います。
Chapter 1-12
プログラムのバックアップ
完成させたプログラムは、fx-5800Pのメモリの中にあります。
fx-5800P にはパソコンとのリンク機能が無いので、プログラムをパソコンに転送して保存することができません。fx-5800Pのプログラムをバックアップするには、オプションのリンクケーブルを使って、もう1台の fx-5800P へプログラムを転送してバックアップする方法のみが提供されています。
fx-5800Pで作ったプログラムのバックアップ方法に関するカシオの説明は こちら
せっかく作ったプログラムは、操作ミスやfx-5800Pの故障により失われる可能性があるので、バックアップしておくべきです。しかしそのために、fx-5800Pやリンクケーブルを購入する気にもなれません。
注意!!
fx-5800P の初期化操作を行うと保存されているプログラムが全て消えてしまいます。
[MODE] [▼] [3] (SYSTEM) [3] (Reset All) とすると、初期化されるので要注意です!
[2018/02/10 追記]
⇒ ついに fx-5800P がPCリンク可能に
この記事を書いたあと、PCへのバックアップ手段が登場していますが、多少の費用が必要です。費用をかけないなら依然としてPCへのバックアップ手段が使えません。
PCへのバックアップができないのは、なんとかして欲しいものです。しかし無いものは無いので、別のバックアップ方法が必要です。要するに作ったプログラムを転記して保存するしかありません。
転記作業は、書き間違いがあり得ますが、そこは慎重に書き写すしかありません。そして転記する先は、紙媒体か電子媒体の2通りが考えられますが、私はエクセルファイルに転記して保存しています。
実は、私にとっては本ブログがもう一つの保存媒体になっています(^^;)
エクセルに保存する際、フォントに Consolas を指定しています。このフォントを使うのは、数字のゼロとアルファベットのオーの区別が明確なためです。数字のゼロは、斜め線が入るので、オーとはっきり異なります(以下参照)。
fx-5800P の液晶表示でも、数字のゼロに斜め線が入ったフォントを使っています。
エクセルなど電子媒体で保存するもう一つの利点として、スペースの数の確認が容易なこともあります。

他に良い方法があれば教えて頂ければ有り難いのですが、今のところ私はこの方法を採用しています。
[2015/01/07 追記]
プログラムを数多く作ったので、1台の fx-5800P に入りきらなくなったので、もう一台入手して一方はバックアップ用、もう一方は日常使いとしています。
Chapter 1
おわりに
Getkey と Locate があること、そして条件判定で 値が0なら"偽"、0以外なら"真"となることが Casio Basic の最大の優位点だと思っています。そこでChapter 1 では、これらのコマンドの使いこなしを通じて、fx-5800P のプログラミングを紹介しました。
プログラミング初心者の方には、いきなりループ処理が出てきて面食らったかも知れませんが、Chapter 1 を完璧に理解すれば、プログラミングの基本をかなり習得したことになります。言い換えれば、ループ処理に馴染むことがプログラミング習得の大きなステップになります。
今回作った Get Keycode プログラムは、実際にプログラムを作る際に、キーコードが分からなくなって、取扱説明書が手元に無くても、プログラムを走らせれば調べることが出来るので、私には必携プログラムです。
キーコード取得プログラムは、プログラムライブラリ - キーコード取得 にもまとめています。今回 fx-5800P 用に作ったプログラムは、実は fx-9860GII や fx-CG20 でもそのまま正常動作する互換性100%のプログラムです。但し画面がより広い fx-9860GII 向けに表示の配置を最適化したプログラムも 上記のプログラムライブラリで紹介しています。fx-9860GII や fx-CG20 はダウンロードしたプログラムファイルをそのまま電卓に転送する機能があるので、プログラムファイルをダウンロードできるようにしています。
「CasioBasic入門」は、Chapter 2 へ進みます。そこでは簡単なアクションゲームを作ってゆこうと思います。
以前作ったもぐら叩きゲーム(詳細はこちら)は、初心者の方にはチョット敷居が高いと思いますので、もう少し単純なゲームを作ってゆこうかと考えています。
つづく...
⇒ CasioBasic入門9 / 目次
応援クリックをお願いします。励みになるので...