パート2で作った「数当てゲーム」は,1回しか答えられなかったので,5回まで答えられるように改良しよう。その時,絵が出るようにしてゲームを盛り上げてみよう。
こ作りながら,反復,メディア(画像,音声など)の使い方や作り方を覚えよう。
3-1. 反復って何だろう?
同じことを何回か繰り返す処理を反復といいます。次のプログラムを実行すると,画面にはどのように表示されるかな。
5回 // #1 「{回数}回目」と表示。 // #2 ここまで。 「おわり」と表示。 // #3

#1 5回 ~ ここまで … 5回とここまで。にはさまれた処理を,5回繰り返します。くり返しが終わるまではここまで。の次の行へ進みません。
#2 … 回数という変数には,何回目のくり返しなのかが代入されています。
#3 … くり返しが終わったら, ここまで。の次の行へ進みます。
くり返しを途中で終わらせるときは,抜けるという命令を使います。
10回 「{回数}回目」と表示。 もし、回数>5ならば // #4 抜ける。 ここまで。 ここまで。 「おわり」と表示。

#4 … 回数という変数の値が5より大きい(つまり6以上)だったらくり返しをやめて,対応するここまで。(6行目)の次の行(7行目)へ進みます。
これが,反復の基本的な使い方です。
3-2. 数当てゲームを5回まで答えられるようにしよう
開いたら実行してみよう! どんな動作になるかな?

プログラムを上から順に読み解いて,何行目でどんな動作をしているか確かめてみよう。
サイコロ=(6の乱数)+1。 5回 答え=「{回数}回目 サイコロの目はいくつ?」と尋ねる。 // #5 もし、答え=サイコロならば 「正解!」と言う。 // #6 違えば 「残念。」と言う。 ここまで。 ここまで。
#5 尋ねる … 入力ダイアログが開きます。中カッコ{回数}を使って何回目なのか表示しています。ここで入力した値が答えという変数に代入されます。
#6 言う … ダイアログでメッセージを表示させています。
これで,5回答えられるようになりました。でも,このままだと正解しても答え続けることになってしまいます。
3-3. 正解したときの処理を考えよう
上のプログラムを修正して,正解したときの処理を加えてみましょう。
正解したら,くり返しを抜ければよさそうです。「抜ける。」という命令を加える位置を考えて,試してみよう。

プログラムを改良してみよう!
どうしてもお手本を見たい人は…
サイコロ=(6の乱数)+1。 5回 答え=「{回数}回目 サイコロの目はいくつ?」と尋ねる。 もし、答え=サイコロならば 「正解!」と言う。 抜ける。 違えば 「残念。」と言う。 ここまで。 ここまで。
3-4. サイコロの値を知りたい
5回とも間違えたときは,サイコロの値がいくつだったのか知りたいですよね。正解したときも,5回全て間違えたときも,「正解は*でした。」と表示されるように,プログラムを追加してみよう。

プログラムを改良してみよう!
どうしてもお手本を見たい人は…
サイコロ=(6の乱数)+1。 5回 答え=「{回数}回目 サイコロの目はいくつ?」と尋ねる。 もし、答え=サイコロならば 「正解!」と言う。 抜ける。 違えば 「残念。」と言う。 ここまで。 ここまで。 「正解は{サイコロ}でした。」と表示。
ここまでで,完成したプログラムの例はこちら。
3-5. 不正解のときはヒントを出そう
間違え続けていると,サイコロの値は,自分が答えた値より大きいのか小さいのか,気になりますよね。じゃあ,それをヒントとして表示するようにしよう!

