おみくじを作ろう!(変数、IF、ランダム)【Scratch2.0】
Scratchを使ったおみくじを作っていこうと思います。
引いたら結果が出るだけのシンプルなおみくじですが、プログラミングにおいては今後役立つテクニックが含まれています。特に今回学習する”変数“と”IF関数(もし〜なら)“はプログラミング教育に置いて必須と言えるほど重要です。この2つがあることによってできるようになることは多く、自由な発想を実現するために役立つからです。新しい要素を使いますが、慣れてしまえば簡単なプログラムなのでしっかりと応用できるよう理解しましょう。
今回もポイントを理解しやすいようシンプルに”ScratchCatをクリックしたらおみくじの結果を表示“するプログラムにします。まずは背景や画像などは気にせずスクリプトを理解することに注力しましょう。
おみくじを作ろう!
今回のポイントは以下の3つです。
(1)プログラムを制御する変数
(2)条件によって動作を変えるIF関数(もし〜なら)
(3)不確定要素を与えるランダム関数
(1)変数とは簡単に紹介すると”中身を変えることができるデータ“のことです。同じ変数を表示させたとしても、その前に行った処理によって表示される内容を変えることができます。変数と言いますが、中身は数字だけでなく文字が入ることもあります。言葉ではピンとこないかもしれませんが、使いながら理解しましょう。
(2)どのプログラミング言語にも用意されている基礎的な関数の1つがIF関数です。Scratchでは制御パレットの「もし<>なら」、「もし<>なら | でなければ」というのがIF関数にあたります。もしの後に書かれた条件を満たしているときだけ実効されるプログラムを書くことができます。
(3)プログラムは命令された通りに実効されます。つまり、1度書かれたプログラムは基本的には常に同じ結果となります。おみくじを作るとき、常に同じ結果(毎回必ず大吉、など)では面白みがありませんよね?ゲームなどを作るときも同じで常に同じでは面白くない場合があります。こんなときに利用するのがランダム関数。指定した値の中で毎回ランダムに違う結果を用意してくれます。変数と組み合わせて使います。
文章だけでは伝わりにくいと思います。実際にScratchにアクセスして作りながら読み進めていってください。
1.プロジェクトを作成する。
まずはプロジェクトを作成しましょう。プロジェクトの作り方の詳細は以前にも解説しましたので今回は詳細は省略します。作り方を忘れてしまったという方は過去の記事を参考にしてください。
この記事ではプロジェクト名は「おみくじを作ろう!(変数、IF、ランダム)」としました。
2.ScratchCatのスクリプトを記述する
今回のおみくじは、ScratchCatのスクリプトのみで完結します。一つ一つ解説しながら進めるのでしっかり理解しましょう。全て基礎となるため、今後のプロジェクトで何度も出てきます。
2.1スタート条件の設定
ScratchCatを引くことによって結果を表示するため、まずはスタート条件の「このスプライトがクリックされたとき」をスクリプトエリアにドラッグ&ドロップしましょう。
2.2変数の定義
次に変数を定義します。変数は最初は用意されていないため、作成する必要があります。この変数を作成する作業のことを変数を定義するといいます。
ブロックパレットの中から「データ」を選択すると「変数を作る」、「リストを作る」の2つの項目のみ表示されています。
「変数を作る」をクリックしましょう。新しい変数を作るためのポップアップが表示されるため、”変数名“を入力してOKボタンを押下しましょう。中程に「すべてのスプライト用」か「このスプライトのみ」という選択項目がありますが今回のおみくじではどちらでも関係ありません。
今回は変数名を「おみくじ」としてOKボタンを押しました。
変数”おみくじ”が定義されました。データの画面に「変数を作る」、「リストを作る」以外に「おみくじ」、「おみくじを”0”にする」、「おみくじを”1”ずつ変える」、「変数おみくじを表示する」、「変数おみくじを隠す」という定義された変数用のブロックが新しく追加されました。
変数の中身は定義した段階では”0”になります。ステージの左上に表示されている「おみくじ0」というのが変数おみくじに現在設定されている値になります。この表示は、データパレットの変数左に表示されているチェックボックスを外すことによって非表示にすることができます。
↓
あくまで表示が消えるだけで変数が削除されるわけではないため、表示されていなくてもスクリプトで変数おみくじは使うことができます。
2.3ランダム関数を使って変数おみくじを設定
次にこの変数おみくじに値を入力します。この変数おみくじにはおみくじの結果をランダム関数を使ってセットします。ランダム関数は、指定した値(正数)をランダムに設定するための関数です。このため、おみくじの結果をまずは数字で決めることになります。今回は以下のように決めました。
1 → 大吉
2 → 中吉
3 → 小吉
4 → 吉
5 → 凶
このため、変数おみくじには1〜5の値をランダムに設定します。データパレットにある「おみくじを”0”にする」ブロックをスクリプトエリアの「このスプライトがクリックされたとき」の下につなげましょう。
次に”0”の部分をランダム関数に変更します。Scratchのランダム関数は演算パレットにある「”1”から”10”までの乱数」になります。このブロックを先ほど追加した「おみくじを”0”にする」の”0”に代入します。
このままでは変数おみくじは1〜10の値になってしまいます。”10”の値を5に変更しましょう。
これで変数おみくじには1〜5の数字がランダムで設定されるようになりました。ここでは試しませんが、動きを確認したい人はデータパレットで変数おみくじを表示してScratchCatをクリックしてみてください。クリックするたびにステージ左上の数字が変更されることがわかると思います。このように、中身の値を変更することができるのが変数の特徴です。
2.4IF関数で結果表示
変数おみくじにはランダム関数で1〜5の結果が設定されています。このままでは単なる数字でしかなく、おみくじの結果というには味気ない感じですね。なので、IF関数を使って変数おみくじの数字から該当の結果(大吉、中吉、小吉、吉、凶)を表示するようにプログラムを追加しましょう。
IF関数はScratchにおいては「もし<>なら」というブロックです。<>に条件を記載します。例えば、大吉の場合、「もし<変数おみくじが”1”>なら」となります。これをスクリプトにしていきます。
まずはメインとなる制御パレットにある「もし<>なら」ブロックをスクリプトエリアにドラッグ&ドロップしてつなげましょう。
次に<>の中身を作っていきます。演算パレットに「□=□」というブロックがあるのでこれを<>に代入します。この演算ブロックの□や◯には変数や数字、文字列を入力することができます。
「□=□」ブロックの左側には先ほど作った”変数おみくじ”を代入しましょう。データパレットに「おみくじ」ブロックがありますので、このブロックを代入します。そして、右側の□には数字の”1”を入力します。
これでIF関数が「もし、おみくじが”1”なら」となります。この結果が正しい場合、つまり変数おみくじの中身が1の場合、式が成り立つ(真という)ため、その下のカッコのプログラムが実行されます。反対におみくじの中身が1以外の場合、式が成り立たない(偽という)ため、その下のカッコのプログラムは実行されず、次の処理を実行します。
今回の場合、おみくじ=1が成り立つ場合は大吉になるため、ScratchCatに「大吉!」と表示するブロックをカッコの中にドラッグ&ドロップします。表示させるためのブロックは見た目パレットにある「”Hello!”と2秒言う」ブロックを使います。
これで大吉が完成です。ScratchCatをクリックすると何回かに1回「大吉!」と言います。これは変数おみくじがランダム関数によって”1”になったときだけ言うためです。同様の手順で2〜5についても結果を表示するように追加しましょう。
表示したい結果に合わせて数字という言葉を変えてください。
これで変数おみくじに1〜5のどの数字が入ったとしても結果を表示するようになります。
完成
今回、実際に作ったプログラムをスクラッチ上で公開したものが以下になります。
ScratchCatをクリックするたびにおみくじの結果を言ってくれます。おみくじの基本的なプログラムはたったこれだけということです。あとはこだわるのなら画像を入れたり、結果の表示方法を変更することによって立派なおみくじになります。
Scratch上のプロジェクトはこちら
https://scratch.mit.edu/projects/195158367/
まずは基本となるプログラムの部分をしっかりと理解するようにしましょう。
おまけ
プログラムの書き方は1通りではなく、いろいろな書き方があると言いました。ここでは、もう1つのIF文を使った違う書き方を紹介します。
こちらのIF文「もし<>なら |でなければ」という条件を満たさなかった場合(偽)に実行するプログラムを記述することができます。つまり1度でも条件を満たした場合、以降はIF文を繰り返し行わないプログラムになります。
どちらのプログラムも実行結果は同じになります。何度も言いますが、目的を実現するといった意味ではプログラムの書き方は無数にあります。今回紹介した1個目のプログラム、2個目のプログラムで中身が違うため厳密には動作に違いがあります。ただし、どちらが優れているというわけではなく一長一短であり、そして今回のおみくじプログラムにおいてはどちらも正解です。
2個目のプロジェクトはこちら
https://scratch.mit.edu/projects/195680495/
プログラミング教育、プログラミング学習においては「この正解が無数にある」ということを念頭に置いて行うのが大事になります。回答は1つの例であり、自分の書いたプログラムが違っていたからと間違いだと思わないよう、やりたいことが実現できているのであれば中身を気にせず自信を持つようにしましょう!