まぁ題材としては面白いと思うんですけど、リストってなんでしたっけ?
それは復習してもらうとして、ともかく、作り始めてみましょう。今回のポイントは「リスト」の使い方です。稟さん、覚えていますか?
……あ、そういえばそんなものもありましたねぇ。数字をいっぱい入れることのできるモノでしたよね。長い引き出しのようなもので……
まぁ、コマンドとかは使わないと忘れてしまいますからね。忘れたら思い出せばいいんですよ。リストの基本コマンドだけ説明しておきますね。
setAt リスト名,場所,値こういうコマンドがあるんだなぁ程度でいいです。書式は覚える必要はありません。なんとかなるから安心して下さい。
……指定されたリストの指定された場所に値をいれます
getAt (リスト名,場所)
……指定されたリストの中の、指定された場所の値を取り出します
deleteAt リスト名,場所
……指定されたリストの中の、指定された場所の値を消去します
count(リスト名)
……リストに何個モノがしまってあるか、個数を返します。
そうですね、読んで、書いて、数えることができるんだ程度の理解でいいんですね。では神経衰弱なんですが、どういう流れで行けばいいのでしょうか?
リストを上手に使って考えてみましょう。全部でカードが20枚、つまり10組のカードを用意するところから考えてみましょう。そのカードをユーザーが選択していって、全部あったらO.K.というようにしてみましょうか。
じゃ、まず20枚のカードをどうやって管理すればいいのでしょうか?それにかき混ぜたりもしないといけないし……もうパニックです。
まぁまぁ、落ちついて、順番に考えていきましょうね。まずは20枚のカードをどうやって管理するかということです。これはリストを使って考えてみましょう。リストを表すときには[ ]を使います。たとえば10組のカードをリストにいれるとどうなるでしょうか?
ええと、[1,2,3,4,,,,,19,20]とすればいいのかな?あ、そうか、10組のカードだから、同じのがあってもいいんだ……とすれば、[1,1,2,2,3,3,4,4,5,,,,,9,9,10,10]ってすればいいんだ!
その通りですね。さて、それをかき混ぜる方法ですが、どうやればいいのでしょうねぇ。けっこう難しいですよ。
それってrandom関数を使えばいいんじゃないですか。ランダムで取り出して、適当な所にいれればいいんでしょ。
まず取り出すからgetAt (CardList,random(20))なんでしょ。で、その値を適当なところにいれるから……スクリプト全体はこうなるのかしら
put getAt(cardList,random(20)) into targetですか?
setAt cardList,random(20),target
おしい!それでは上手く動作しないんですよ。実行したらきっと1枚だけのカードとかがでてくるでしょうね。特定の場所を取り出してという考え方はいいんですけど、取り出した場所はそのままなんですよ。消えて無くなるわけじゃないんですよ。たとえば1番目の「1」を抜き出して、5番目にいれたとしたら、[1,1,2,2,1,3,3,,,]ってなるんですよ。わかります?
あ、そうか、抜き出してその後を消去しておかないと、全体の数がおかしくなるんだ。じゃ、消去する命令も書いてあげればいいのかしら。
じゃ、こういう風に書いてみましょう。
on shaffleshaffleというハンドラで書いています。20回かき回すようにしています。まず交換する場所をrandomで決定して、その部分の番号を変数(changePoint)にいれて、その場所を消して(この時点で19個の数字がリストに入っていることになります)、20番目にその数字(targetNumber)を足す。この動作を20回繰り返します。
global cardList
repeat with m=1 to 20
put random(20) into changePoint
put getAt(cardList,changePoint) into targetNumber
deleteAt cardList,changePoint
setAt cardList,20,targetNumber
end repeat
end
じゃ、これをそのまま書いたら動くのですか?
いえいえ、実は大事な事を忘れています。そう、リストの初期設定ですね。on startMovieで宣言しておくとよいでしょう。今からこういうリストを使いますよって一度宣言しておく必要があるのですよ。
on startMovieこれで大丈夫ですよ。このハンドラを眼に見えるようにしたムービーが下にありますので、これを参考にして下さい。
global cardList
set cardList=[1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10]
end
じゃ、次はいよいよ画像と結びつける作業ですね。
はい、キャスト番号とカードの番号を上手く結びつけてやるとよいですよ。じゃ、今回は解説を後回しにして、とりあえず作ってみましょう!