さて前回のキャッチゲームを改造したバージョンを作りました。
Scratchプログラム(キャッチゲーム:印度じゃないよ印西市)
さて今回は僕が住む印西市が作ったYoutube動画「印度じゃないよ印西市」にならい、前回のリンゴではなく印西のハンコ、毒リンゴではなく印度のハンコが落ちてくるのをひろうゲームです。
そもそも印度じゃないよ印西市ってなんだよっていう人はこちらを参照
ということで印度じゃなくて、印西市のハンコをキャッチするゲームです。
中身はこちら
ゲームのやり方
ゲームがスタートするとキーボードでワンちゃんを左右に動かします。なお、今回、マウスに対応していません。(最初キーボード対応で作っていて、マウス対応に手を広げたのですが、どうしてもうまくいく構成にできませんでした。力不足・・・)
ゲームの主人公は印西市役所に勤めるワンちゃんです。天井から降ってくる〔印西〕のハンコをキャッチして5つたまったら上キーをおして、窓口に来ている印西市民にハンコを押してあげます。この作業を3回行えばゲームクリア。逆にハンコを持っていくのが遅いと、市民はイライラして、最後には上司から怒られてLIFEが減ります。ハンコは〔印西〕じゃない〔印度〕も落ちてきます。〔印度〕のハンコをとってしまうと溜ったハンコが1減ります。逆に〔千葉―ニュータウン〕というハンコをとったらハンコが2倍たまります。
プログラムの説明
プログラムの説明に入ります。説明は変数と各スプライトに分けての説明となります。
全体の流れ
プログラム全体の説明ですが。このプログラムでは〔ワンちゃん〕〔印西市民(ハンコを待っている人〕〔ワンちゃんの上司〕そして落ちてくるハンコが3種類〔印西ハンコ〕〔印度ハンコ〕〔千葉ニュータウンハンコ〕そして〔背景〕と用意しています。ワンちゃんの上司を1スプライトで独立して存在させていますが、これは実際は背景と一緒にしてしまっても構わない動きですが、今回は独立させて書いておきました。
次にスプライト間の処理のやりとり(メッセージのやり取り)を以下に示します。
処理を渡す流れでは、ハンコが一定以上溜った時に窓口で待っている印西市民にハンコを持っていくための処理を始めるための【押印】、ハンコが押された後の処理を始めるための【押印処理】、間違ったハンコ〔印度ハンコ〕をとってしまった時にワンちゃんがダメージを受けたように見せるためにする【ダメージ】、それから印西市民を待たせすぎたときに発生する【叱責】、最後にゲーム終了時に上司が褒めてくれる処理をおこすための【完了】と、最後にゲームを止めるための【ゲーム終了】というメッセージでプログラム全体を回しています。
この【完了】と【ゲーム終了】なのですが、先ほど書いた通り上司と背景を一緒にすれば不要なところでした(作ってから気づきました。)そして、これは、ちょっと良くわかってないのですがゲーム終了でスクリプトを止めるという処理が一か所に書くだけでは止まらず、複数のスプライトに書いてやっとプログラムが止めることができるということができ、その関係でゲーム終了のメッセージを複数の場所に飛ばしています。この点はもう少しScratchのことを理解して改善する箇所でしょうか。
変数・配列の定義
変数
今回は配列は使わず変数だけとなります。用意する変数は次のとおり
【ハート】はワンちゃんのLIFEゲージですね。上司に怒られると1つずつ減ります。次に【ハンコ】は正しいハンコをキャッチした数です〔印西ハンコ〕は1、〔千葉ニュータウンハンコ〕は2としてカウントします。ハンコが5つ溜まったら窓口に並んでいる〔印西市民〕にハンコを持っていけます。そして【点数】は印西市民の対応が1回住んだら1点で、3点ためるとゲームクリアとするために用意しています。
各スプライトの説明
ワンちゃん
ワンちゃんスプライトの処理はこちら
ワンちゃんのスプライトでは、まずスタートボタンを押したらワンちゃんが最初にいる位置を決定します。その後はワンちゃんを左右に動かす処理。それから上のキーを押したら押印するために印西市民の場所に向かうという処理を入れ、【押印】メッセージを送っています。逆にメッセージを受ける処理としては、【押印完了】では印西市民にハンコを押しにいった後にワンちゃんを初期位置に戻す処理、【ダメージ】ではワンちゃんに幽霊の効果を与えてダメージを受けたように見せます。
印西市民
次は印西市民スプライトの処理内容です。
印西市民のスプライトではスタートが押された時に、ワンちゃんがなかなかハンコを持ってこないと怒ってしまうという処理を走らせます。ちなみにタイマーについては、タイマーの開始時間を指定しなくてもタイマーの変数(最初から準備されている変数です)を使うことで、スタートボタンがおされてから、そのタイマーを表示するまでの時間を裏で自動でカウントしています。ここではワンちゃんがハンコを持ってこないで、18秒をこえると「まだなの?」とはなし、30秒を超えると「遅いよ!」と言って、ハートが1つ減り、上司が怒る処理が始まる【叱責】メッセージが飛びます。
一方で、ワンちゃんがハンコを押しに来た、つまり【押印】メッセージを受け取った時、ハンコが5個溜っていたらOKをだし、点数を1つ増やし、5個に満たない場合はハンコが足りないよと言って追い返します。
上司
上司のスプライト処理です。
上司のスプライトはある条件になったら表示させるだけの処理です。【叱責】メッセージを受け取ったら怒っている上司を表示させ、【完了】メッセージを受け取ったら褒める上司を表示させます。
印西ハンコ
ハンコ処理の説明にはいります。
印西ハンコはキャッチしてよいハンコです。キャッチするとハンコが1つ溜まります。この処理はスタートが押されたら上から落下してきて、ワンちゃんにふれたらハンコを+1して、ハンコを落下開始位置まで移動させます。この時、同じ位置から落下されるとゲーム性がなくて面白くないのでX座標をランダムするため乱数を用いています。ワンちゃんに触れずに地面、つまり画面の端まできたら、同じく落下開始位置まで戻します。この時もX座標はランダムにします。ハンコの数については、印西市民に押印に行くには5個たまれば十分なので5個以上キャッチしていたら、ハンコの数を5に制限するように処理をいれています。
印度ハンコ
印度ハンコの処理です。このスプライトの基本部分は先の印西ハンコと同じなので違う部分だけ説明しますね。
このハンコはキャッチするとダメなハンコです。そのためキャッチするとハンコが-1になり、ワンちゃんが衝撃をうけたかのように表示させる【ダメージ】のメッセージを送ります。そして、ハンコの数がマイナスになると変なので0以下にならないように制御を入れています。
千葉ニュータウンハンコ
千葉ニュータウンハンコです。
このハンコはキャッチするとハンコが二倍たまります。そのため、頻繁にでないように5秒と乱数分まってから表示させるというのが他のハンコとは違う処理です。
背景
最後は背景の処理です。
背景のスプライトではゲームが開始したら変数を初期化するという処理を入れています。またハートが0になったらゲーム終了で全スプライトを停止、点数が3になったらゲームクリアとするため【完了】メッセージを送り上司が褒めるというアクションを起こします。その帰りとして【ゲーム終了】のメッセージを受け取り、全スプライトを停止します。先にも書いた通りこの上司が褒めるアクションは背景と一緒にしてしまってもよかったかもしれませんね。そうすると無駄にスプライト間でメッセージをやり取りすることもなかったかと。
まとめ
さて以上で全てのスプライトの説明が終わりました。今回はマウスに対応できなかったところが少し悔いにのこりますが、僕ももう少し勉強が必要ですね。さて次回は迷路ゲームでも作ってみようと思います。
コメント