Scratchで猫がチーズを探し回る簡単な迷路ゲームを作る2

Scratch
Scratchで猫がチーズを探し回る簡単な迷路ゲームを作る2

Scratch1.4で猫が迷路の中のチーズを探し回るゲーム作りの2回目。今回の主な作業は迷路を作ることだ。

ゲームなどほとんど作ったことのない私には、迷路を作ること自体がとっても面倒な作業だと思っていた。

しかしScratchだからなのか、簡単に迷路を作ることができた。また、迷路と登場人物(動物)のスプライトのサイズの調節が、画面でバランスを確認しながらできるのもScratchの便利な点だと感じた。

背景(ステージ)に音を流すプログラム

Scratchの背景はステージと呼ばれているが、ステージにもプログラムを設定することができる。

ここではゲームの間中、指定した音を流すことができる。音のライブラリーも色々な種類のものが用意されているが、バージョン1.4ではバージョンが古いせいか、いくつか「Unrecognized audio file format」というエラーが出て利用できないものがいくつかあった。

プログラムとしては、ゲームが始まると「forever」に挟まれた「play sound ~ until done」コマンドによって「~」で選択した音がゲームが終わるまで繰り返される。

よく似たコマンドに「play sound ~ 」がある。私はこれまで両者の違いが今ひとつわかっていなかった。丁度いい機会だから、両者を比較してみた。音は何でもいいのだが、「dog1」という「ワン」と犬のなき声を使った。

「play sound ~ 」は「ワ、ワ、ワ、ワ…」と小刻みな連続の音で、犬というより機械的な音のように感じられるものが流れる。よく聞くと「ワン」でなく「ワ」を繰り返していて「ワン」になっていない。

「play sound ~ until done」の方は、「ワン」と「ワン」の間にほんの少し間があって、自然な犬のなき声に近い。

今度は「trumpet1」というトランペットの「プオーン」という音で比較してみた。

「play sound ~ 」で聞くと「プ、プ、プ、プ…」という連続音で「プオーン」の音の先頭の「プ」の音だけが繰り返されているように聞こえる。

「play sound ~ until done」では、「プオーン、プオーン」、プオーン」と、一つ一つの音が聞き取れるように連続される。

2つの音の比較で両者の違いが良くわかった。「play sound ~ until done」は、繰り返す1回1回で元の音を最後まで鳴らしてから繰り返している。その意味で「 until done」なのだとわかった。

「play sound ~ 」の方は、1回1回で元の音を最後まで鳴らさず、音の先頭部分の音だけを繰り返すのだ。というより、音の最後の部分まで鳴らす前に先頭の音が発せられる、という感じだ。

こう見てくると、「play sound ~ 」を使う意味がわからなかった。元の音の一部しか使わないで繰り返すからだ。どういう使い方があるんだろう?

とりあえず今回は「play sound ~ until done」を使って、「suspense」というスリラー的な音を繰り返すことにした。

ステージに、ゲームの間音を繰り返すプログラムを設ける

(写真:ステージに、ゲームの間音を繰り返すプログラムを設ける)

簡単な迷路を作る

登場人物(動物)たちが動き回る舞台が迷路だから、背景(ステージ)に迷路を描くのかと思ったらスプライトとして作るそうだ。

その理由は、猫や幽霊、虫たちとの接触の判定をしやすくするためだという。迷路が背景(ステージ)だとスプライトたちとの接触の判定ができないのだろうか?とりあえず、迷路というスプライトを作ろう。

Paint Editorを開いて、Lineを選び、Brush sizeで線の太さ、カラパレットで色を選ぶ。教科書通り濃い青色を選び、線の太さを適当に選んだ。

後で気がついたが、太い線を選ぶと通路が狭くなり、スプライト同士がすれ違えない。スプライトのサイズを縮小するコマンドを使えば相対的に通路が広くなってすれ違えるようにできるのだが、スプライトが小さくなりすぎて見た目が良くない。もう少し細めの線の太さにすれば良かった。

shiftキーを押しながら線を引けば直線がきれいに引けた。Eraser(消しゴム)ではみ出た部分も簡単に消して修正できた。

教科書と同じような迷路が描けた

(写真:教科書と同じような迷路が描けた)

できた迷路のスプライトを背景(ステージ)に表示させると、迷路が小さく他のスプライトが大きすぎることがわかった。迷路と他のスプライトのサイズが初期値(100%)のままだと、迷路が小さ過ぎてしまう。

初期値のサイズだと迷路とスプライトのサイズが釣り合わない

(写真:初期値のサイズだと迷路とスプライトのサイズが釣り合わない)

迷路のサイズをセットするコマンド「set size to ~ %」で200%に設定して大きくすると、画面に丁度一杯に拡大された。それから他のスプライトを同じコマンドを追加して、逆にサイズを小さく設定する。通路をすれ違えるサイズになるように設定するには、ネコチンは12%、虫は15%にまで小さくする必要があった。

ここでもっと迷路の線の太さを細くしておけば良かったと気がついたわけだ。幽霊は壁を通り抜けられる設定ですれ違う必要がないので35%でOKだった。チーズもネコチンの約3倍の35%にした。

これで全体のサイズのバランスが取れた。

迷路とスプライトたちのサイズのバランスがとれた

(写真:迷路とスプライトたちのサイズのバランスがとれた)

チーズのプログラミング

サイズを35%に設定する他に、迷路のランダムな位置に現れるようにする。そしてもしネコチンがチーズに触れたら10ポイント得点されるように「score」という変数を用意した。

変数scoreはゲームの開始時にゼロに初期化しておいて、ネコチンがチーズに触れるのを待って、もし触れたら得点され音がなるようにする。

ここで使っている「wait until ~ 」は、「if ~ 」と同じ働きができる便利なコマンドだと思った。「~するのを待って~する」と、「もし~なら~する」というアルゴリズムだが、私にはまだ使い分けの目安がわからない。

チーズにネコチンが触れると得点される

(写真:チーズにネコチンが触れると得点される)

参考文献:

コメント

タイトルとURLをコピーしました