#011 スプライト同士がメッセージを送り合う作り方|魔法使いと弟子のあいさつリレー

ok-scratch

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

スクラッチの「メッセージを送る」「〜を受け取ったとき」ブロックを使い、魔法使いと弟子たちが順番にあいさつするシーンを作ります。スプライト間の連携の基本が身につく初心者向けチュートリアルです。

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

魔法使いから弟子1、弟子1から弟子2・弟子3へとメッセージが枝分かれしていく構造が効いている。2つのメッセージ名を使い分けることで、全員一斉ではなく順番通りに連鎖させるタイミング制御を、条件分岐なしで実現している。1対1リレーと1対多ファンアウトを組み合わせたこの設計が、メッセージ機能の使いどころを端的に示している。どう組み立てているか、作り方を見ていこう。 参考資料:スクラッチプログラミング事例大全集

動画で見てみよう

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

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

今回の目標

  • ウィザードが挨拶してメッセージを送る
  • 弟子1がメッセージを受け取って返事し、次のメッセージを送る
  • 弟子2と弟子3が同時にメッセージを受け取って挨拶する

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

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

#1ウィザードの配置

ok-scratch ok-scratch
前回は「もし〜なら・でなければ」を使って重力ゲームを作ったよね。今回はガラッと変わって、スプライト同士がメッセージをやり取りしながら順番にあいさつしていく作品を作るよ。

準備

スプライト「ウィザード」を開く

ウィザードウィザード
スプライトについて
画面右側に立つ魔法使い。ゲーム開始時に「こんばんは」と挨拶し、弟子たちへ呼びかけのメッセージを送る
どんな役割か
ウィザードが画面右に現れて「こんばんは」って言うとこを作るよ。言い終わったら弟子を呼ぶメッセージを送る流れまで一緒に組もう!

実装

step-0

まずはウィザードの初期設定から。イベントgreenflag が押されたときのあとに回転方法を「左右のみ」にして向きを-90度(左向き)にし、座標(160, -40)に配置するよ。回転方法を「左右のみ」にしておくと、左を向いたときにキャラがひっくり返らないんだ。

向きを-90度にすると左向きになるのがポイント。Scratchでは90度が右、-90度が左、0度が上を向く仕組みだよ。

確認プレビューしておこう 確認プレビューしておこう
旗を押すとウィザードが画面の右側に現れて、左を向いたね。

#2あいさつとメッセージ送信

準備

メッセージ「魔法使いの呼びかけ」を追加

ウィザードが弟子たちに呼びかけるときに送るメッセージ

メッセージ「魔法使いの呼びかけ」を追加

実装

step-1

ウィザードの位置が決まったら、次はあいさつの動作を足そう。見た目( ) と ( ) 秒言うで「こんばんは。」と1秒間言って、そのあとイベント( ) を送るで「魔法使いの呼びかけ」メッセージを送る流れだよ。

このイベント( ) を送るが今回のカギになるブロック。メッセージを送ると、そのメッセージを待っている全スプライトが一斉に動き出す。テレビの放送みたいなもので、1つの局が発信したら受信機を持ってる人全員に届く仕組みなんだ。

#3弟子1の配置

ok-scratch ok-scratch
ウィザードの準備ができたから、次は弟子1を作っていこう。

準備

スプライト「弟子1」を開く

弟子1弟子1
スプライトについて
画面左側に立つ弟子。魔法使いの呼びかけを受けて「こんばんは」と返事し、他の弟子へ返答メッセージを送る
どんな役割か
弟子1が魔法使いに呼ばれたら「こんばんは」って返事するとこを作るよ。返事が終わったら他の弟子にも知らせるメッセージを送る流れも組んでいこう!

実装

step-2

イベントgreenflag が押されたときで旗がクリックされたら、座標(-170, -50)に配置する。画面の左側に立たせるだけのシンプルなコードだね。

確認プレビューしておこう 確認プレビューしておこう
ウィザードが「こんばんは。」って言った。弟子1も画面の左側にスタンバイしてるっしょ。

#4弟子1の返事

準備

メッセージ「弟子の返答」を追加

弟子1が返事を終えた後、他の弟子たちへ知らせるために送るメッセージ

メッセージ「弟子の返答」を追加

実装

step-3

