8.数字の入力
CH=G@SETUP(320,240,16,1) CH2=G@CHRLOAD("DENTAKU.BMP") LOOP G@CHRCOPY( CH2 , CH , 0 , 0 ) I@KEYGET2( ) IF I@KEYBTN2( 1 ) == 1 THEN BT = I@KEYBTN2( 0 ) ELSE BT = 0 ENDIF G@PRINT( CH , 0 , 0 , STR( BT ) ) G@FLIP( ) ENDLOOP
何をしているのかといえば、ボタンが押された時だけI@KEYBTN2関数を実行し、結果を変数BTに代入します。それ以外のときは変数BTに「0」を代入します。
I@KEYBTN2関数の引数に「0」をしてした場合ボタンの番号を取得できますが、同関数の引数に「1」を指定すると、ボタンが押された時は「1」、ボタンが離された時は「2」、ボタンが押されても離されてもいない場合は「0」が取得されます。
そこで、IF〜THEN命令を使いI@KEYBTN2関数の結果が「1」の場合だけI@KEYBTN2関数を実行し、それ以外は「BT=0」を実行します。
『テンキーの”1”を認識』
ここまでで、ボタンが押された事を認識する事が出来ましたので、次にボタンの種類を限定して認識してみます。まず、テンキーの”1”を認識してみます。
CH=G@SETUP(320,240,16,1) CH2=G@CHRLOAD("DENTAKU.BMP") LOOP G@CHRCOPY( CH2 , CH , 0 , 0 ) I@KEYGET2( ) SUU = 0 IF I@KEYBTN2( 1 ) == 1 THEN BT = I@KEYBTN2( 0 ) IF BT == 79 THEN SUU = 1 ENDIF ELSE BT = 0 ENDIF G@PRINT( CH , 0 , 0 , STR( SUU ) ) G@FLIP( ) ENDLOOP
変数BTに79(テンキーの「1」に割当てられた番号)が代入された場合に変数SUUに「1」を入れる事にし、それ以外では「0」を代入する。また結果の表示も変数SUUにする事に変えてみた。
『他のテンキーも認識』
テンキーの「1」を確認する事が出来れば残りの数字キーも確認したくなるのが人情と言う物です。
まあここは単純に「1」の処理を複写して順番に処理するようにしましょう。下にプログラムを載せますので、実行して見てください。
CH=G@SETUP(320,240,16,1) CH2=G@CHRLOAD("DENTAKU.BMP") LOOP G@CHRCOPY( CH2 , CH , 0 , 0 ) I@KEYGET2( ) SUU = 0 IF I@KEYBTN2( 1 ) == 1 THEN BT = I@KEYBTN2( 0 ) IF BT == 79 THEN //ボタン「1」 SUU = 1 ENDIF IF BT == 80 THEN //ボタン「2」 SUU = 2 ENDIF IF BT == 81 THEN //ボタン「3」 SUU = 3 ENDIF IF BT == 75 THEN //ボタン「4」 SUU = 4 ENDIF IF BT == 76 THEN //ボタン「5」 SUU = 5 ENDIF IF BT == 77 THEN //ボタン「6」 SUU = 6 ENDIF IF BT == 71 THEN //ボタン「7」 SUU = 7 ENDIF IF BT == 72 THEN //ボタン「8」 SUU = 8 ENDIF IF BT == 73 THEN //ボタン「9」 SUU = 9 ENDIF IF BT == 82 THEN //ボタン「0」 SUU = 10 ENDIF ELSE BT = 0 ENDIF G@PRINT( CH , 0 , 0 , STR( SUU ) ) G@FLIP( ) ENDLOOP
『数字をストック』
入力の処理はここまでで完璧です。では、押された数字を意識できた所で、電卓を作るのに必要な次の作業は何でしょう?それは、押された数字の順番を覚えて「桁」を意識する作業です。
プログラムの作り方に規則はないので色々な処理方法が考えられます。こういう時は自分が電卓になりきって、どういう風に処理をするのかを考えてみるといいでしょう。例えば「1」「2」「3」と続けてキーが押されたら数字の「123」と解釈したいわけです。
まず「1」が押されたら数字の「1」と解釈したいので変数に1を入れておきます。次に「2」が押されたら数字の「12」と解釈したいので・・・・規則を考えると、先の1を10倍した値に2を足してあげれば良い事が分かると思います。次に「2」が押されたら、先の12を10倍した値に3を足してあげれば良いのです。
この論理をプログラムにすると次のようになります。青い部分が前回からの変更点です。
CH=G@SETUP(320,240,16,1) CH2=G@CHRLOAD("DENTAKU.BMP") G@COLOR(0,0,1) SUU = 0 LOOP G@CHRCOPY( CH2 , CH , 0 , 0 ) I@KEYGET2( ) IF I@KEYBTN2( 1 ) == 1 THEN BT = I@KEYBTN2( 0 ) IF BT == 79 THEN //ボタン「1」 SUU = SUU * 10 + 1 ENDIF IF BT == 80 THEN //ボタン「2」 SUU = SUU * 10 + 2 ENDIF IF BT == 81 THEN //ボタン「3」 SUU = SUU * 10 + 3 ENDIF IF BT == 75 THEN //ボタン「4」 SUU = SUU * 10 + 4 ENDIF IF BT == 76 THEN //ボタン「5」 SUU = SUU * 10 + 5 ENDIF IF BT == 77 THEN //ボタン「6」 SUU = SUU * 10 + 6 ENDIF IF BT == 71 THEN //ボタン「7」 SUU = SUU * 10 + 7 ENDIF IF BT == 72 THEN //ボタン「8」 SUU = SUU * 10 + 8 ENDIF IF BT == 73 THEN //ボタン「9」 SUU = SUU * 10 + 9 ENDIF IF BT == 82 THEN //ボタン「0」 SUU = SUU * 10 ENDIF ELSE BT = 0 ENDIF G@PRINT( CH , 32 , 8 , STR( SUU ) ) G@FLIP( ) ENDLOOP