Vol de Nuit ~夜間飛行~

App Inventor2でアプリを作る中年オヤジの無謀な挑戦日記

App Inventor2 でAndroidのアプリを作ってみる 7. 電卓を作ってみる (6)数値の入力

さて、ボタン配置等をしてデザインができたのでだいぶ電卓らしくなってきました。でもエミュレータでボタンをポチポチしても何も起こりませんね。

これからボタンを押したときに何らかの動作ができるようにします。

AI2の右上にあるBlocksのボタンを押します。

すると、動作ブロックを構築する画面に切り替わります。

f:id:spice_jp:20160517121334j:plain

さきほど配置したラベルやボタンなどが左側のメニューに表示されていればOKです。

このBlocks画面はDesign画面に連動しています。

もしDesign画面であらたなパーツが追加されたり、不要なパーツを削除するとその内容がこちらのBlocks画面に反映されます。

まず最初に、具体的な動作を構築する前に、

1+2=3の足し算を考えて見ましょう。

入力は、1 + 2 = で 4つの入力があり

結果は 3 です。

入力された数値や演算子を入れておく複数の箱(変数)を用意して、箱の中身を足した結果を表示すれば良いようです。

順序を考えると

1.起動時 何も入力されていない

2.1のボタンを押す 箱Aに1を入れる 箱Aの表示

3.+のボタンを押す 箱Bに+を入れる 箱Bの表示

4.2のボタンを押す 箱Cに2を入れる 箱Cの表示

5.=のボタンを押す 箱Aと箱Cの値を箱Bの演算子に従って計算して箱Dに結果をいれ、箱Dの中身を表示する。

これらの動作を行うには4つの箱と、箱Bの中身に何が入っているかを判定して計算させ、結果を表示する必要があります。

これをBlocks画面で作ってみましょう。

1)まず箱A,B,C,Dを用意します。

左側のVariablesをクリックし、f:id:spice_jp:20160517124911j:plain を

選択します。nameをクリックしてAに変更します。

f:id:spice_jp:20160517125002j:plain

2)次にTextからf:id:spice_jp:20160517125119j:plainを選択して先ほどのInitialize ブロックに接続します。するとこんな形になります。

f:id:spice_jp:20160517125424j:plain

これでAという名前の箱ができました。中身はからっぽです。同様に他の箱も用意します。

f:id:spice_jp:20160517125609j:plain

3)次に、1のボタンの記述は、

左のメニューからB1を選択し、Whenボタン名Click to を下図のようにドラッグ&ドロップします。

f:id:spice_jp:20160517130118j:plain

4)次にVariablesのf:id:spice_jp:20160517130335j:plainを選択してset とtoの間のメニューで、global Aを選択し、先ほどのB1のブロックに組み合わせます。

f:id:spice_jp:20160517130718j:plain

5)次にTextからf:id:spice_jp:20160517125119j:plainを選択し、Set global to のブロックに組み合わせて、中身を1とします。

こんな形になるはずです。

f:id:spice_jp:20160517131112j:plain

これで、B1(1のボタン)をクリックすると、箱Aに1がセットされることになります。

6)1のボタンをクリックしたら、1が表示されるようにするには、表示用のラベルHyoujiからSet Hyouji toとVariablesのget to を選択し組み合わせます。f:id:spice_jp:20160517132049j:plain

これを先ほどのB1のブロックに組み入れます。

するとこんな形になるはずです。

f:id:spice_jp:20160517132149j:plain

さっそくエミュレータで1のボタンを押してみましょう。

正常にブロックが組みあがっているなら、1が表示されるはずです。

7)同様に2のボタンも作ります。1のボタンの記述をコピーしてしまいましょう。1のボタンのブロック上でマウスの右ボタンをクリックし、Duplicateを選択するとコピーできます。

f:id:spice_jp:20160517132457j:plain

コピーしたら、ボタンの名前、箱の名前、箱にいれる数値を変更

します。

f:id:spice_jp:20160517133025j:plain

このような手順で同様に、+も作ってしまいましょう。

8)ここまでの全体図は下図のようになります。

f:id:spice_jp:20160517133326j:plain

9)最後に=を押してら計算して結果を表示させます。

=をおして、箱Bの中に入っている演算子が+だったら、箱Aと箱Cの値を足し算するには、下記のようにブロックを組み合わせます。

f:id:spice_jp:20160517134023j:plain

これは、

=ボタン(例ではB_Eql)が押されたら、

箱Bの中身が+であれば、箱Aと箱Bの値を足し算し、箱Dに入れ、

箱Dの中身をHyoujiラベルに表示させる

という動作を記述しています。

10)ここまでの全体図は下図になります。

f:id:spice_jp:20160517134627j:plain

エミュレータで動作確認しましょう。

正常に計算できましたか?

 

今までの話は、単純なケースを考えました。

しかし実際には100や12345といった複数桁がある値の計算や、小数点を表示させなければなりません。

上記の動作記述は基本的に1桁の計算はできますが、桁上がりなどは考慮していません。

ですので、もっと良い方法を考える必要があります。