弟子1がウィザードからのメッセージを受け取って返事をするコードを作るよ。イベント( ) を受け取ったときで「魔法使いの呼びかけ」を受け取ったら、「こんばんは。」と1秒言ったあと、イベント( ) を送るで今度は「弟子の返答」という別のメッセージを送るんだ。

つまりメッセージのリレーが起きる仕組みだよ。ウィザード→弟子1→次の弟子たちへ、とバトンが渡っていくイメージだね。

ok-scratch ok-scratch
「全部同じ名前のメッセージでよくない?」って思うかもしれないけど、それだとウィザードがメッセージを送った瞬間に弟子全員が同時に反応しちゃうんだ。「魔法使いの呼びかけ」と「弟子の返答」を分けることで、順番通りにあいさつが回っていくんだよ。学校の連絡網で「先生→班長」と「班長→班員」が別の電話であるのと同じ理屈だね。

確認プレビューしておこう 確認プレビューしておこう
今度はウィザードに続いて弟子1も「こんばんは。」って返事したね。

#5弟子2の配置

ok-scratch ok-scratch
弟子1のコードが完成したから、弟子2にとりかかろう。

準備

スプライト「弟子2」を開く

弟子2弟子2
スプライトについて
画面中央下に立つ弟子。弟子1の返答メッセージを受け取って「こんばんは」と挨拶する
どんな役割か
弟子2が弟子1からのメッセージを受け取って「こんばんは」って挨拶するとこを作るよ。メッセージを受け取ってセリフを言う流れをサクッと作ろう!

実装

step-4

弟子1と同じパターンで、イベントgreenflag が押されたときのあと座標(-30, -130)に配置するよ。画面の中央下あたりに立つ位置だね。

確認プレビューしておこう 確認プレビューしておこう
弟子2が画面の下のほうに現れた。

#6弟子2のあいさつ

step-5

弟子2は弟子1が送った「弟子の返答」メッセージを受け取って動くよ。イベント( ) を受け取ったときで「弟子の返答」を受け取ったら、「こんばんは。」と1秒間言う。

弟子1のときと違って、弟子2は次にメッセージを送る必要がないんだ。あいさつを受けて返事をする、それだけのシンプルな役割だよ。

確認プレビューしておこう 確認プレビューしておこう
弟子1からのメッセージで弟子2も「こんばんは。」って言うようになったね。

#7弟子3の配置

ok-scratch ok-scratch
弟子2のコードが完成したから、最後の弟子3にとりかかろう。弟子2と同じパターンで配置するよ。

準備

スプライト「弟子3」を開く

弟子3弟子3
スプライトについて
画面左上に立つ弟子。弟子1の返答メッセージを受け取って「こんばんは」と挨拶する
どんな役割か
弟子3も弟子1からのメッセージを受け取って「こんばんは」って挨拶するよ。弟子2と同じ仕組みだから、パターンをつかんで一気に作ろう!

実装

step-6

イベントgreenflag が押されたときのあと座標(-80, 110)に移動させる。こっちは画面の左上あたり。4体のキャラクターがそれぞれ違う位置に散らばるレイアウトになっているんだ。

ok-scratch ok-scratch
Scratchのステージは横480×縦360の座標系で、中心が(0, 0)だよ。今回の4体は(160, -40)、(-170, -50)、(-30, -130)、(-80, 110)と、画面全体にバランスよく散らばってる。キャラの配置は「画面全体をどう使うか」から考えるのが基本だよ。

確認プレビューしておこう 確認プレビューしておこう
弟子3が画面の左上に現れた。

#8弟子3のあいさつ

step-7

最後に弟子3もあいさつするコードを作ろう。弟子2とまったく同じ仕組みで、イベント( ) を受け取ったときで「弟子の返答」を受け取ったら「こんばんは。」と1秒間言うコードだよ。

ここで面白いのが、弟子2と弟子3は同じ「弟子の返答」メッセージを受け取って同時にあいさつするってこと。1つのメッセージで複数のスプライトが一斉に反応できる、これがメッセージの便利なところ。次回は「みんな集合」で、スプライト同士の連携をさらに深めていこう!

まとめ

今回はメッセージを使ってスプライト同士を連携させる仕組みを学んだよ。「送る」と「受け取ったとき」を組み合わせるだけで、こんなにきれいなリレーができるんだ。メッセージ名を変えることで順番をコントロールできるのが今回の最大のポイント。次回は「みんな集合」でさらに面白い連携を作っていこう!

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