Scratchでゲーム制作入門 – 見下ろし型シューティングゲーム(5)

こんにちは、まなゲー池田です。 「見下ろし型シューティングゲーム」の5回目です。今回は「プレイヤー機がやられる」から「ゲームオーバー」への流れをつくていきますよ。

プレイヤー機が敵キャラに触れたら「やられた」メッセージを送る

今回は「メッセージ」を使ってみます。
メッセージは、あるスプライトやクローンで起こったイベントを他のスプライトやクローンに伝える時に便利です。ただ、「他のスプライトやクローンに伝える」のはもう少し先でやろうと思っていますので、今日のところはひとまず、「メッセージを使ってみる」ぐらいになります。

プレイヤー機スプライトの中のスクリプトにいくつかブロックを追加していきます。
赤枠で囲った部分が追加部分ですが、最初の「画像効果をなくす」は後で使います。
「もしBananasに触れたなら」「やられたを送る」が、衝突判定とメッセージ送信を行う部分です。


※ブロック上の文字が読みにくい場合は、画像をクリックすると大きな画像が表示されます。

メッセージを受け取った時の処理を書く

これまで、スクリプトの先頭にくるブロックは、「旗がクリックされたとき」か「クローンされたとき」でしたが、「メッセージを受け取ったとき」ブロックもそれら同様、スクリプトの先頭に置ける(先頭にしか置けない)ブロックの一つです。その後に、メッセージ受け取り後の処理を書いていきます。

大まかな流れはこうです。

  • 「やられた」メッセージを受け取ったら
  • プレイヤー機を操作できなくする
  • 画像効果を使って、やられた感じを演出する
  • 背景を「ゲームオーバー」用のものに切り替える

先ほど「画像効果をなくす」ブロックを初期化部分に追加したのは、ここで画像効果を使って変化させたものを、元に戻すためです。

「やられた」メッセージを受け取り「スプライトの他のスクリプトを止める」が実行されると、矢印キーやスペースキーが押されるのを監視して、移動やビームの発射を行なっていたスクリプトが停止するので、キー操作を受け付けなくなります。(これをしておかないと、やられたはずのプレイヤー機からビームが発射されて敵を倒せてしまったりと、おかしなことになります。)

やられた感じを演出、の部分だけをもう少し詳しく説明すると、

「ピクセル化」というスプライトがモザイクがかかったような感じになる効果を使って、壊れた様子を表現する
「幽霊」という、スプライトの「透明度」をコントロールする効果を使って、ちょっとずつ薄くなるのを20回繰り返して透明にし、見えなくする

という処理をすることにしました。
具体的には下の画像をみてください。

今回追加したものも加えた、プレイヤー機内のスクリプト全体を表示すると下のようになります。

これで、飛んでくるバナナにプレイヤー機がぶつかると、壊れて消滅、画面にゲームオーバーと表示されるようになったはずです。

次は、敵キャラが弾を発射して、プレイヤー機を攻撃してくるようにします。

Scratchでゲーム制作入門 – 見下ろし型シューティングゲーム(4)

こんにちは、まなゲー池田です。
「見下ろし型シューティングゲーム」の4回目です。そろそろ、敵キャラに出てきてもらいましょう。

敵キャラ用スプライトを選ぶ

「新しいスプライト」から、顔アイコンをクリックして新しいスプライトを選んでいきます。
今回は、バナナ(“Bananas”)を選択しました。

もちろん、自分で描いてもOKです。その時は「中心」をちゃんと決めてあげてください。

「自分自身のクローン」を作る

さて、敵キャラの中身を作っていきます。
敵キャラはいくつも出てきては消えていくものですから、前回の「ビーム」同様、「クローン」を使っていきます。ただ、ビームと違って何か別のものから「発射」されるのではありませんから、クローンを作るのは敵キャラ自身のスプライト内で行なっていきます。

まず、旗ボタンが押されたら型となるスプライトを隠しておきます。

そうしておいて、スペースキーでプレイが開始されたら、数秒おきに自分自身(“Bananas”)のクローンを作るのをずっと繰り返してもらいます。

クローンされた時どうするか

クローンされた敵キャラは、画面の上端から出てきて、下に向かって移動し、画面外へと消えていってもらいたいと思います。

画面上端付近のいろんな位置から出てきて欲しいので、X座標は「乱数」を使って毎回バラバラになるようにします。

