リストを使ったおみくじを作ろう!(ランダム関数、配列)

今回はリストを使ったおみくじを作っていこうと思います。

実行した時の結果は前回の記事(こちら)で作ったプログラムと同じですが、作り方が大きく異なってきます。今回使用するリストは、他のプログラミング言語では「配列」と呼ばれるものです。大きな括りでは前回紹介した「変数」と同じですが、変数よりも複雑で少し難しい内容になります。

リストを使ったおみくじを作ろう!

今回のポイントは2つ。

(1)リスト(配列)の使い方

(2)データの初期化

(1)リスト(配列)は複数のデータを一括で管理することのできる箱のようなものです。簡単に説明すると、前回習った「変数」を1つのリストで複数扱うことができます。ただし、単純に複数の変数を扱うことができるだけなく、工夫次第で複雑なプログラムを組み上げたり、また既存のプログラムを簡易化することができたり、とても便利な仕組みです。複雑な使い方は置いておいて、まずはシンプルに使ってみましょう。

(2)プログラムは何度実行しても毎回同じ動作を行います。このため、実行結果も毎回同じようになります。しかし、これは最初の状態が同じ場合に限ります。最初の状態が違えば実行結果が変わってしまう場合があります。この問題を解決するために必要なのが初期化になります。

1.プロジェクトを作成する。

まずはプロジェクトを作成しましょう。プロジェクトの作り方の詳細は以前にも解説しましたので今回は詳細は省略します。作り方を忘れてしまったという方は過去の記事を参考にしてください。

この記事ではプロジェクト名は「リストを使ったおみくじを作ろう!(ランダム関数、配列)」としました。

2.ScratchCatのスクリプトを記述する

今回のおみくじも、ScratchCatのスクリプトのみで完結します。実際にScratch2.0でプログラムを作りながら読み進めることをお勧めします。

2.1スタート条件の設定

ScratchCatを引くことによって結果を表示するため、まずはスタート条件の「このスプライトがクリックされたとき」をスクリプトエリアにドラッグ&ドロップしましょう。

2.2リストの作成

リストを作成します。リストの作成は変数と同じくデータパレットの中にある「リストを作る」から行うことができます。

「リストを作る」ボタンをクリックするとポップアップが表示されるため、「リスト名」を入力してOKボタンを押します。今回のリスト名は”おみくじ”にしました。

これでリストおみくじができました。データパレットにリストおみくじを使うための「おみくじ」、「”thing”をおみくじに追加する」、「”1”番目をおみくじから削除する」、「”thing”を”1”番目に挿入する(おみくじ)」、「”1”番目(おみくじ)を”thing”で置き換える」、「”1”番目(おみくじ)」、「おみくじの長さ」、「おみくじに”thing”が含まれる」、「リストおみくじを表示する」、「りすとおみくじを隠す」ブロックが追加されます。

またステージの左側にリストおみくじの中身が表示されています。作ったばかりで何も入っていないため、表示は(empty)となります。変数の場合は”0”でしたが、リストでは(empty)となるので覚えておきましょう。

2.3リストにデータを格納する

早速リストを作っていきましょう。リストにデータを格納するにはデータパレットに出来た「”thing”をおみくじに追加する」を使います。”thing”はおみくじの結果に変更します。まずは「大吉!」で作ってみましょう。

スクリプトを書いたら、ScratchCatをクリックして動作を確認してみましょう。ステージの左側に表示されているリストおみくじに「大吉!」が追加されます。

さらにもう1回スプライトをクリックしてみてください。

リストの中に「大吉!」がまた追加されました。プログラムの組み方次第ではこれでも問題ありませんが、ScratchCatをクリックして実行するたびに同じ内容がリストに追加されてしまうのはあまり良くありません。

このような時に必要なのが「初期化」です。初期化とは、実行環境をプログラムを実行する前に適切な状況にすることを指します。今回の場合では、プログラムを実行する前ではリストおみくじの中身が(empty)であることが望ましいのでクリック時にリストおみくじの中身が削除されるように初期化のプログラムを追加します。

今回は初期化処理にデータパレットの「“1”番目をおみくじから削除する」ブロックを使用します。”1”の部分は1の右についている▼をクリックすることによって内容を変更できるドロップダウンリストになっています。クリックして表示したら一番下にある「すべて」を選択しましょう。

スクリプトの変更が完了したら、ScratchCatをクリックしてプログラムを実行してみてください。何度実行してもリストには「大吉!」が1つだけになるはずです。リストには「大吉!」以外も必要なため、他の4つの結果も同じようにリストに追加しましょう。

スプライトをクリックして実行すると毎回、リストに5項目がセットされます。

2.4おみくじの結果を言う

前回はおみくじの結果をIF関数で分けていましたが、今回はIF関数を使わないで”ランダム関数で作成した数=リストおみくじの結果”を直接言うようにします。

まずは見た目パレットから「”hello!”と”2”秒言う」ブロックを追加します。

「”hello!”と”2”秒言う」ブロックの”hello!”の部分は言わせたい内容であり変更可能です。ここをリストおみくじの中身にしたいため、データパレットの「”1”番目(おみくじ)」ブロックに変更します。この「”1”番目(おみくじ)」ブロックは変数と同じようにこのままの文章を言うのではなく、指定した番号のリストの中身を言います。

最後にリストの指定する番号を”1”からランダム関数を使って”1から5までの乱数”に変更します。

ScratchCatをクリックしてみましょう。リストが作成されておみくじの結果を言います。セリフは2秒で消えて、クリックするたびに違う結果を言うはずです。(1/5で同じ結果)

完成

今回、実際に作ったプログラムをスクラッチ上で公開したものが以下になります。今回はわかりやすいようにリストの中身を表示しています。

前回作った(おみくじを作ろう!(変数、IF、ランダム))と同じ動作になるはずです。実際にScratch2.0でプロジェクトを作りながら動作を確認してみましょう。前回はIF関数を使ったおみくじの作り方を2つ紹介しました。今回はリストを使ったおみくじの作り方を紹介しました。どれにも一長一短がありますが、やりたかったことを実現できているということでどれでも正解です。

最初のうちはどれがいい!と考えずに、「どうやったら目的の動きを実現できるだろう?」と考えながらプログラムを作っていきましょう。

おまけ

上記のプログラムでは初期化処理をスプライト(ScratchCat)のクリックごとに行っていますが、リストを作る初期化処理はクリックごとではなく最初に1回だけ行えばあとは行う必要がありません。Scratchにおいて最初とはスタートの緑のフラグをクリックされた時になります。

このため、初期化処理を分けて以下のようにしても同じような動作になります。

作成するプロジェクトが大きくなるほど、このようにスクリプトのスタート条件が複数に分かれていきます。このように1回の処理を短縮することによって、1回のアクション(今回はスプライトをクリック)した時の処理を軽くすることができるからです。他にも可読性が上がるなどのメリットがあります。

ただ闇雲に処理を分ければいいというわけではありませんが、プログラミングに慣れてきたら処理を短く・軽くできそうな方法がないか考えながら作ってみましょう。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする