円を描くプログラムについては,図形描画Ⅱおよび詳細編(任意の円描画)で紹介した.円描画は,半径,描く位置,線の色等が異なるだけで,やっていることは同じである.このような場合,「決まり切った仕事をする部分」を別ブロックとして独立させ,名前を付けて登録し,必要な時に呼び出し,実行させることが可能である.
一般的なプログラミング言語においては,主プログラムに対して,副プログラムあるいはサブルーチンと呼ばれてている.
円描画の場合は,circle等の「呼び出し名」が付けられていて,座標,半径,色,塗りつぶしの有無等を指定してやれば,簡単に円を描くことができる.そのため原理を知らなくても「呼び出し名」を知っていれば,いろいろなグラフィック処理が可能である.
Scratchの場合は,基本原理に従って円を描く手続きをブロックとして作る必要がある.最終的には,主プログラムから円の情報を副ブロックに渡し,その結果を受取るようにすればよい.
作成手順
図1 スクリプトの「その他(濃紫)」を開き,「ブロックを作る」を選択する.
図2 新しいブロックが表示されるのでブロックの名前 (例 circle) を付け,OK を押す.
図3 右側に定義 circle の先頭が表示されるので,この下にプログラムを続ける.
図4 作成した副プログラム
図5 副プログラムのブロックを主プログラムに挿入(ドラッグ&ドロップ)する.
自作したブロックを使って500個の円を描かせるプログラムを作ってみた.座標,半径,色を乱数によって決定する部分だけが主プログラムの内容である.
副プログラムでは,「x, y は4ずつ変える」,「90回繰り返す」にして描画速度を上げてみた.小さい円の場合は,「8ずつ変える」,「45回繰り返す」でもよい.これ以上繰り返しを少なくすると点線になってしまう.編集メニューからターボモードを選択し,実行すると500個の円を1.8秒で描く.
円の塗りつぶし
塗りつぶしは,半径を変えて円周を描く必要がある.普通の編集モードで描くと遅いが,ステージ上部の編集メニューからターボモードを選択すれ ば,スピーディーに描くことができる.そのために,変数 h を導入し,1からrまで変化させるようにプログラムを作成する.上の副プログラムと比較すると明らかなように,「半径」の回数だけ繰り返している.h は1から r まで変化する.r=10 の円1個を描く時間は0.03秒,r=1~10の任意の円 500個を8.5秒で描く.
Scratch3のプログラム
副プログラム関連ブロックの色が赤に変更された.
ブロック定義の選択画面
ブロック名入力
circleと入力
呼び出しブロック,定義ブロック
Scratch3ではブロックの色が変わるだけ
Scratch2
⇒
Scratch3
参考資料
定義をマウス右ボタンクリックすると編集モードになるので,引数を明示してみたが,結果的には影響ないようである.
20個の円を1.5秒で描く.時間計測のため,ネコを表示.