#021 ブロック定義の使い方

ok-scratch

スクラッチに挑戦している皆さん、どうも!スクラッチコーチです。

スクラッチのペン機能と「自分のブロック(関数)」を使って、三角形と四角形をアニメーション付きで描くチュートリアル。外角の定理を使った回転角度の考え方も、ステップごとに分かりやすく解説します。

さぁ、スクラッチでナニ作る!?

動画で見てみよう

ok-scratch ok-scratch
チャンネル登録して応援よろしく!チャンネル登録する

チュートリアルの元になった作品

はじめてのスクラッチ #021

はじめてのスクラッチ #021

by ok-scratch
プレイしておこう プレイしておこう
今回のスクラッチを作る参考作品です。メインスクリプトがたった2行しかないのに、ネコが三角形と四角形を次々と描きあげるの、実はカラクリがある。「三角形を描く」「四角形を描く」って自分のブロックに全部まかせることで、メインは呼び出すだけでいい仕組みになってるんだよ。たったこれだけで、コードが一気にスッキリ読みやすくなるのがヤバい。どうやって作ってるか、見ていこう。参考資料:スクラッチプログラミング事例大全集

今回の目標

ペン機能と「自分のブロック」を使って、三角形と四角形をステップごとに描く作品を作るよ。関数(自分のブロック)でコードを整理する考え方を身につけよう。

スターター作品をリミックスしよう

このチュートリアルにはスターター作品があります。使わなくても大丈夫だけど、最低限の素材などが用意されてるので便利です。
スターター作品をダウンロード

#1スプライトの初期化

ok-scratch ok-scratch
これまでにいろんなブロックを組み合わせてきたよね。今回はペン機能と「自分だけのブロック」を使って、ネコに三角形と四角形を描かせるよ。

準備

スプライト「ジオペン」を開く

ジオペンジオペン
スプライトについて
ペンを使って三角形や四角形などの幾何学図形を描くスプライト
どんな役割か
ペンを使って三角形と四角形を描くスプライトを作るよ!動く距離と回転角度を組み合わせて、キレイな図形を自動で描けるようにしよう。「自分のブロック」を使ってコードを整理するのがポイントだよ。

実装

step-0

まずイベントgreenflag が押されたときでスタート。スプライトを表示して、x座標0・y座標0の画面ど真ん中に配置するんだ。向きは90度、つまり右向きにセットしておく。

こうやって最初にスプライトの位置や向きをリセットしておくと、何度旗を押しても同じ結果になる。初期化って地味だけどめちゃくちゃ大事な処理なんだよね。

確認プレビューしておこう 確認プレビューしておこう
旗を押すとジオペンが画面のど真ん中に出てきて、向きも90度にセットされたね。ここが図形を描くスタート地点になる。

#2ペンの準備

step-1

ここからペン拡張機能の出番。ペン全部消すで前に描いた線を全部消して、まっさらな状態にするよ。

ペンペンを下ろすでペンを下ろしたら準備完了。ペンが下りた状態でスプライトが動くと、その軌跡が線として画面に残るんだ。

確認プレビューしておこう 確認プレビューしておこう
ペンの描画を全部消してからペンを下ろしたね。これでジオペンが動いた跡がそのまま線として残るようになるよ。

#3三角形の定義を作る

準備

カスタム定義「三角形を描く」を追加

ペンで正三角形を描く。100歩進んで120度左に曲がる動作を3回繰り返す

カスタム定義「三角形を描く」を追加

実装

step-2

ペンの準備ができたから、次は「三角形を描く」処理をまとめた自分だけのブロックを作るよ。ブロック定義定義 ( )で「三角形を描く」を定義するんだ。

中身は、0.5秒待ってから100歩動かすところからスタート。待ち時間を入れているのは、ネコが1辺ずつゆっくり描いていく様子をアニメーションで見せるため。

#4三角形の2辺目

step-3

動き( ) ( ) 度回すで120度左に回ってから、100歩動かしてもう1辺を描くよ。0.5秒の待ち時間を挟みつつ、さらにもう一度120度回転する。

