コインの学習できあがり  

その一、その二、その三を進めていく中で、このようなソフトが仕上がります。ここでのスクリプトを参考にオリジナル作品を仕上げてください。


コインの学習の作り方 その一


画面上のコインボタンを押すと、押したコインが複製され、変数totalに金額が加算される。
複製されたコインはドラッグ可能となっている。

1 コインの描画

 レイヤーの名前を「ムービークリップ」とつける。
 ステージに6種類のコイン(硬貨)を描く

2 コインのグラフィックシンボル化

 ステージ上に描いたコインを一つずつライブラリにドラッグし、グラフィックシンボルに変換する。シンボルの名前を、例えば百円玉ならpct100というようにつける。

3 コインのムービークリップシンボル化

 ステージ上のグラフィックシンボル化されたコインを、もう一度一つずつライブラリにドラッグし、タイプをムービークリップとしてムービークリップシンボルに変換する。シンボルの名前を、例えば百円玉なら100yenというようにつける。
 コイン一つ一つのプロパティを開き、インスタンスの名前を、例えば百円なら100yenとつける。
 コイン一つ一つのムービークリップアクションを次のように記述する
on (press) {
this.startDrag();
}
on (release) {
this.stopDrag();
}

ボタンが押されたらドラッグを開始する

ボタンが放たれたらドラッグを停止する

 すべてのコインのムービークリップを選択し、ステージ外へ移動する。
 ※コインのボタンが押されたら、これらのムービークリップを複製して、ステージ上に配置するため。

4 コインのボタンシンボル化

 レイヤーを一つ増やし、レイヤーの名前を「ボタン」とつける。
 ライブラリの中のグラフィックシンボル化されたコインをいったんステージ上に再配置し、ライブラリにもどす作業をして、今度はタイプをボタンシンボルにし、例えば百円なら、btn100と名前をつける。
 コインのボタン一つ一つのアクションに以下を記述する。例は、100円ボタン(btn100)の場合
on (release) {
Coin = "_root.100yen";
_root.DupCoin(Coin);
_root.TotalCount(100);
}

ボタンが放たれたら、Coinに_root.100yenを代入しDupCoin関数にCoinを送り実行する。そしてTotalCount関数に100という数値を送る

※Coinという変数に、複製すべきムービークリップインスタンスの名前を代入し、DupCoin()という関数で複製する。次に、TotalCount()という関数で、100の数値を渡す。

5 ダイナミックテキストの配置

 レイヤーを一つ増やし、「テキスト」という名前を付ける。
 テキストツールを選び、プロパティを開いて、ダイナミックテキストにして、ステージ上に配置する。プロパティの変数名を total とつける。

6 フレームアクションの記述

 レイヤーを一つ増やし、「アクション」と名前を付ける。
 フレームアクションに以下を記述する。
stop();
total = new Number();
function DupCoin(Coin) {
coinName = "mony";
coindepth++;
coinNewName = coinName+coindepth;
duplicateMovieClip(Coin, coinNewName, coindepth);
CoinShow();
}
function CoinShow() {
if (coindepth<21) {
_root[CoinNewName]._x = 50+coindepth*20;
_root[CoinNewName]._y = 100;
} else {
_root[CoinNewName]._x = coindepth*20-350;
_root[CoinNewName]._y = 150;
}
}
function TotalCount(yen){
_root.total += yen;
}

フレームをストップし、totalは数値変数と定義

DupCoin()関数:深度coindepthを一つ増やし、複製されるムービークリップの名前をcoinNewName,つまりmony+coindepthとする。その座標を決めるため、CoinShow()関数を実行する。

CoinShow()関数:coindepthの数値が20を越えたら行替えする。一応40コインまで正常に表示される。

TotalCount()関数では、変数totalに送られてきた数値を加える

 

 これで、一通りの完成である。

コインの学習 その二


 複製(生成)されたコインを消し、変数totalから減額する方法
 

1 対象のムービークリップの作成

 コインがあるムービークリップにドロップされたら消去されるようにするため、レイヤーを一つ増やし、「消去」と名前を付ける。そのレイヤーを一番下に移動する。
 任意のグラフィック図形を描き、ムービーシンボル化する。プロパティのインスタンス名を
kesu とつける。

2 コインのムービークリップのアクション書き換え

 コインがkesuと名付けられたムービークリップにドロップされた場合のアクションを記述するため、以下のように書き換える。
