Scratchで神経衰弱!カードを裏返すには?

この連載では、Scratchを使って、ゲームをつくりながらプログラミングを楽しんでもらいたい! と考えています。しかも子どもだけでなく、大人も一緒に。第8回はカードの「表裏」をひっくり返せる条件を決めましょう。

これまでの【親子で楽しもう!Scratchプログラミング】はこちら

前回は裏にしたカードを開くところまでできました。今回は、それに次の機能を追加します。

  • 開けるカードを2枚までにする(3枚目は開けない)
  • 表にしたカードをもう一度クリックすると、裏に戻せる

それには、2つの変数と1つのリストが必要です。カードを開くことができるかどうかの変数「開けるか」と何枚開いたかの変数「開いた数」、それに、各カードが表か裏かのリスト「カードの状態」です。

変数を用意する

「変数」から、「変数を作る」をクリックし、「開けるか」と「開いた数」を作ります。

「リストを作る」をクリックし、「カードの状態」を作ります。

変数を初期化する

「(緑の旗のマーク)が押されたとき」のイベントに対してのブロックに、変数とリストの最初の値を設定しておきましょう。こうすれば、前の実行の値が残っていたりしても、また、まっさらな状態から始めることができます。このような処理を「初期化」といいます。

「カードの絵をすべて削除する」の「カードの絵」を「カードの状態」に変えて、「12回繰り返す」の上にはめ込みます。「なにかをカードの絵に追加する」の「なにか」を「裏」に、「カードの絵」を「カードの状態」にします。

「カード番号を0にする」を「12回繰り返す」の上にはめ込み、「カード番号」を「開いた数」にします。もう1個「カード番号を0にする」を「12回繰り返す」の上にはめ込み、「カード番号」を「開けるか」、「0」を「はい」にします。

処理を分ける

「このスプライトが押されたとき」で行う処理は、大きく分けて2つ必要です。1つは、カードが開けるときの処理で、カードが裏だったら、表を表示する処理。もう11つは、カードが開けないときの処理で、カードが表だったら裏に戻す処理です。

処理を、開けるときとそうでないときに分けるには、「制御」の「もし…なら、でなければ」ブロックを使います。

「演算」の「… = 50」を、「もし…なら、でなければ」の空欄に、はめ込みます。「… = 50」の左側は「変数」の「開けるか」、右側は「はい」にします。

これで、処理が2つに分かれます。さらに、それぞれの処理で、カードが裏か表かを判断するために、「もし…なら」のブロックを中に入れます。

カードを開く

「演算」の「… = 50」を、「もし…なら」の空欄にはめ込みます。「… = 50」の左側は「変数」から「カードの絵の11番目」、右側は「裏」にします。「カードの絵の 11番目」の「カードの絵」は「カードの状態」に、「1」のところを「カード番号」にします。

「もし、カードの絵のカード番号番目=裏なら」の中には、前回作った「コスチュームをカードの絵のカード番号番目にする」を動かして、はめ込みます。

その下に、「変数」から、「カード番号を 1 ずつ変える」をはめ込み、「カード番号」を「開いた数」にします。

さらに、その下に、「カードの絵の1番目を1に置き換える」をはめ込み、「カードの絵」を「カードの状態」に変更し、左側の「1」を「カード番号」、右側の「1」を「表」にします。

ここまでで、カードが開けるとき、カードが裏だったら、表にするようにできました。

2枚以上、開けなくする

「開いた数」が2になったら、「開けるか」を「いいえ」にしましょう。「制御」の「もし…なら」を、「カードの状態のカード番号番目を表で置き換える」の下にはめ込みます。その空欄に、「演算」の「… = 50」をはめ込み、左側を「変数」の「開いた数」、右側の「50」を「2」にします。

その中に、「変数」の「カード番号を 0 にする」をはめ込み、「カード番号」を「開けるか」に変え、「0」を「いいえ」にします。

これで、カードを2枚開くと、それ以上は開けなくなりました。カードが開けるときの処理は出来上がりです。次は、開けないときの処理です。

カードが表だったら、裏に戻す

「カードの絵のカード番号番目 = 裏」のブロックを右クリックして、コピー(複製)します。

「でなければ」の中の「もし…なら」の空欄にコピーしたブロックをはめ込んで、「裏」を「表」に入力し直します。

「もし、カードの絵のカード番号番目=表なら」の中には、「見た目」の「コスチュームをコスチューム1にする」をはめ込みます。

その下に、「変数」から「カード番号を1ずつ変える」をはめ込み、「カード番号」を「開いた数」に、「1」を「-1」にします。

あとのブロックは、コピーして、まとめてやってしまいましょう。コピーしたい一番上のブロックで右クリックし複製を選ぶと、まとめてコピーができます。

「カードの状態のカード番号番目を表に置き換える」の「表」を「裏」に、「開いた数 = 2」の「2」を「0」に、「開けるかをいいえにする」の「いいえ」を「はい」に変えます。

これで、カードが開けないとき、カードが表だったら、裏にするようにできました。すべてのカードが裏(開いているカードが0)になったら、また、開けるようになります。

「このスプライトが押されたとき」のイベントのブロックは、こうなりました。

動きを確認する

ここまでの動きを確認してみましょう。2番と4番のカードをクリックしてみます。「カードの状態」の2番と4番の値が「表」に変わります。「開いた数」の値は「2」になり、「開けるか」は「いいえ」になります。こうなると、他の裏のカードはもう開けません。

もう一度、2番と4番のカードをクリックします。「カードの状態」の2番と4番の値が「裏」に戻ります。「開いた数」の値は「0」になり、「開けるか」は「はい」になります。また、裏のカードを開けるようになります。

だいぶ、神経衰弱らしくなってきました。次回はいよいよ仕上げです。開いたカードの絵をチェックして、同じだったら開いたままにします。

この記事が気に入ったら「いいね!」をクリック!プログラミング教育・STEM教育などの情報をお届けします!

これまでの【親子で楽しもう!Scratchプログラミング】はこちら

親子でScratchを楽しもう - バレッド(VALED PRESS)

© Valed.press