「乱数」は、実行するたびに、違う結果が出るようにしたい場合に使うものですが、例えば今回だと、イメージとしては「-220から220までの整数が全部書いてある巨大なサイコロ」を作って転がす感じになります。様々なゲームを作る上で必要になってくる処理ですので、またこれからもちょいちょい使っていくことになると思います。

この処理も含めて、

  • 乱数を使って出現座標を決める
  • 表示する
  • 画面下端まで移動
  • 削除

という手順で処理していきます。プログラムとしてはこんな感じになります。

動かしてみると、画面上端のランダムな位置から出てきたバナナが、画面下端までいって消える、と狙い通りに動いてくれるはずです。

ここまで、敵キャラ内のスクリプトをまとめて表示してみるとこういう具合になります。

ビームに当たったらどうするか

ここまでで、とりあえず敵キャラが出てくるようになりましたが、ビームを当てて倒せるようにしなければシューティングゲームになりませんね。

敵キャラ内のプログラムに、以下の数ブロックを追加して、敵キャラがビームに触れたら、

  • 「とくてん」を1ずつ増やす
  • 敵キャラ(クローン)を削除する

という処理がされるようにします。

うまく動きましたでしょうか。今回はここまで。
次は、プレイヤーが敵キャラにぶつかるとやられてしまう処理を作っていきます。

Scratchでゲーム制作入門 – 見下ろし型シューティングゲーム(3)

こんにちは、まなゲー池田です。
見下ろし型シューティングゲーム」の3回目をやっていきます。
2回目はこちら)

今回は、「プレイヤー機からビームを発射」できるようにします。
やっと少しシューティングゲームっぽくなりますので、楽しんでくださいね。

「ビーム」スプライトを作る

「新しいスプライトを描く」を選択し、ベクターモードにします。

「直線」ツールを選択。太さや色も選びます。

ビームのような小さいものを描くときは、拡大して描くことをお勧めします。

拡大してみると、「中心」を表す+印があることがわかります。ぴったりその上を通るように縦に線を引いてやりましょう。ここを適当にやってしまうと、あとで思っているのと違う場所からビームが発射されてしまいます。気をつけてください。

プレイヤー機に対してこのくらいのサイズ感で良いかと思います。もちろんお好みで。

作ったスプライトに名前をつけます。「ビーム」っと。

ついでにプレイヤー機にも「プレイヤー」とつけておきましょう。

ひとつのスプライトをもとに、たくさんのものを作る「クローン」

準備ができたので、ここから中身を書いていきますが、これまで作ってきたものと違って、「ビーム」は、プレイヤー機から次々と発射されるオブジェクト(もの)です。

このように「ひとつの型からたくさんのものを作って使いたい」場面では「クローン」を使います。
「スプライト」から「クローン」を作ると、たこ焼き器で、たこ焼きをつくるように、「同じもの」だけど「それぞれ別々のモノ」を作って、それぞれに動かすことができるようになります。

言葉で説明すると、ちょっと難しいですね。やってみたほうが早いかな。やってみましょう。

「プレイヤー」スプライト側のスクリプトを書く

まず、プレイヤー機に「ビームを発射する」ためのプログラムを書いていきます。

新しく「旗がクリックされたとき」ブロックを出してきて、これまで書いてきたものとは別の新しいスクリプトを書きます。

下図のようにスクリプトを組んでみましょう。

これを実行すると。最初にスペースキーを押して、ゲームスタートした後、「スペースキーが押されたかどうか」を、コンピュータがずっと監視している状態になります。

そして、スペースキーが押されていたら、「ビーム」のクローンを1つ作って、1秒待ち、そしてまた「スペースキーが押されたかどうか」をずっと見ている状態に戻る、というのを繰り返してくれます。

なので、スペースキーを押しっぱなしにした場合、1秒おきに新しいビーム(クローン)を作り続けてくれることになります。

ただし、この状態でプログラムを動かし、スペースキーを押しっぱなしにしてみても、パッと見何の変化も起こりません。なぜなら、最初から表示されているビーム(型となるスプライト)と同じ場所に同じ大きさで、作られたクローンが重ねおきされていっているからです。

これを確認するには、プログラム起動後、しばらく(5秒ほど)スペースキーを押しっぱなしにしてから、マウスを使って、ビームをドラッグ&ドロップしてみると良いです。ひとずつ動かしてみると、その下に別のクローンがちゃんとあるのがわかります。

