レッスン85
スクラッチで「山手線ゲーム」を作ろう⌗
「山手線ゲーム」とは⌗
「お題」として1つのテーマを定め、そのお題に該当する答えをプレイヤーが1つずつ順番に答える。
「お題」は誰にも答えが思いつくもので、正解か間違いかが簡単に判定できるもの(例えば「山手線の駅の名前」。1度答えたものは再び答えにすることはできない。答えが全て尽くしたら「勝ち」になる。
プログラムで予め回答を決めておくので、都道府県名とか、星座の名前とか答えの数がきまっておくものを選ぶこと。
同じ答えを2回答えたり、所定時間(例えば10秒)以内に答えられなかったり、間違っていたら負けになる。
「お題」の例⌗
-
山手線の駅名
-
都道府県の名前
-
誕生星座の名前
-
干支の名前
「誕生星座の名前」を「お題」にしてスクラッチゲームを作ってみよう。⌗
新規プロジェクトの作成⌗
次のとおり、新規にプロジェクトを作成します。
-
プロジェクト名: 〇〇の星座の名前ゲーム(〇〇は自分の名前・あだな)
-
スプライト: 「ねこ」のまま(他の動物や人に変えてもいいです)
-
背景: なくてもいいですし、自分の好きな背景を選んでもよいです。
-
音源: 次の2つの音源を「ねこ」に追加します。
-
「効果」グループの「Lose」(負け)
-
「効果」グループの「Win」(勝ち)
-
正解リストの作成⌗
以下のようにスプライト「ねこ」にリスト「星座の名前」を作成します。
-
「変数」カテゴリーで「リストを作る」をクリックする
-
新しいリスト名を「星座の名前」にする
-
「このスプライトのみ」を選ぶ
-
「OK」をクリックしてリストを作成する
-
表示/非表示の切り替えをチェックして表示させる
次のように、リスト「星座の名前」に正解を追加します。
-
表示されている「ねこ:星座の名前」の左下の「+」マークをクリックする
-
「1」が追加されるので、値を「おひつじ」と入力する
-
入力したら、左下の「+」マークをクリックする
-
「2」が追加されるので、値を「おうし」と入力する
-
この操作を繰り返し、以下の全ての星座名を入力する
-
ふたご
-
かに
-
しし
-
おとめ
-
てんびん
-
さそり
-
いて
-
やぎ
-
みずがめ
-
うお
-
入力が終わったら、表示/非表示の切り替えのチェックを外し、リストを非表示にします。
プレイヤーが答えて正解か判定する⌗
「誕生星座の名前は」と聞いて、リスト内にあれば「正解です」と言い、なければ「そんな星座はありません」といって「Lose」の音を鳴らすようにしてみましょう。
-
「ねこ」のコードに「緑の旗が押されたとき」を追加する
-
「答え」という変数を作成し、「このスプライトのみ」、「非表示」にする
-
「答えを0にする」を追加し、0の部分を削除して空にする
-
「(誕生星座の名前は?)と聞いて待つ」を追加する
-
「答えを(答え)にする」((答え)は「調べる」の「答え」です)
-
「もし<星座の名前に(答え)が含まれる>なら」
- 「(正解)と(2)秒言う」
-
「そうでなければ」
-
「(そんな誕生星座はありません)と(2)秒言う」
-
「終わるまで(Lose)の音を鳴らす」
-
ここまでできたら、右画面の緑の旗をクリックし、ねこが「誕生星座の名前は?」と聞いて、入力画面が出て、正しい答え(例えば「おひつじ」)を入れれば、「正解」と言い、間違ったこたえ(例えば「へび」)を入れれば、「そんな誕生星座はありません」と言って「Lose」の音がなることを確認しましょう。
正解している間は何回も質問を繰り返すようにする⌗
質問は1回だけでなく、正解している間は何回も繰り返すようにします。
-
「緑の旗が押されたとき」の直後に、「ずっと」を追加する
-
「緑の旗が押されたとき」の後ろにあったコードを「ずっと」の中に入れる。
-
不正解のときは終了するように、「終わるまで(Lose)の音を鳴らす」の後ろに、「すべてを止める」を追加する。
これで正解している間は何回も質問を繰り返すようになり、不正解の場合は終了するようになります。
同じ答えを2度答えたら負けにする⌗
このままでは、同じ答えを何度答えても「正解」になってしまうので、同じ答えを2度答えたら、負けになるようにします。
-
「回答済み」というリストを追加し、「このスプライトのみ」、「非表示」にする
-
「緑の旗が押されたとき」の直後に、「(回答済み)のすべてを削除する」を追加する。
-
「(回答済み)を隠す」
-
「もし<星座の名前に(答え)が含まれる>なら」を「<もし<星座の名前に(答え)が含まれる>かつ<<回答済みに(答え)が含まれる>ではない>なら」に変更する
- 「正解と(2)秒言う」の前に「(回答済み)の(1)番目に(答え)を挿入する」を追加する。
-
「そうでなければ」の後に「もし、でなければ」を追加し
-
「もし<(回答済み)に(答え)が含まれる>なら」
- 「(残念、回答済みです)と(2)秒言う」
-
「そうでなければ」
- 「(そんな誕生星座はありません)と(2)秒言う」
-
「終わるまで(Lose)の音を鳴らす」
-
すべてを止める
-
これで、2度同じ答えをしても失敗になります。
全ての正解を答えたら「成功」にして終了する⌗
このままでは、全ての正解を答えても質問が繰り返されるので、全ての正解を答えたら「成功です」にして終了するようにします。
「星座の名前」から回答されたものを削除して、空になったら「成功」にしてもよいのですが、そうすると次にもう一度同じゲームをやると、いきなり「星座の名前」が空になっていたり、正解された分だけなくなったりして、正しく再開できくなってしまいます。
また、「回答済み」のリストの長さと、「星座の名前」が一致した場合、「成功」にするという方法もありますが、「失敗」したときに回答していない正解が何だったかわかりません。
そこで、以下のようにします。
-
「正解」というリストを追加し、「このスプライトのみ」、「非表示」にする
-
「(回答済み)を隠す」の直後に、「(正解)のすべてを削除する」を追加する。
-
「(正解)を隠す」
-
「星座の名前」から「正解」に全ての内容をコピーする
-
「星座の番号」という変数を追加し、「このスプライトのみ」、「非表示」にする
-
「<(星座の番号)> (星座の名前の長さ)>まで繰り返す」
-
「(星座の名前)の(星座の番号)番目を(正解)も追加する」
-
「(星座の番号)を(1)ずつ変える」
-
-
-
「ずっと」を「<(正解)の長さ = (0)>まで繰り返す」に変更する
-
「<もし<星座の名前に(答え)が含まれる>かつ<<回答済みに(答え)が含まれる>ではない>なら」の中の
-
「(回答済み)の(1)番目に(答え)を挿入する」の後に
-
「(正解)の(正解)中の(答え)の場所番目を削除する」を追加する
-
-
-
一番最後に、
-
「成功ですと(2)秒言う」を追加する
-
「(Win)の音を鳴らす」を追加する
-
「すべてを止める」を追加する
-
「正解」というリストにはまだ答えていない答えが入っているので、失敗した場合はこれを表示するようにします。
-
「終わるまで(Lose)の音を鳴らす」の前に
-
「リスト(正解)を表示する」を追加する
これで、すべての正解を答えたら、「成功」になって終了し、失敗した場合は残った正解を表示するようになります。
10秒間のうちに回答できなかったら失敗にする⌗
ゲームをおもしろくするために、10秒間たっても答えられなかったときも失敗にするように改良しましょう。
-
「回答中」というイベントを作成する
-
「答えを()にする」の後に
-
「(回答中)を送る」を追加する
-
「(誕生星座の名前は?)と聞いて待つ」を「(誕生星座の名前は? 10秒以内に答えてね)と聞いて待つ」に変更する
-
その後に、「スプライトの他のスクリプトを止める」を追加する
-
新たに、「(回答中)を受け取ったとき」を追加する
-
「(10)秒待つ」を追加する
-
「もし<(答え)が()>なら」を追加する
-
「スプライトの他のスクリプトを止める」を追加する
-
「(時間切れ)と(2)秒言う」を追加する
-
「リスト(正解)を表示する」を追加する
-
「終わるまで(Lose)の音を鳴らす」を追加する
-
「すべてを止める」を追加する
-
-
これで、10秒間たっても答えられなかった場合も「時間切れ」で失敗になります。
「お題」を変えて、いろいろなゲームを作ってみよう⌗
「星座の名前」とその内容を書き換えていろいろなお題の「山手線ゲーム」を作って遊びましょう。