on (press) {
this.startDrag();
}
on (release) {
this.stopDrag();
if (eval(this._droptarget) == _root.kesu) {
MyName = this._name;
_root.ClearCoin(MyName, 10);
}
}

10円玉の場合

赤い文字のところが書き加えられた部分

もし、ドロップされたところがkesuと名付けられたムービークリップだったら、MyNameに自分のインスタンス名を代入し、ClearCoin()関数に、自分の名前とtotalから引くべき数値、10円玉なら10を送り実行する

3 フレームアクションの追加

 コインのムービークリップで参照されるClearCoin の関数を追加する。
function ClearCoin(MyName, yen) {
removeMovieClip(MyName);
_root.total -= yen;
}

ClearCoin()関数の定義

MyNameムービークリップを削除し、totalから送られた数値を引く

 以上で、完成する。

コインの学習の作り方 その三


 両替ムービークリップにドロップされると、両替できるようにする。
 

1 対象のムービークリップを作成

 コインが両替のムービークリップにドロップされたら、一つ下の単位の金種に両替できるようにする。そのため、レイヤーを一つ増やし、任意の図形を描き、ムービークリップでシンボル化する。そのプロパティを開き、インスタンス名をryougaeと名付ける。
 

2 コインのムービークリップのアクションの書き換え

 もし、ドロップ先が ryougae だったら、ChangeMony()という関数を実行するというスクリプトを追加する。
※500円玉のムービークリップの場合
on (press) {
this.startDrag();
}
on (release) {
this.stopDrag();
MyName = this._name;
if (eval(this._droptarget) == _root.kesu) {
_root.ClearCoin(MyName, 500);
} else if (eval(this._droptarget) == _root.ryougae) {
_root.changeMony(500);
_root.ClearCoin(MyName, 0);  
}
}

500円玉ムービークリップの場合

もし、ドロップ先のムービークリップがryougaeというインスタンス名がついていたらChangeMony()関数に500という数値を送りさらに、ClearCoin()関数に自分のインスタンス名を代入したMyNameと、両替するだけなのでtotalに変化はないので0を送る。つまり500円玉を消して、100円玉を5つ表示する関数を実行する。

 

3 フレームアクションの追加

function ChangeMony(gaku) {
switch (gaku) {
case 500 :
mai = 5;
for (var i = 1; i<=mai; i++) {
Coin = "_root.100yen";
DupCoin(Coin);
}
break;
case 100 :
mai = 2;
for (var i = 1; i<=mai; i++) {
Coin = "_root.50yen";
DupCoin(Coin);
}
break;
case 50 :
mai = 5;
for (var i = 1; i<=mai; i++) {
Coin = "_root.10yen";
DupCoin(Coin);
}
break;
case 10 :
mai = 2;
for (var i = 1; i<=mai; i++) {
Coin = "_root.5yen";
DupCoin(Coin);
}
break;
case 5 :
mai = 5;
for (var i = 1; i<=mai; i++) {
Coin = "_root.1yen";
DupCoin(Coin);
}
break;
case 1 :
break;
}
}

ChangeMony()関数

送られてきた数値をgakuという変数で受ける。

gakuの数値によって処理を分岐するため、switch case文を実行する。

例えば送られてきた数値が500ならば、100yenというインスタンス名のムービークリップを5枚複製する

 


おまけ


  おつりになるコインの枚数を計算し表示する関数

 
function turi(gaku) {
zan = gaku;
if (zan>0) {
mai = int(zan/100);
for (var i = 1; i<=mai; i++) {
Coin = "_root.100yen";
DupCoin(Coin);
}
zan = zan-(mai*100);
mai = int(zan/50);
for (var i = 1; i<=mai; i++) {
Coin = "_root.50yen";
DupCoin(Coin);
}
zan = zan-(mai*50);
mai = int(zan/10);
for (var i = 1; i<=mai; i++) {
Coin = "_root.10yen";
DupCoin(Coin);
}
}

turi()関数

送られてきた数値をgakuで受け取り、zanという変数に代入する。

もし、zanが正数ならば、まず100で割り、その商をint()で整数化する。得られた数は、100円玉の枚数になり、その枚数を複製する。

残りの金額は、zan-(mai*100)で計算され、それをzanに代入し、今度は50で割ることにより50円玉の枚数を得て、表示する。

これを繰り返して、合理的なおつりの金種と枚数を計算し、表示できる。