「ビーム」スプライトのスクリプトを書く

スペースキーで、ビームスプライトのクローンを作ることができるようになりましたが、これでは「発射」したとは言えません。

(1)プレイヤー機の場所にクローンが出現して
(2)その場所から、画面上に向かって飛んで行く

ように、「ビーム」側にも「クローンされた後どうするか」を書いてあげなければいけないのです。
あとで、もう少し書き加えますが、ひとまずこんな感じのプログラムで動きます。

「型になるスプライト」がずっと見えていては具合が悪いので、旗がクリックされたら隠すようにします。

そうしておいて、クローンされたら、

座標をプレイヤー機の座標と同じにする(この時点ではまだ隠れてるので見えません)
表示する(プレイヤー機の場所に「出現」したように見えます)
Y座標を10ずつ増やすのを繰り返します。(ステージ上に向かって移動していきます)

という命令が(クローンごとに、つまり一発一発のビームごとに)実行されるようにしてやります。

これで、「スペースキーでビーム発射」ができるようになりました!

ビームが画面端にたまってしまうのをなんとかする

さて、何発かビームを撃ってみると、困ったことが起こっていることに気がつくかと思います。
なんと、発射したビームが画面上端にどんどん溜まってしまっているじゃないですか。

ビームをかなり小さく描いた場合、もしかすると溜まっているのが見えないかもしれません。そうだったとしても、これは大問題です。

というのも、Scratchにはオブジェクトの同時配置数に制限があるので、このままでは一定数ビームを発射すると、それ以上ビームが撃てなくなるのはもちろん、ビーム以外の、例えば敵キャラなどのオブジェクトも、出てこなくなってしまうのです。

これをなんとかするために、クローンされたビームたちには、画面の端まで行ったら消えてもらわなければなりません。下図のようにプログラムを書き加えてやりましょう。

これで、ビーム周りは完成です。
あ、もしかすると、上のプログラム追加で「ビームが発射されなくなった!?」となった人があるかもしれません。その原因はおそらくこうです。

追加したプログラムは、「ビームが画面の「はしっこ」に触れたら削除する」というもので、ここでいう「はしっこ」は画面上だけではなく、下でも、左右でも同じです。

なので、例えばビームスプライトが大きすぎたり、出現場所がプレイヤー機から下や左右にずれていたりした場合、「発射直後に、どれかの「はしっこ」に触れているので、速攻で削除されてしまった」ということが起こる場合があります。

小さめのビームスプライトになるように書き直して、きちんと「中心」を決めてやれば解決するはずなので、色々試してみてください。

さて、今回はここまで!次はいよいよ敵キャラの出現です!

Scratchでゲーム制作入門 – 見下ろし型シューティングゲーム(2)

こんにちは、まなゲー池田です。
今日は「見下ろし型シューティングゲーム」の2回目です。今回は、タイトル画面を作って、(旗ボタンクリックでいきなりゲームスタートではなく)プレイヤーがゲーム開始をコントロールできるようにします。下のような手順で実装していきたいと思います。

  • 背景を設定
  • タイトル画面(これも背景の1つ)を作る
  • 旗ボタンでタイトル画面表示(まだ操作できない)
  • スペースキーでゲームスタート(背景が通常の背景に変わり、操作可能に)

背景を設定

背景エリアから「ライブラリーから背景を選択」ボタンをクリックします。

表示される候補からお好みの背景を選びましょう。
今回僕は”stars”を選択しました。

背景を選択して、「背景」タブを開きます。
ちなみに、背景にもスクリプトを書くことができます。ただし、スプライトとくらべると出来ることが制限されています

タイトル画面を作る(1)(タイトル画面用に背景を複製)

次に、タイトル画面を作っていきます。
今回はゲームプレイ時用の背景(先ほど作成したもの)を複製&加工して作ります。

先ほど作成した背景を右クリックして、「複製」を選択します。

ついでに、不要になった初期背景は「削除」してしまいましょう。

タイトル画面を作る(2)

複製した方の背景を加工して、タイトル画面を作っていきます。
「テキスト」ツールを選択してタイトルや説明を書き込みましょう。

フォントの種類や文字色を選ぶこともできます。

