7.キーボード入力
I@KEYGET2( ) BT = I@KEYBTN2( 0 )
I@KEYGET2( )には引数(入力値)も戻り値(結果)も必要が無いので括弧の中は空っぽ(空っぽでも括弧は省略できません)で、結果を代入する為の「=」もいりません。
I@KEYBTN2関数の引数にはボタンの番号を取得する事を指示する「0」を指定します。
結果(戻り値)として押されたボタンに割り当てられた(ハードウェア上での)番号を取得します。(各ボタンの番号はマニュアルのI@KEYBTN関数の記述にあります。)
今回のプログラムでは、数値変数BTに結果が入ります。
『動かしての確認』
では、実際にプログラムを作って確認してみます。前章までに作ったプログラムにキーボード入力の機能を追加します。
CH=I@SETUP(320,240,8,1) CH2=I@CHRLOAD("DENTAKU.BMP") I@CHRCOPY(CH2,CH,0,0) LOOP I@KEYIET2( ) BT=I@KEYBTN2( 0 ) I@FLIP( ) ENDLOOP
青い部分が今回追加した部分ですので、5章でダウンロードして実行したプログラムに青い部分を追加してみてください。
このプログラムの追加で、LOOP〜ENDLOOP命令でプログラムを繰り返す度に押された(又は離された)ボタンを確認するようになります。
『動きを目で確認する』
動きましたと、言葉で書いても結果が目に見えないので、実行しても面白くもありません。そこで、変数BTの内容を画面に表示してみる事にします。プログラムを次のように変更して実行してみてください。変数BTの内容がウインドウの左上に出るます。
2個所の青い部分が変更点なのでそれぞれについて説明します。
CH=I@SETUP(320,240,8,1) CH2=I@CHRLOAD("DENTAKU.BMP") LOOP I@CHRCOPY( CH2 , CH , 0 , 0 ) I@KEYIET2( ) BT=I@KEYBTN2( 0 ) I@PRINT( CH , 0 , 0 , STR( BT ) ) I@FLIP( ) ENDLOOP
『7行目(2つ目の青い行)の説明』
7行目に「I@PRINT関数」という新しい関数が現れましたが、これは文字列を描画する関数です。同関数の仕様を次に示します。
|
I@KEYIET2( ) BT = I@KEYBTN2( 0 ) MOJI$ = STR( BT ) I@PRINT( CH , 0 , 0 , MOJI$ )
しかし、わざわざ変数に代入して引き渡さなくても、直接書けるのならばその方が扱いは楽であろうと考えるのが普通であろう。
ここで、I@KEYBTN2関数やSTR関数の行をじっくり見ていただきたい。関数の結果をイコール「=」を使って左辺に代入する作業なのだが、関数の結果が直接左辺の変数に入るのではなく、関数を同関数の結果で置き換えるという事を行っているとイメージしてもらうと、I@PRINT関数の引数に直接STR関数を指定している意味が理解しやすいだろう。
つまり、「STR(BT)」の結果が「MOJI$」に入るのならば、I@PRINT関数の「MOJI$」に直接書くのと同じ事であろうという事なのです。これは他の関数でも同じ事がいえるもので、関数の結果は同関数と置き換わって以降の処理を行うとイメージしてください。
もし私の話が、理解しずらければ、従来どおり変数を仲介させるプログラムを行ってください。CPUから見ればどちらも同じ事ですし、変数を仲介させるほうがプログラムが見やすい(一行に色々な事を押し込めるよりも、バラにして順序立てた処理のほうが理解しやすいという事)と考える事も出来るからです。
『4行目(1つ目の青い行)の説明』
次に4行目の青い部分は前回は3行目にあった電卓の画像を画面に貼り付けしている部分です。
移動させた理由は、I@PRINT関数で描画する毎に直前で画面を電卓の画像で上書きしてきれいにするためです。
貴方が紙の上に鉛筆で文字を書くとします。同じ場所に文字を書いて行けば当然文字が重なって何を書いたのか分からなくなって行くでしょう。
これと同じ事で、I@PRINT関数で同じ場所に文字を書いて行くのですから、次の文字を書く前に文字の後ろを元の画像で初期化しておこうという為の処理なのです。
この説明が良く分からなければ、4行目を元の3行目に戻してあげれば理由が分かると思います。