プログラミング 中部大学2025年春期
Scratch で神経衰弱
神経衰弱の構成
神経衰弱に必要な要素を考えて、それぞれをプログラムでどのように実現するかを考える。
- カードの配置
- スプライトをカードに見立てて、クローンを使ってカードを配置する。
- カードの表示
- コスチュームを切り替えることで表と裏を表現する。
- カードの種類
- クローンに番号を割り当てて、その番号とカードの表との関連をリストで管理する。
- カードをめくる
- スプライトをクリックすることで「めくる」動作を実現する。クリックはイベントで検出する。
- カードの状態判定
- カードは同時に2枚までめくることができる。
めくられたカードを変数にいれることでその状態をプログラムから判定できるようにする。
2枚が一致したものを特別な値を設定する。
神経衰弱の実装
スプライトの作成
- カードの裏となるコスチュームを1番目のコスチュームとして作成する。
- カードの表となるコスチュームを追加する。
例ではAからDの文字を表として追加した。
コスチュームは番号で指定するので、表のコスチュームは連続しているようにするとよい。
スプライトの配置
- 「緑の旗がクリックされたとき」に続いてスプライトの初期化(コスチューム、画面表示)を行う。
- クローンそれぞれにつける番号(clones)を1にする。
これはクローンが作成されるたびに1ずつ増加して、それぞれのクローンのローカル変数にいれられる。
- クローンを格子状に配置する。
内側のループでX座標をずらしながら、外側のループでy座標をずらしながら、クローンをつくる。
クローンは左下から右につくられ(1-4)、上段(5-8)をつくる。
- クローンを配置したあとで、本体は隠れる。
クローン番号をつける
- それぞれのクローンに作成された順番を記憶させるために、ローカル変数を作成する。
変数を作成するときに「このスプライトのみ」を選択する。
「すべてのスプライト用」にしておくと、変数の値が全てのプログラムで共有されるが、「このスプライトのみ」を選択するとクローンごとに値を持つことができる。
- クローンが作成されたときに、clonesの値をcloneにいれて、clonesを1増やす。
クローンとカードの表との関連づけ
クローン番号を配列の添え字(リストの順序)に、カードの表のコスチューム番号を値にした配列(リスト)を作成する。
カードの表となるコスチュームは2から5までであることに注意する。
カードのシャッフル
cardsリストはクローンの並び順と対応しているので、ゲーム性がない。
そこで、cardsリストをランダムに並べ替える。
並べ変えは以下の手順で行うことができる。
- 変数aに1をいれる。これは入れ替えをする一つ目を指す。
- 変数bに1から8(cardsの長さ)までの乱数をいれる。これは入れ替えの相手となる。
- cardsリストのa番目を変数cardに退避する。
- cardsリストのa番目をcardsリストb番目にする。
- cardsリストのb番目を変数cardにする。
- aを一つ増やして2に戻る。
クリックでスプライトのコスチュームを変更する1
それぞれのスプライトは「このスプライトがクリックされたとき」イベントで、自分がクリックされたときがわかる。
n番目のクローンの表はcardsのn番目に入れてあるので、クローンのローカル変数cloneを使って、それに対応するコスチュームに変わることができる。
クリックでスプライトのコスチュームを変更する2
- クリックされたクローンがすでにめくられたものであるかどうかを判断する。
そのためにcardsリストの自分のクローン番号の値を参照する。
- クリックされたクローンが1枚目にめくられたものと同じであるかどうかを判断する。
そのために変数aの値(1枚目のクローン番号)と比較する。
- 新しくめくるカードであることがわかったので、カードを表にする。
- 変数aが0のとき(すなわちクリックされたクローンが1枚目であるとき)、変数aにクローン番号をいれる。
- 変数aが0でないとき、変数bにクローン番号をいれる。
- 1枚目と2枚目の表が同じ(コスチューム番号が同じ)とき、当たりとしての処理を行う。
- 表が異なるとき、はずれとしての処理を行う。
- 変数aとbの値を0にして、カードがめくられていないことを示す状態にする。
裏に向ける処理
- 2枚めくられた後に発生する「resetを受け取ったとき」に続いて処理を行う。
- クローンの番号からcardsリストの値を参照し、0かどうかを調べる。
0でないときコスチュームを裏にする。
完成したScratchのプロジェクトファイル
練習
全て表になったときにファンファーレが鳴るようにしてください。
ヒント:「あたり」を表示するところで、cardsの値が全て0になっているかどうかを調べてみる。
cardsの値は0以上の値をとるので、全部足し合わせて0になればすべて0であることがわかる。
「あたり」とか「はずれ」とかのメッセージを表示している間もクローンのクリックが可能になっています。
その間にすばやくクリックすると意図しない動作をします。
メッセージ表示中は動作を停止するようにしてください。
課題
違うものを探すゲームを作成し、そのScratchのプログラムを提出せよ。
提出期限は06月11日00:00とします。
要件は下記の通り。
- 10以上の絵を配置し、その中に1つだけ少し異なるもの(当たり)を混ぜておく。
- 当たりをクリックすると、正解メッセージを表示し、それまでにクリックした回数が表示される。
作り方のヒント
- コスチュームを二つ用意する。一つは少し手を加えて違うものにする。プログラムが完成するまではあまり小さな違いだと動作確認が難しいのでその辺は加減をする。
- クローンをつくる数と同数の要素からなるリストを作成する。初期値として0をいれておくとよい。このリストの値が1のとき、当たりとする。
- リストのどれか一つを1にする。
- クローンを配置する。クローンそれぞれに固有の番号を与えて、もしその番号が上記のリスト中で1であったとき、コスチュームを変更しておく。
- ゲーム開始を告げる。
- クリックされたとき、共通の変数(例えばclick)を1増やす。
- クリックされたものが当たりのとき、ゲームを終了する。