こんな感じで作ってみました。タイトルは”SPACE SHOOTING”、その下に英語で「スペースキーを押してゲーム開始」と書きました。なぜ、全部英語なのか・・・残念なことに「テキスト」ツールは半角英数文字のみの対応になっており、日本語を記述できないのです・・・。

まなゲーらぼでは、ちょっとずつ英単語を覚えてもらう良い機会と捉えていますが、やはり日本語で書きたいことも多いです。そういう時は「絵」としてペンツールなどで描いてもらっています。
(Scratch外のツールを使ってタイトル用の画像を作り、それを読み込むこともできます。)

使うのは先になりますが、ゲームオーバー画面もこの機に作ってしまいましょう。

背景の初期化&スペースキーでスタート

下準備ができましたので、ここからやっとプログラムを書いていきます。
前回作ったプレイヤー機のスクリプトを改造して、

  • 初期化部分に背景の初期化を追加(旗ボタンが押されたタイトル表示する)
  • スペースキーが押されるまでゲームが動き出さないようにする
  • スペースキーが押されてゲームがスタートしたら背景をプレイ用の背景に変える

というのを組み込んでいきます。下記のような具合ですね。追加するブロックは4つだけ。

ここまでできたら、旗ボタンでプログラムを走らせましょう。
タイトル画面が表示されて・・・。

スペースキーを押すと、タイトルは消えて、プレイヤー機を操作可能になりました。

今回はここまで。次はいよいよビームを発射できるようにしていきますよ。

Scratchでゲーム制作入門 – 見下ろし型シューティングゲーム(1) –

こんにちは、まなゲー池田です。

Scratchでゲーム制作入門。モグラ叩き、迷路ゲームときて、
今回から「見下ろし型シューティングゲーム」を作っていきます。
今日はプレイヤーキャラをキー操作で上下左右に移動できるようにするところをやっていきたいと思います。早速始めましょう。

プレイヤーキャラにするスプライトを選ぶ

これまで初期からいるネコさんを使ってきましたが、今日は主人公(プレイヤーキャラ)にするスプライトを選ぶところからやっていきましょう。

「新しいスプライト」のところから、顔アイコンを選んでクリックします。

表示される候補から、好きなものを選びます。
今回は「乗り物」から宇宙船(Space ship)を選びました。

ネコさんは使わないので、可哀想ですが右クリックメニューから削除してしまいます。

こんな感じで主人公用スプライトの準備ができました。

必要な変数を作っておく

宇宙船の中身を作っていく前に、必要になりそうな変数を2つ作っておきます。
「データ」パレットを開いて「変数を作る」ボタンを押して、

「とくてん」と「スピード」を作りました。
「とくてん」を使うのはしばらく先になりますが、先に作っておきます。

初期化する(向きと座標)

では、宇宙船に中身を入れていきますよ。
まずは、初期化(最初の状態を決めておく)です。面倒に思いがちですが、やっておく習慣をつけましょう。動きのあるスプライトでは初期角度と初期座標ぐらいは決めておく方が良いです。

キー操作で上下左右に移動できるようにする

ようやく今日の本題、キー操作に入ります。
で、イベントパレットを見ると、いかにも「キー操作はこれを使ってね!」な感じで下記のようなブロックがあるんですが、これはあまりおすすめ出来ないブロックです。なので使いません。
(後で、おすすめしない理由がわかるスクリプトも載せますので、興味がある人は比べてみてください。)

上下左右に同じスピードで動くようにしたいのと、作った後で動かしてみてスピードを調整することを前提としているので、先ほど作った「スピード」変数を使っていきます。ひとまず「スピード」の値は5にしておきます。

で、その下に「ずっと」ブロックをくっつけておきます。
このブロックが非常に重要になってきます。

今回はキーボードの矢印キーで上下左右に動かしたいので、それらのキーが押されたかどうかを調べるプログラムが必要になります。で、「キーが押されている!」ということになったら押されているキーに合わせて、宇宙船の座標を移動させてやらなければいけません。

  • 「〜キーが押されているかどうか」調べる
  • もし押されていたら
  • 宇宙船スプライトの座標を(移動1回分=「スピード」分)変えてやる

という処理を、下のブロックを使って組み立てます。
まずは「右向き矢印キー」が押されたら、右へ「スピード」分移動というのを作ります。

「右へ移動」というのは座標で表現すると「x座標の値を増やす」ということになります。
これらをブロックで表現するとこのようになります。

