
Scratch オリジナルブロック(ブロック定義)の作り方

Scratchでは様々なブロック(コマンド)が用意されていますが、
ブロックを自分で作ることもできます。
ブロックの作り方やどんな風に使うのかについて解説していきます。
ちなみに、大人のプログラミング言語でいうなら、
今回解説する「ブロック定義」は、
共通処理をメソッドとして抽出する/リファクタリングです。
どんな時に使うか
作り方の説明の前に、どんなときにこのブロック定義を使うかを説明します。
- 同じ処理が何度も出てくるとき
- コードが長くなって、見づらくなっているとき
主にこの2つの場面で活用できます。
オリジナルのブロックを作るとは
オリジナルブロックを作る手順
- ブロックに名前をつける
- 中身をつくる
- つくったブロックを呼び出す
- 引数やラベルを追加する
今回は、「ネコがダメージを受ける」というブロックを作っていきましょう
ブロックに名前を付ける
コードの一番下のブロック定義(赤)を選び
「ブロックを作る」をクリックします

そうすると
下図のような画面が出てきますので、
ブロックの名前を入力します。

今回は「ネコがダメージを受ける」とします。


入力して、OKを押すと
上のような今まで見たことないような、
赤のブロックが登場すると思います。
この下に、「ネコがダメージを受ける」の中身を
つくっていきます。
中身を作る
「ネコがダメージを受ける」の中身は
- ネコが「イテッ」と言って
- コスチュームを変えて
- ライフを1減らす
としたいと思いますので、
下図のように作ります。

※コスチューム「cat-damage」は、予めつくっておきました。
コスチュームの作り方についてはこちらをご覧ください

これで、オリジナルブロック「ネコがダメージを受ける」が完成しました。
つくったブロックを呼び出す
次に、先ほど作ったブロックを呼び出していきます。
作ったブロックは、
コ―ドの一番下、ブロック定義(赤)にできあがっていますので、
それを使います。
今回は、ドラゴンに触れたときにダメージを受けるとしたいので、
スプライト「Dragon」を追加した上で、
下図のように書いていきます。

これで呼び出しまで出来ました。
ここまででオリジナルブロック作成の
一番シンプルな方法は完了です。
引数やラベルを追加する
次に引数やラベルを追加していきましょう
先ほどのブロックを修正して、
「ネコが( )のダメージを受ける」
※( )には数字を入れて使います
を作っていきましょう
先ほど作成した、「ネコがダメージを受ける」ブロックを
右クリックして、「編集」を押します。

ブロックの編集画面が出てきますので、
まずは、ブロック名を「ネコが」にしましょう

そして、左下の「引数を追加 数値またはテキスト」を押します

number or text のところに、引数の名前を設定します。
何でも構いませんが、今回は「ダメージ量」とします。

そして、右下の「ラベルのテキストを追加」を押します。

ここに「のダメージを受ける」と入力しましょう。

そしてOKを押すと完成です。
定義を変更する
定義も調整します。
引数(ダメージ量)分のライフが減るように変更します。

呼び出し側を変更する
コマンド(ブロック)を呼び出す方も、ダメージ量を指定するように変更します。

これで引数も含めたブロックが完成しました。
オリジナルブロックを使うと何が嬉しいの?
では、先ほど作ったブロックを活用して、
ドラゴンにあたると、1のダメージを受けて
クマにあたると、3のダメージを受ける
というプログラムにしてみます。
スプライトBearを追加した上で、

このように書きます。
- ネコが「イテッ」と言って
- コスチュームを変えて
- ライフを~減らす
という一連の処理を
オリジナルブロックにしたことで、
ネコの動きが簡単に書けましたね
同じ処理が2回出てくるので、それを一か所にまとめることができました。
ネコがダメージを受けるという1つのブロックにすることで、読みやすくなりました。
ここまでできればブロック定義マスターです。
他にどんな活用の仕方があるか、
ぜひ考えてみてください。
まとめ
今回解説した、オリジナルブロックは、使わなくても、
同じ処理を書くことはできます。
でも、オリジナルブロックを使うことで、
何度も同じ処理を書く必要がなくなります。
同じ処理をいろんなところに書かずに、
一か所に書くというのは、
プログラミングの基本です。
書くのが手間というだけでなく、修正が一か所で済むため、
修正漏れが起こらないというメリットもあります。