今回は、スクリプトをスマートにする「再帰」というテクニックを使ってみましょう
まずはこちらのURLを見てみて下さい
http://scratch.mit.edu/projects/10000007/

WS0027

ターボモードにしないと時間がかかると思うので
WS0028
を「Shift」を押しながらクリックしてみて下さい。
すると「ターボモード」という文字が出てきます。
ターボモードでスタートすると、普段よりも早くゲームが進みます。

ではさっそく「中を見る」でスクリプトを見ていきましょう。

たったの2スクリプトで描けちゃう!

中を見てみると、たったのこれだけ!
この2スクリプトだけで、フクザツな模様が作れてしまうんです。
WS0029
 紫色の「Tree(40)」となっている部分が「定義ブロックの呼び出し」ですね。

いつも使っている定義ブロックとちがって、数字が入れられるようになっていますね。
これは「引数(ひきすう)」といって
定義ブロックに数字をわたすことができるんです。

数字をわたすと、定義ブロックのなかの「h」という
定義ブロックの中だけで使える変数の中に、渡した数字が入ります。

定義ブロック内ではその引数hを使って
色々なスクリプトを組むことができます。
(定義ブロックの引数の名前は自由に設定できます)

定義ブロックの引数の作り方

引数を作るには、まず
WS0030
「その他」ブロックのなかにある
「ブロックを作る」ボタンをクリックします。

すると、こんなウィンドウがひらきます。
WS0031
ウィンドウの中の「オプション」というところをクリックすると
引数の設定があらわれます。

(画面を再描画せずに実行するというオプションも設定できます。 
これもめっちゃ便利な機能なんですが長くなるのでまた今度説明しますね)


それぞれのアイコンをクリックすると
定義ブロックに引数がいくつでも追加できます。
WS0032
( )カド丸が数字
[ ]カド四角が文字
< >カド角が真偽値(あってるか、まちがってるか)
テキストは単なるコメント欄です

この引数部分には、文字だけでなく、ブロックもはめ込むことができます 
<>にはブロックしか入らないようになっています。

再帰ってなに?

さて、定義ブロックが作れたら、
さっきのサンプルのように ブロックを組み立ててみましょう。
001
定義ブロックのスクリプトの中に
おなじ定義ブロックが入っているのに気が付きましたか?

定義ブロックは自分を呼び出すこともできるんです。
これを「再帰プログラム」といいます。 

定義ブロックの途中で、自分を呼び出すと、このようになりますね
引数を変えてブロックを呼び出していて、引数が5以下になると終わりです。
※引数を変えないと、ずっと呼び出し続けるので注意!

002
ブロックを最後まで実行すると、
自分が呼び出されたところまで戻って、つづきのプログラムを実行します。


まとめ

再帰プログラムは、Cやjavaなど他の言語でも使われるアルゴリズムです。
今回紹介したプロジェクトは、見た目からも、再帰の仕組みが分かりやすいので
ラインが引かれていく過程と、スクリプトの内容を見比べてみて下さいね。

再帰は少しややこしいアルゴリズムですが
落ちものゲームとして有名な「ぷよぷよ」の連鎖判定にも
この再帰のしくみが使われているんですよ。
 
ゲーム作りにも便利な仕組みなので、がんばってマスターしてみて下さいね!

この記事がよかった!という方は「B!」ボタンや
こちらのボタンを押していただけると元気がでます!