これを応用して、今度は左むきの移動を作っていきます。
左に移動するとは「x座標を減らす」ということなので「-スピード」(マイナス「スピード」)ずつ変えるという指示を出してやります。

負の数は中学校の範囲ですが、小学生でも、こういう動きを作る中で使っていくと割とすぐに理解してくれます。

おさらいを兼ねて、各方向への移動を座標と値の変化で表現します。

右移動:x座標の値を増やす
左移動:x座標の値を減らす
上移動:y座標の値を増やす
下移動:y座標の値を減らす

これに合わせて、上下の移動も作っていきましょう。
4方向への動きを全て組み上げたら、それらを全部まとめて、「ずっと」ブロックの中に入れてやります。

ここまでをまとめるとこんな感じになりますが、なぜ「ずっと」が重要なのでしょうか。
以前にもお話ししましたが、コンピュータは基本的に「待つ」ということが出来ません。「もし〜キーが押されたなら・・・」というチェックもそのブロックのところが読み込まれた、その時1回だけやるというのが基本になります。

我々人間なら、例えば「電話がなったら出てね」と言われれば、電話がなるまでずっとそのことを気にかけます(忘れてしまうことが良くあるのも事実ですがw)。しかし、コンピュータ的に見てみると、その指示を受けたその場で「電話がなっているかどうか」を調べ「なっていません」となったら、もう次の処理へ行ってしまって、その後電話がなろうがなるまいが気にしません。

なので、違和感を感じるとは思いますが、「〜したら・・・してね」というタイプのお願いをコンピュータにする場合は、基本的に何らかの繰り返し、一番単純なのは「ずっと」をつけておいてあげないと、こちらの狙い通りに動いてくれないということになってしまうのです。

「左移動、下移動はマイナス」というのはすぐに理解してくれる子ども達も、この違和感はなかなか馴染まないらしく、「ずっと」は常に忘れられがちで「動かない!」の元となります。

話が長くなってしまいましたが、ひとまずこれで宇宙船はキー操作で上下左右に動くようになりました。今回はここまでとしておきます。

おまけ:おすすめしないブロックを使った場合

今回のようにちょっと複雑なプログラムを頑張って組まなくても、下記のようなシンプルなプログラムで上下左右移動は実現可能です。

しかし、実際にやってみるとわかりますが、非常にカクカクした動きしか出来ない上に、斜め移動が出来ません(2つ同時に押している状態に対応できない)。そのほか、プログラムをスタートさせていない(旗ボタンなどを押していない)状態でもキー入力を受け取ってしまうなど、いろいろ残念な仕様になっています。

学習上も、繰り返しや条件分岐といった重要な概念を楽しく学べる場面をみすみす逃すことになりますので、早い段階であってもキャラクター移動は今回のような形で作ってみることをおすすめします。

子供向け特化のタイピング学習ゲームをつくる(2)

こんにちは、まなゲー池田です。
「子供向け特化のタイピング学習ゲームをつくる」2回目の今日は、問題データを整理していきます。

小学校漢字1006字

小学校で習う漢字は1006文字。読み仮名問題データを作るだけでぞっとしちゃう数ですが、今回はまなゲーらんどで公開中の漢字ゲーム用にずっと以前に作成したcsvデータがありますのでそれをもとに調整していきます。(こういうデータの公開とか共有って需要ありますかね。あったら考えるんですが)

音訓やらありまして1500問以上あるんですが、こいつを先日紹介した「配当漢字チェッカー」を使いながら整理していきます。

この漢字読み仮名データを作った当時は、「習ってない漢字が混ざったってついでに覚えればお得でいいじゃないか」という考え方でした。基本的に考え方自体は変わってないのですが、思うところあって、チェッカーもあることですし、今回は各学年の配当漢字のみでデータを構成していきたいと思います。

配当漢字チェッカーで読み仮名問題データをチェック

早速やってみましょう。配当漢字チェッカーを開いて、調整したいデータをテキストエリアに貼り付け、学年を選んでCheckをクリックします。

すると、チェッカーが作動して、貼り付けたデータ内に含まれる配当漢字と、配当漢字外の漢字を探して列挙してくれ・・・って、あれ?「含まれない配当漢字」が4つもあるじゃないですか!!これまで網羅されていない部分があったことが判明・・・。

※他学年の問題データ間でフォローしあう感じで全体としては1006字網羅されていたようでした;;

