スクラッチ(Scratch)で関数電卓を作る(詳細解説付)


1.png

今回は関数電卓を作ります。前回とは違って表示は7セグメントの蛍光表示管を模したスプライトを使います。
桁数は9桁固定です。最上位桁にはマイナス記号とエラーも表示されます。
表示用の蛍光表示管の画像はカシオミニを作ったときの画像を使っています。
背景の電卓はカシオのFX-10のカタログから切り取りました。
キーのスプライト画像はこの写真から切り取っています。
画像はJTRIMを使って作成しています。JTRIMの使い方についてはデジタル時計アナログ時計の回を参考にしてください。
1-2.png


スクラッチを立ち上げてスクラッチキャットのスプライトを削除します。
背景に電卓の外観をアップロードします。
とりあえずデバッグには表示管が1桁と数字キーが1個、あとは演算キー1個とイコールキーがあれができますので、そのスプライトを作ります。他の数字キーや演算キーはこれらを複製して作ります。
2.png


変数は「レジスタ」「表示」「演算子」の3つを用意します。これらは表示しておくとデバッグに便利ですが、最終的には表示しないように設定します。
2-2.png
動作の基本は表示変数に数字を入れていき(文字列として扱う)、演算キーが押されたタイミングで表示からレジスタへコピーします。ここで表示変数は0にしますが、このときまだ蛍光表示管には前の数字が残っています。そのあとに数字キーが押されたタイミングで表示管の数字が変わります。
イコールキーが押されたときレジスタの数値と表示の数値を演算子によって演算され、結果が表示変数へ書き込まれます。その数値を表示管に表示して終了です。
最初に背景のコードに「旗が押されたら」のイベントを作り、すべての変数を0にして「表示する」のメッセージを送るようにします。

2-2-2.png


次に数字キーについてコードを見ていきます。音はWood Tapを使いました。表示桁を超えて入力されたときは警告音Toy Honkを出します。押されたときに表示変数を更新すると同時に蛍光表示管のコスチュームも変える必要があるので蛍光表示管のスプライトに「表示する」のメッセージを送ります。
2-3.png

次は演算子のキーのコードです。このスプライトが押されたときは対応する演算子を記憶するだけです。表示変数の内容をレジスタへコピーして表示変数を0にしますが、「表示する」のメッセージは送りませんので見た目の数字は変わりません。
2-4.png


次はイコールキーの処理です。ここでは記憶した演算子に合わせてレジスタと表示変数とを演算し、結果を表示変数に置いて、「表示する」のメッセージを送ります。割り算についてはエラー処理も追加しておきます。
2-5.png


表示管は左端の1桁だけ作っておきます。「表示する」のメッセージが来たときに表示変数の対応する文字を調べてコスチュームを変更します。左端の桁のみエラーとマイナスの処理も必要です。
3.png


ここまでで最低限のデバッグは行えます。1+1=などでテストしてください。
テストができたら小数点のキーをスプライトで追加して小数点関係のテストを行います。
表示管は3桁にします。これで1.1+1=などのテストが行えます。

テストがOKならキーのスプライトと表示管のスプライトを増やします。数字キーは0,2,3,4・・・9でコードの中の数値が変わるだけです。ただし小数点のキーは数字キーとは少し内容が異なります。
3-2.png

表示管は9桁すべてのスプライトを作ります。例えば8桁目(左から2桁目)は下図のようなコードになります。

3-3.png


演算子は―、X、÷を追加します。これは「+」のキーとほぼ同じです。

クリアとオールクリアを追加します。
オールクリアは背景とほぼ同じ処理で、クリアは表示変数だけを0にして「表示する」のメッセージを送ります。
最後に関数キーですが、これは単純です。「π」のキーは表示変数に3.1415926を入れて表示するだけです。
スクラッチにはいろいろな数学関数が用意されています。「絶対値」のところをクリックすると関数が出てきます。
10.png


√も関数が用意されているのでその結果を表示変数に入れてメッセージを送るだけです。(ただしマイナスのときは警告音を出す)

10-1.png

完成したら変数の表示を消しておきます。
コードもだんだんと複雑になってきましたが、次回はコードを1行も書かないで時計を作る方法を紹介します。

20.png


この記事へのコメント

この記事へのトラックバック