Scratchで超簡単なんちゃって「シューティングゲーム」を作る

Scratch
Scratchで超簡単なんちゃって「シューティングゲーム」を作る

Scratchの基礎的な要素を学んできて、今回は簡単な「シューティングゲーム」を作った。なんちゃてシューティングゲームだ。

作ったと言っても参考書の説明通りにやっただけなので、自分で考えて作った訳ではない。

それでも勉強になったことは多かった。とても簡単なゲームなのに、色々な工夫がされていて、「ああ、こういうことをしたい場合は、こういう風に命令を使うのか!」と感じた。

機能の説明だけでは理解できていなかったのが、実際のゲームを作ってみて良く分かった。

ゲームは至ってシンプルだ

制限時間内で、猿が持っているバナナを飛んでいるコウモリに投げて、当てた得点を競うゲーム、これだけだ。

猿はキーボードの矢印キーで左右に移動できる。そして持っているバナナはスペースキーを押すと真上に飛んでいく。

コウモリは猿の上をスピードを変えながら左右に飛んでいる。

猿が投げ上げたバナナがコウモリに触れると、コウモリは落下して消え、新しいコウモリがまた現れる。

最初の設定では、制限時間30秒、コウモリにバナナを当てると1回10ポイントで、制限時間に達すると背景に「GAME OVER」の文字が現れて終了となる。

完成して遊んでみると、単純なゲームなので何度もやろうとは思わないが、万年初心者(^^;)の私にとっては、今後の参考になるテクニックを知ることができた。

猿のコードのテクニック

猿のコードのテクニック

猿の回転を左右だけに限定する

Scratchの登場人物(スプライト)は、動き回ると何も指定しない場合、360度向きを回転させてしまう。それを防ぐために、回転を左右に限定する必要があることが分かった。

移動させる時には方向とコスチュームを指定する

スプライトを移動させるのは簡単なのだが、移動するには方向の情報が必要で、移動の前に指定しないと予期せぬ方向に動いてしまう。移動と方向の指定はセットで考慮しないといけないことが分かった。

ついでに言うと、方向と移動に合わせて、スプライトの姿(コスチューム)も変えると、動作の変化が分かりやすくなる。

スプライトを移動させる場合、方向と共にコスチュームも指定するようにした方が良いことが分かった。

バナナのコードのテクニック

バナナのコードのテクニック

猿のコードのテクニックと共通する部分以外で分かったことがある。

「ある状態を維持する」テクニック

バナナと猿は独立したスプライトなので、「猿がバナナを持っている」状態はどう作ればいいのか、私にとっては難しいコードに思えた。

ゲームでは、スペースキーを押した時、猿が持っているバナナを真上に投げる仕様だ。スペースキーを押すまでは、バナナは猿が持ち続けなければならない。

テクニックとしては、「スペースキーが押されるまで、バナナは猿のところへ行く」というコードで、猿がバナナを持ち続けることが実現できる。

このコードは一種の繰り返しの制御で、英語的に表現すれば、

repeat until  (key [space] pressed?) {
    go to [Monkey]
}

というような感じで、バナナはスペースキーが押されるまで、猿のところに行き続ける(行くことを繰り返す)という意味になる。これで、バナナは猿が持っている状態になることが分かった。

2通りのアトランダムな切り替え方法

乱数を使った方法はいくつか学んだが、2通りのランダムな切り替えにも使えるのだと理解を新たにした。

猿が放り上げたバナナが再び猿の手元に現れる際、左右のどちらの画面外から現れるかをアトランダムにする。

私の先入観で、ランダムコマンドは、サイコロなどのように、ある程度広い範囲のアトランダムな数字の発生に使うイメージあった。左右というような2通りの分岐にも使えるのだ。

コウモリのコードのテクニック

コウモリのコードのテクニック

ここでも「飛び続ける」=状態の維持にrepeat until

コウモリがバナナに当たるまでは、猿の上を左右方向に飛び続ける。

バナナのコードにも使ってあったが、「ある状態を維持する」のを実現するのに、repeat until(〜まで繰り返す)コマンドを使うのが有効なのだと理解した。

初めてrepeat untilの使う目的が分かったような気がする。求める状態を維持したい時に使うのだと。

背景(ステージ)のコード

背景(ステージ)のコード

ここでもrepeat untilを使って制限時間のカウントダウンしている。こうして見てくると、このゲームはrepeat umtilを多用している。

もしかしたら、ゲームではrpeat untilが使いやすいのかもしれない。そう思って改めて制御ブロックのコマンドを見てみると、いわゆる「前判定での繰り返し」(○○の間は✕✕を繰り返す)

while (○○) {
    do ✕✕
}

のようなコマンドが見当たらない。Scratchがゲーム制作向きだからなのだろうか?

ゲームの感想

猿に設定した左右に移動させる機能は、このゲームにはあまり必要がなかった。

コウモリの方が左右に飛んでいるので、猿は動かずに、タイミングを図ってバナナを放り上げれるだけで良かったからだ。

出来上がって見れば本当にささやかなゲームだけれど、内部では思った以上の工夫がされている。

ゲームとか全くやらない私には、まだまだ必要なテクニックがあることが分かった。ポテチン。

参考文献:

コメント

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