過不足分を調整する

不足分を補いつつ、範囲外の漢字を使っている箇所を修正していきます。

例えば下の例だと、「形」(けい)の問題として「形式」を指定していますが、「式」は2年生ではまだ習わないようです。(「チェック範囲」を変えることで、何年生で習うはずか見つけることもできます。)

なので、「形式」以外、2年生までに習う漢字だけで構成できる問題を考えます。今回は「体形」にしました。(「体型」の方が一般的ですかね。間違いではないはずですが、ちょっと気になりますね。※結局「正方形」に変更しました)

という感じで、かなり手間ではありますが、ちまちまと調整していきます。

タイピング向けに作りますので、できるだけ長くなりすぎないようにも配慮しないといけません。今回は、本当にただの報告&配当漢字チェッカーの使い方紹介になってしまいました;;

つづく

Scratchでゲーム制作入門 – マウス操作で迷路ゲーム(5)

こんにちは、まなゲー池田です。
マウス操作で迷路ゲーム」の続きをやっていきます。

前回までの4回で、ひとまず迷路ゲームとしての形は整いました。今日はもうちょっと機能を加えて「おじゃまキャラ」を追加したいと思います。

「おじゃまキャラ」用のスプライトを作成する

Scratchにあらかじめ用意されている様々なスプライト用イメージの中から、今回はこの青いイヌ(Dog2)を選びました。

こいつに、下図のように、初期化と移動用のスクリプトを組み込んでいきます。

これで、初期位置から画面内を左右に行ったり来たりしてくれるはず、なんですが・・・左に移動するときに上下が逆さまになってしまいます・・・。これはちょっと気持ち悪い。

これは、向きを変える(回転)のルールが、そうなって欲しいものとズレているせいです。上下はそのままで左右だけ、向きを変えて欲しいのに、上下もさかさまになってしまうためにこんなおかしな感じになってしまいます。

「回転の種類」を設定してやる

「じゃまイヌ」スプライト(Dog2)の情報を開いて、「回転の種類」を変更してやりましょう。

デフォルト(初期状態)では回転になっているので、矢印のアイコンをクリックして左右反転に変更してあげます。

うまくいきました。これで逆さまのイヌが走ってくる不気味なゲームにならずに済みますね。

歩行アニメーションを作ってみる

ところで、今回選んだdog2は、最初から3つのコスチュームを含んでいて、これをプログラムで切り替えてやると、トコトコ歩く感じにアニメーションさせることができます。

1「dog2-a」と、2「dog2-b」を0.5秒ごとに切り替えるスクリプトを追加してやりましょう。具体的にはこんな感じになります。

dog2-cも面白い絵ですが、歩行アニメーション向きではなさそうなので今回は使わないことにします。

これで「じゃまイヌ」は完成です。中身のプログラムをまとめて載せておきますので参考にしてください。

「ネコさん」が「じゃまイヌ」にふれたらスタート位置へ戻る

おじゃまキャラの準備ができましたので、ネコさんの方のスクリプトにいくつかブロックを追加して「Dog2に触れたら、スタート位置に戻る」ようにします。

これで完成です。旗ボタンでゲームをスタート。じゃまイヌが邪魔すぎで、僕は結局クリアできませんでした;;初期設定(向きや場所)の他、移動速度なども調整して、難度調整をしてみてください。

追記:書きながら今気がつきましたが、このプログラムだとネコさんを移動させずにじっとしていたら、イヌにふれても平気ということにになっちゃいますね。うーん、赤で囲った部分を丸ごとちょっとだけ移動させればOKなんですが・・・、それは自分で試してみてください!

5回にわたってやってきました「マウス操作で迷路ゲーム」、今回でおしまいです。次は何にしようかな。シューティングかアクションか、その辺ですかねぇ。

ではまた!!

Scratchでゲーム制作入門 – マウス操作で迷路ゲーム(4)

こんにちは、まなゲー池田です。
マウス操作で迷路ゲーム」の続きをやっていきます。

第2回目では「荒ぶるネコさんを落ち着かせる」ところまでを、
第3回目では「迷路を作って自由に通れなくする」ところまでをやりました。

まずまず迷路ゲームっぽくなってきましたので、第4回目の今日は、ゴールまでの時間を図る機能を追加したいと思います。

ゴールを作る

