スクラッチ(Scratch)で作る物語【プログラミング例】
スクラッチ(Scratch)では物語を表現することができます。身近な物語といえばドラマや映画が思い当たるでしょう。同じような動きをプログラミングによって再現します。
まずプログラミングのスクリプトと実際の動きを確認してください。次に今回のプログラミングの要である逐次処理と並列処理についてと、実際のプログラミングにあたってのポイントなどを解説します。
動作確認の参考URL:スクラッチ(Scratch)プロジェクト「こだまでしょうか echo」(外部リンク)
目次
スクラッチ(Scratch)でプログラミング例「こだまでしょうか」のスクリプト
ステージのスクリプト
スプライトA(Giga)のスクリプト
スプライトB(Pico)のスクリプト
逐次処理と並列処理
今回のスクラッチ(Scratch)プログラミングのポイントは逐次処理と並列処理です。題材として物語風にしています。物語といえば映画やドラマを思い浮かべる人も多いでしょう。
映画やドラマでは、俳優が演技をします。俳優は脚本(シナリオ)の通り演技するものです。そして脚本には一行ずつ順番に、セリフやト書き(演技の動きの指示)が書いてあります。
これはプログラミング的に考えると逐次処理です。「Aがセリフを言い終わってから、Bがセリフを言う」のようにひとつずつ順番に処理を行います。
一方ドラマや映画の撮影現場では、「よーい、スタート!」の掛け声とともにすべての役者が演技を始めます。掛け声をひとつのメッセージだと考えた時、同時に動き出す対象はスプライトやステージです。つまりプログラミング的に考えると並列処理だといえます。
スクラッチ(Scratch)で逐次処理や並列処理を行う際には「イベント」ブロックを使います。
「イベント」ブロックの種類
スクラッチ(Scratch)において、処理を始めるイベントブロックの種類は基本的に6種類です。
緑の旗が押された時
(任意のキーボードの)キーが押されたとき
このスプライトが押されたとき
背景が(任意のステージ)になったとき
(音量やタイマー)>(任意の数値)のとき
(任意のメッセージ)を受け取ったとき
これらのイベントブロックはスクリプトの先頭にしかつけることができません。
プログラミングのポイント解説
今回の作品をプログラミングする上でポイントを解説します。プログラミングのときの参考としてください。
メッセージイベントの入れ子
プロジェクトは、「ステージ」「スプライトA(Giga)」「スプライトB(Pico)」の3要素で成り立っています。それぞれをつなげているのはメッセージイベントです。
まず「ステージ」のメッセージイベント「(01_会話スタート)を送って待つ」が、プロジェクトの大部分を包括します。
そのなかで「スプライトA(Giga)」と「スプライトB(Pico)」が3回のメッセージイベントを処理しています。「(遊ぼう)と送って待つ」「(ばか)と送って待つ」「(もう遊ばない)と送って待つ」です。これが終わり、「ステージ」の「(01_会話スタート)を送って待つ」イベントが終了します。
メッセージイベント終了のタイミングは、「スプライトA(Giga)」の「(01_会話スタート)を受け取ったとき」の下に連なるブロックがなくなったときです。入れ子にするためには、中に入れるブロックをすべてつなげなくてはなりません。
一方「スプライトB(Pico)」は、「スプライトA(Giga)」から送られてくる3回のメッセージイベントをその都度終わらせて、終了を返さなくてはなりません。そのため「(遊ぼう)を受け取ったとき」「(ばか)を受け取ったとき」「(もう遊ばない)を受け取ったとき」それぞれのブロック群を独立したスクリプトとしてプログラミングしています。
また、これら一連の処理は順番に処理されるため逐次処理です。
背景の切り替わりをきっかけに並列処理
「ステージ」の「(01_会話スタート)を送って待つ」メッセージイベントが終了すると、ステージの背景画像が切り替わります。これをきっかけにして「スプライトA(Giga)」と「スプライトB(Pico)」は同時に処理を行います。つまり並行処理です。
それぞれ「背景が(Hearts)になったとき」というイベントブロックを先頭にしたブロック群をつくります。表情を変えて1秒待ち、セリフを言って1秒待ち、最後の表情に切り替わります。間に1秒ずつ挟むことで見る人に変化を伝えやすくしました。
実は「ほぼ同時」の並行処理
背景が切り替わったことで2つのスプライトが同時に処理されたように見えますが、厳密に言えば同時ではありません。微妙にずれていると言われています。しかし、見た目には同時に見えるのであまり気にすることはありません。
無限に広がる物語
スクラッチ(Scratch)では、簡単なプログラミングで物語を表現することができます。アニメーションや映画を自分で作るイメージです。物語は想像力次第で無限に広がる可能性を秘めています。ぜひ思い思いの物語をプログラミングして、一般公開しましょう。