なんで120度なのか?正三角形の内角は60度だけど、ネコが「次の辺の方向に向き直す」には外角にあたる120度だけ曲がる必要があるんだ。

ok-scratch ok-scratch
正多角形を描くときの回転角度、実は「360 ÷ 辺の数」で一発で求められるんだよ。三角形なら360÷3=120度、四角形なら360÷4=90度。これは「外角の定理」っていう数学の法則で、正多角形の外角の合計はいつでもぴったり360度になる。五角形でも六角形でも、この法則さえ知っていればスクラッチで描けちゃうんだ。

#5三角形の完成

ok-scratch ok-scratch
ラストの辺を描こう。100歩動かして、0.5秒待ってから120度回転。これで3辺すべてが描けて、ネコは出発地点に戻ってくるよ。
step-4

3回とも「100歩動かす→120度回す」というまったく同じ動作の繰り返しで、もし1回でも角度や歩数が正確じゃなかったら最後の辺が始点に戻らず三角形が閉じなくなってしまう。「三角形を描く」ブロックの定義はこれで完成!

#6四角形の定義を作る

準備

カスタム定義「四角形を描く」を追加

ペンで正方形を描く。100歩進んで90度左に曲がる動作を4回繰り返す

カスタム定義「四角形を描く」を追加

実装

step-5

三角形が描けるようになったから、今度は四角形用のブロックを作ろう。ブロック定義定義 ( )で「四角形を描く」を新しく定義するよ。

構造は三角形とほとんど同じ。0.5秒待って100歩進んだあと、動き( ) ( ) 度回すで90度だけ回転する。四角形だから回転角度が120度→90度に変わっただけなんだ。

#7四角形の2・3辺目

ok-scratch ok-scratch
2辺目と3辺目を描いていくよ。動かして→待って→回転するパターンを繰り返して、四角形の輪郭がどんどんできあがっていく。
step-6

三角形のときと見比べてみて。やっていることは「動いて曲がる」の繰り返しなのに、角度が120度→90度に変わるだけで全然違う形になるんだよね。角度の違いが図形の形を決めてるってこと。

#8四角形の完成

ok-scratch ok-scratch
最後の90度回転と100歩の移動で4辺目を描いたら、締めにもう一度90度回して向きを元に戻す。これで四角形も完成だよ。
step-7

三角形は「移動→回転」を3回、四角形は4回。辺の数だけ繰り返すっていう規則性がわかると、正五角形でも正六角形でも同じ要領で描けるようになるよ。

#9ブロックを呼び出す

step-8

いよいよメインスクリプトに戻って、さっき作ったブロックを呼び出すよ。ブロック定義( )で「三角形を描く」と「四角形を描く」を順番に実行するんだ。

メインスクリプトにはたった2行しかないのに、ネコが三角形と四角形を順番に描いてくれる。「何をやるか」はメインに書いて、「どうやるか」はブロック定義に任せる——この考え方がプログラミングの基本だよ。最後に見た目隠すでスプライトを隠して、描いた図形だけが画面に残るようにしよう。

ok-scratch ok-scratch
「自分のブロックを作る」って、プログラミングの世界では「関数」って呼ばれているんだ。もしこの仕組みがなかったら、三角形と四角形のコードを全部メインにベタ書きすることになって、どこが何の処理なのかパッと見でわからなくなる。関数に分けておけばメインは「三角形描いて」「四角形描いて」の2行で済むし、正五角形を追加したくなったら新しい関数を1つ作るだけなんだよ。

確認プレビューしておこう 確認プレビューしておこう
「三角形を描く」と「四角形を描く」っていう自分だけのブロックを作って、メインから呼び出してるね。描き終わったらスプライトも消える。

まとめ

関数って最初は難しそうに聞こえるかもしれないけど、「処理に名前をつけてまとめる」だけのことなんだよ。三角形でも四角形でも、同じ発想で正五角形や正六角形にも応用できちゃう。コードを整理する感覚、なんとなく掴めてきたんじゃないかな。

ブクマよろしくお願いします! ブクマよろしくお願いします!
どんどん追記・更新していくので、ブックマークやシェアよろしくお願いします!