ネコさんがそれにふれたら迷路をクリアしたことになる「ゴール」を作ります。
前回の迷路づくりと同じように、新しくスプライトを描きます。モードも前回同様「ベクターモード」で描いていきましょう。

画面右側のメニューから「文字」ツールを選択します。文字を書きたい場所をクリックすると、そこにテキストボックスが現れて文字を書けるようになります。(ただし、残念ながら使える文字は英数字だけです。かな文字や漢字は使えません・・・。)

ゴール(GOAL)の頭文字をとってGとしました。
名前も変更して「ゴール」としておきましょう。

「ゴール」スプライトには特にプログラムを書き込みませんので、これで完成です。
ステージ上でドラッグして、ゴールにしたい位置まで移動させましょう。

タイマーをセットする

以前に作った「タイム」変数を使って、ゴールするまでの所要時間を図る仕組みを作っていきます。以下のプログラムをネコさんスプライトに追加していきます。流れとしては、

旗ボタンがクリックされたら、タイムを0にする(初期化)
その後、1秒待ってタイムを1増やす、をくりかえす

こんな感じですね。

で、このままだと初期化直後に時間をはかり始めてしまいますが、ネコさんをクリックして操作をスタートするまでは、所用時間をカウントするのを待っておいて欲しいので、そのように設定を加えます。

これでいい感じに、タイムがカウントアップされていくようになりました。が、そうです。このままではゴールしてもカウントアップが止まりません。

ゴールについたら、タイマーをとめる

ですので、もう一つスクリプトを追加して、ネコさんが「ゴール」にふれたら、カウントアップを止めるように設定します。

特定のスクリプトだけを狙って止めることはできないのですが、この「ネコさん」スプライト上の他のスクリプトを止めることになり、タイムのカウントアップを止めるのと同時に、ネコさんの移動も止まるので、今回に関しては、ちょうどいい具合になります。

「全てを止める」という乱暴な選択肢もあって、これはこれで手っ取り早くて楽なのですが、何もかもがブツッと切れてしまってゲームの終わりとしてはさみしいです。最初はともかく、慣れたらなるべく使わないように工夫していくことをおすすめします。

シンプルな迷路探索ゲームとしては、ひとまずこれで完成したと言っていいと思いますが、せっかくなので、次回は「おじゃま虫」キャラクターを出して、迷路探索を妨害させてみたいと思います。次回で最終回の予定です。

<おまけ>

「〜まで待つ」というブロック、便利なのでよく使いますが、実はコンピュータは「待つ」ということはできません。「〜まで待つ」は実は「〜まで、何もしないことをひたすら繰り返す」という意味で、下の画像のような処理になっているのです。「〜かどうか調べる」「何もしない」「〜かどうか調べる」「何もしない」・・・を高速でくり返しているわけです。

Scratchでゲーム制作入門 – マウス操作で迷路ゲーム(3)

こんにちは、まなゲー池田です。
マウス操作で迷路ゲーム(1)」の続きをやっていきます。

前回は「荒ぶるネコさんを落ち着かせる」ところまでやりました。

迷路を作っていきましょう

連載3回目にしてようやく、迷路を作りますよ。

迷路は「背景」に書き込むこともできますが、今回は「スプライト」として作ってみようと思います。ステージ右下の「新しいスプライト」のところから、ペン型のアイコンを選んでクリックします。

すると、タブが「コスチューム」タブに切り替わりますので、ここに迷路の「壁」を描いていきます。スプライトを自分で描くときには2つのモードがあって、デフォルト(初期設定)では「ビットマップ」モードになっているのですが、僕は「ベクター」モードをおすすめします。なので右下の「ベクターに変換」ボタンでモードを切り替えます。

そのあと、右側の直線ツールを選んで、壁をえがいていきます。左下のスライドバーでえがく線の太さを調整できますので、好みの太さに調整しましょう。

描き終わったら、作ったスプライトに名前をつけます。デフォルトでは「スプライト2」とかになっていると思います。このままでも使えるのですが、使うスプライトが増えるとどれが何だかわからなくなりますので、今のうちから名前をつける習慣をつけておくのをおすすめします。

スプライトエリアのアイコン左上に「i」ボタンがあるので、それをクリックします。

すると、スプライトの情報が表示されます。今回は「めいろ」と名付けることにします。ここでは名前の変更のほかにも、色々と設定することができます。