プログラムを改良してみよう!
まず,ヒントを表示するための処理を,もし~ならば~違えば~ここまでを使って考えてみよう。
もし、答え>サイコロならば 「もっと小さいよ」と言う。 違えば 「もっと大きいよ」と言う。 ここまで。
この処理を,元のプログラムに追加するとしたら,どの位置にすればよいだろう…。「残念!」と言う代わりにこのヒントを言ってもらえると親切かも。じゃあ,その位置にプログラムを追加してみよう。
どうしてもお手本を見たい人は…
サイコロ=(6の乱数)+1。 5回 答え=「{回数}回目 サイコロの目はいくつ?」と尋ねる。 もし、答え=サイコロならば 「正解!」と言う。 抜ける。 違えば もし、答え>サイコロならば 「もっと小さいよ」と言う。 違えば 「もっと大きいよ」と言う。 ここまで。 ここまで。 ここまで。 「正解は{サイコロ}でした。」と表示。
こうやって,もし~の中に,さらにもし~を書くことができるよ。
でも,これだとプログラムが見にくくなるので,違えばもしという命令を使うことができます。
もし、(条件1)ならば 処理1 違えばもし、(条件2)ならば 処理2 違えばもし、(条件3)ならば 処理3 ... 違えば 処理9 ここまで。
もし,条件1が成り立ったら処理1を実行してここまで。へ進みます。
条件1が成り立たないとき,次の条件2が成り立ったら処理2を実行してここまで。へ進みます。
さらに条件2が成り立たないとき,その次の条件3が…と,違えばもしに書かれている条件を上から順にチェックしていきます。
全ての条件が成り立たないときは,違えばに進んで処理9を実行します。

プログラムを改良してみよう!
この違えばもしを使って,不正解のときのヒントを表示するプログラムは,どんなふうになるかな? 考えて作ってみよう!
どうしてもお手本を見たい人は…
サイコロ=(6の乱数)+1。 5回 答え=「{回数}回目 サイコロの目はいくつ?」と尋ねる。 もし、答え=サイコロならば 「正解!」と言う。 抜ける。 違えばもし、答え>サイコロならば 「もっと小さいよ」と言う。 違えば 「もっと大きいよ」と言う。 ここまで。 ここまで。 「正解は{サイコロ}でした。」と表示。
このプログラムの例はこちら。
こうやって,もし~ならば~違えばもし~違えば~ここまで。を使うと,3通り以上の分岐(場合分け)を書くことができるよ。
3-6. 音を鳴らしてみよう!
答えるたびに「ピンポン♪」や「ブブー♪」と音が鳴ったら,楽しいですよね! じゃあそのプログラムを追加してみよう!
この処理を実行するためには,なでしこの非同期モードを使う必要があります。プログラムの1行目に!非同期モード。と書き加えます(難しい説明は省略します。おまじないのようなものだと思ってください)。
そして,パート2でやったように,音を鳴らすプログラムを追加していきます。
← クリックして開いたプログラムは,次のようになっているよ!
!非同期モード 正解音=ピンポンを音追加。 // #7 残念音=ブブーを音追加。 // #8 サイコロ=(6の乱数)+1。 5回 答え=「{回数}回目 サイコロの目はいくつ?」と尋ねる。 もし、答え=空ならば抜ける。 // #9 もし、答え=サイコロならば 「正解!」と言う。 抜ける。 違えばもし、答え>サイコロならば 「もっと小さいよ」と言う。 違えば 「もっと大きいよ」と言う。 ここまで。 ここまで。 「正解は{サイコロ}でした。」と表示。
#7,#8 … パート2でやったように,音を鳴らすための準備をしています。
#9 … 入力ダイアログでキャンセルボタンをクリックしたとき,答えという変数には何も入りません(つまり空っぽ)。そこで,このようにプログラムを書くと,キャンセルボタンをクリックしたらくり返しをやめるようにできます。

