Vol de Nuit ~夜間飛行~

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

App Inventor2 でAndroidのアプリを作ってみる 7. 電卓を作ってみる (7) UI動作

では試作したDentakuの動作記述の各部分について記述します。

この例は、うちの中3の娘にプログラミングさせるための例ですし、私自身プログラマーでもなんでもないので、もっとよい構成方法があると思います。あしからず。

 ここはこういう風にしたほうが良いなどのコメントを頂ければ非常にうれしいです。

 

以下に従ってブロックを組み上げてみましょう。

1.変数の初期化

f:id:spice_jp:20160517152339j:plain

用意した変数は7個で、Initialize globalで初期化します。

各変数の意味

・Ope_P 以前押されたされた演算子

・Ope_C 現在の演算子

・NUM 押されたのは演算子? 演算子なら0、数値なら1

Answer 計算結果

・Keta  複数桁を作成する場合に使用する変数

・Value_P 以前の数値

・Value_C 現在の数値

 

2. 数値ボタンの設定

f:id:spice_jp:20160517153237j:plain

先にCarryというプロシージャブロックを作成してください。その後、各ボタンのブロックを作ります。 

各数値ボタン(0~9)のブロックが押されると、Carryというプロシージャブロックを呼び出し、Digit変数の値を引き渡して実行します。

Carryプロシージャは桁を上げるためのブロックで、連続して数値(変数NUM=1の時)が入力されると、変数Keta

の値の後ろに変数Digitの値をくっつけて表示ラベルのHyouji に渡します。

Carryプロシージャの最後の部分では変数Value_Cに変数Ketaの値を移しています。Value_Cは計算対象になる値です。

 

3.小数点の扱い

f:id:spice_jp:20160517154934j:plain

ここでは小数点のコンマを表示させることを目的にしたブロックです。

B_Comボタンが押されたら、

変数Ketaの中にすでに”・”があるかどうか調べます。

0..12とかになるのを防ぐためです。

・が存在せず、現在表示されているのが数値であれば、変数Ketaの内容に・をくっつけて表示します。

現在表示されている値が数値で無ければ(空白であれば)

変数Ketaの内容を”0.”にして表示します。

これにより、電卓の起動時やオールクリアされた場合の表示が空白になっている状態で、・が押されたときに0.を表示させることができます。

 

4.計算させるプロシージャ

f:id:spice_jp:20160517160026j:plain

計算させるためのCalcという名前のプロシージャを作成します。

まず最後に押されたボタンが数値が数値ボタン(0~9)かどうか確かめています。

もしそうであれば、四則演算処理を行います。

例えば、23+57というようにボタンが押されていたとします。最後に押されたのが、7のボタンでNUM=1です。

23は変数Valu_Pに、+は変数Ope_Pに57は変数Value_Cに入っています。

ここで、次に四則演算か=のボタンが押された場合、足し算結果の80が表示されなければいけません。

ここで、+ボタンが押された場合、

Ope_Pが+なので、Calcプロシージャの下図の部分にて計算を行います。

f:id:spice_jp:20160517161009j:plain

最後に押されたボタンは+で数値では無いのでNUM=0に設定されます。このNUM変数を0に設定することで、

もし、+を押したあとにーが押されたとき(押し間違えたとき)、後から押した-を優先するようにします。

他の演算子も同様な処理を行っています。

計算結果は変数Answerに格納され、表示ラベルHyoujiに渡されて表示されます。

Answerは次の計算にも使用されるので、Value_Pに移されます。

Ope_CもOpe_Pに移され、次の計算に備えます。

計算が終了したら、とりあえずいらない変数の中身をクリアするため、Clearプロシージャで処理させます。

f:id:spice_jp:20160517162018j:plain

5. 演算ボタン

f:id:spice_jp:20160517162337j:plain

演算用のボタンは単純に何が押されたのかをOpe_Cに格納して、先ほどのCalcプロシージャを呼び出しているだけです。

6.その他のボタン

f:id:spice_jp:20160517162707j:plain

その他には、AC(オールクリア)ボタン、+-変換ボタン、ルートボタンを用意しました。

ACボタンは単純に初期状態に戻します。

+-変換ボタンは、現在表示されている値の+-サインを入替えます。例)-2→2 5→ -5

ルートボタンはValue_Cの値をルート値に変換します。

エミュレータで動作確認してください。

正常に動きましたか?