壁を通り抜けられないようにする

せっかく描いた壁も、このままでは自由に通り抜けられるただの背景状態です。なので、ネコさん側のスクリプトにプログラムを追加して、壁を通り抜けられないようにしましょう。

「情報」パレットから「〜色に触れた」ブロックを取り出します。ブロック上の色付きの四角1回クリックしてやると、マウスポインタの形が変わります。その状態でステージ上のどこかをクリックすると、その場所の色が対象に選ばれます。

他にもいくつかのブロックを取り出して、下図のように組み上げます。

「進んだ分だけ戻す」ことで「通れない」を実現する

「通れない」というブロックがあれば簡単なんですが、残念ながらそうは行きません。
なので、1回分移動したら、すぐその後に「壁の色」にふれていないかどうかを調べます。で、もしもふれてしまっていたら、こっそり「今きたのと反対方向に1回分戻す」ことで、直前の移動を「なかったことに」してしまいます。

「反対向きに同じだけ」動かすために「-(マイナス)スピード歩動かす」という書き方をします。ちょっと難しいですが、よく使う方法なので、おいおいなれていってください。

今組み立てたパーツを、画像のように前回までに作ったプログラムに追加してやると、ネコさんは壁を越えられなくなります。これで迷路内を探索できるようになりましたね。

<おまけ>

デフォルトの大きさのネコさんでは、大きすぎて通路を通れません・・・。なので少し小さくなってもらいましょう。画像のアイコンをクリックするとマウスポインタが変形します。その状態でステージ上のネコさんをクリックしてあげましょう。クリックするごとに小さくなります。逆に大きくしたい場合は、左側のアイコンをクリックして同じように操作します。

次回は、ゴールを作って、ゴールするまでのタイムを測れるようにしたいと思います。

Scratchでゲーム制作入門 – マウス操作で迷路ゲーム(2) –

こんにちは、まなゲー池田です。
マウス操作で迷路ゲーム(1)」の続きをやっていきます。

マウスポインタの後を追って移動するキャラクターをゴールまで導く時間を競うゲームを作っていきますが、前回まずポインタを追いかけるスプライトを作るところまでやりました。

ネコさんはなぜ「荒ぶる」のか?

ポインタを追いかけている間はいいのですが、追いついた後も立ち止まらず、ポインタの周りを激しく動き回るネコさん。これは、1回あたり10歩ずつ(10ピクセルずつ)移動するネコさんが、いつも最後の1回の移動でマウスポインタを通り越してしまうことが原因で起こります。

通り過ぎてしまうので、反対を向いて戻ろうとする。するとまた通り過ぎてしまうので、また振り向いて戻ろうとする。これを延々とくりかえしてしまうために「荒ぶっている」感じになってしまうのです。

通り過ぎてしまう前に立ち止まるようにしたい

ということで、マウスポインタまでの距離をしらべて、「次の移動で通り過ぎてしまう」とわかったら、そこで移動をやめるようにします。そのままのプログラムが組めればいいのですが、ちょっと工夫が必要で、「マウスポインタまでの距離が、1回に移動する距離よりも小さいときだけ移動する」というように指定してあげなければいけません。

変数「スピード」と「タイム」を準備

これまで1回の移動距離を10としてきました。そのままでいきますが、同じ数をあちこちで使うことになりますし、後で変えたくなるかもしれないので、移動速度を入れておく用に変数を作っておきます。(ついでに後から使うことになる「タイム」変数も作っておきます)

一定以上離れているときだけ移動するようにする

変数の準備が整ったので、これを使って、ネコさんの移動に制限をつけていきます。

  • 初期化の部分で「スピードを10にする」
  • 「ずっと」の内側に「もし、マウスのポインターまでの距離 > スピードなら」を追加

下の画像のように組み上げます。

これでもう、ネコさんが荒ぶってしまうことはありません。

クリックするまで動き出さないようにする

落ちつきのでてきたネコさんですが、旗ボタンクリックと同時にマウスポインタへ向けて突進してくるのもちょっと困ります。クリックされるまで待ってもらいましょう。

「〜まで待つ」ブロックを使って、下図のように追加します。
いくつかの条件を同時にチェックしたい場合には、今回のように「〜かつ・・・」ブロックを使います。

これで、迷路探索の準備がととのいました。
次回は、迷路を作ってその中を移動できるようにしていきます。