プログラムを改良してみよう!
では,正解したときはピンポン♪と鳴り,不正解のときは毎回ブブー♪と鳴るように,プログラムを3か所書き加えてみよう。次のプログラムをヒントにしよう。
正解音を音再生。 // ピンポン♪と鳴らすとき 残念音を音再生。 // ブブー♪ と鳴らすとき
自分で作ったあとに,お手本と比べてみよう
!非同期モード 正解音=ピンポンを音追加。 残念音=ブブーを音追加。 サイコロ=(6の乱数)+1。 5回 答え=「{回数}回目 サイコロの目はいくつ?」と尋ねる。 もし、答え=空ならば抜ける。 もし、答え=サイコロならば 正解音を音再生。 「正解!」と言う。 抜ける。 違えばもし、答え>サイコロならば 残念音を音再生。 「もっと小さいよ」と言う。 違えば 残念音を音再生。 「もっと大きいよ」と言う。 ここまで。 ここまで。 「正解は{サイコロ}でした。」と表示。
ここまでで,完成したプログラムの例はこちら。
3-7. クジラの絵を表示させてみよう!
最後に,不正解の時は黒いクジラの画像を,正解の時は白いクジラの画像を表示させてみよう! なでしこパッドには,あらかじめ「クジラ」や「黒クジラ」といった画像が用意されているから,これを利用しよう。


画面に画像を表示させるためには,次のように書きます。
絵=クジラを絵追加。
こうすると,実行画面にクジラの画像が表示されます。絵という変数には,クジラの画像の情報が格納されます。
別の行で次のように書くと,白いクジラの画像が黒いクジラの画像に変わります!
絵に黒クジラを絵読込。
- 変数=○○を絵追加 … 指定した画像を実行画面に表示します。変数には,その絵の情報が格納されます。
- 変数に△△を絵読込 … 変数で指定した画像を,△△に置きかえます。
これを使って, 不正解の時は黒クジラを,正解の時はクジラを表示するように,プログラムを追加してみよう。

まずは答えを見ずに,自分で考えて作ってみよう!
自分で作ったあとに,お手本と比べてみよう
!非同期モード 正解音=ピンポンを音追加。 残念音=ブブーを音追加。 絵=クジラを絵追加。改行作成。 // #10 サイコロ=(6の乱数)+1。 5回 答え=「{回数}回目 サイコロの目はいくつ?」と尋ねる。 もし、答え=空ならば抜ける。 もし、答え=サイコロならば 絵にクジラを絵読込。 // #11 正解音を音再生。 「正解!」と表示。 抜ける。 違えばもし、答え>サイコロならば 絵に黒クジラを絵読込。 // #12 残念音を音再生。 「もっと小さいよ」と言う。 違えば 絵に黒クジラを絵読込。 // #13 残念音を音再生。 「もっと大きいよ」と言う。 ここまで。 ここまで。 「正解は{サイコロ}でした。」と表示。
#10 絵追加 … ゲームを始める前に,あらかじめクジラ(白いクジラ)の画像を表示して準備しておきます。絵という変数には,クジラの画像の情報が格納されます。
#11 絵読込 … 正解したときは,#10で用意した絵を,クジラに置きかえます。
#12,#13 絵読込 … 不正解だったときは,#10で用意した絵を,黒クジラに置きかえます。
ここまでで,完成したプログラムの例はこちら。
絵と音が加わったら,かなりゲームっぽくなったね! 何かアイディアが浮かんできたら,自分の力でさらに改良してみよう!
3-7. うまくいったかな?
ここまで上手くいったか,プログラムを実行して確かめてみましょう。
- 正解したら「ピンポン♪」と鳴って,画面に「正解!」と,白いクジラの画像が表示されたかな。
- 不正解だったら「ブブー♪」と鳴って,画面に「もっと大きいよ」や「もっと小さいよ」と,黒いクジラの画像が表示されたかな。
- 正解したときと,5回とも不正解だったときに,「正解は*でした」と表示されたかな。
上手くいかなかった人は,お手本を開いて試してみよう。
- 反復の仕組みと書き方 n回~ここまで が分かったかな。
- 反復で 抜ける の使い方が分かったかな。
- 分岐の新しい書き方 もし~ならば~違えばもし~違えば~ここまで が分かったかな。
- 言うという命令の使い方が分かったかな。
- 音を鳴らす方法 音追加,音再生という命令の使い方が分かったかな。
- 画像を表示する方法 絵追加,絵読込という命令の使い方が分かったかな。