HOME技術レッツ!スクラッチレッツ!スクラッチ (12) インベーダーゲームをつくろう ― ゲームの難易度をあげよう!

レッツ!スクラッチ (12) インベーダーゲームをつくろう ― ゲームの難易度をあげよう!

点数もつくようになったので、これでほぼゲームとして完成しました。
しかし、このままでは物足りないですよね?
まずはゲームが単調すぎて、かんたんです。
慣れてしまえばあっという間につまらなくなってしまうでしょう。
ゲームを面白くするには、変化がなければいけません。
たとえば、難易度をあげるというのも面白くする一つの手段です。

今回は、ゲームの難易度をあげましょう。

難易度をあげると一言で言っても、様々な方法があります。
その中でも2つやってみます。

1つ目は、敵の出現位置をランダムにすること、
2つ目は、点数があがると敵のスピードがあがるようにすること、
です。

敵の出現位置をランダムにする

敵を倒すと、必ず敵は一番上の真ん中から現れます。
これだと予め敵が現れる位置がわかっているので、慣れてくると簡単に倒せる場所がわかるようになってしまいます。
なんなら、自分は全く動かずにただたまを発射しているだけで敵を倒すことができてしまいます。

そこで、敵を倒した後、敵がランダムに現れるようにします。
でも、いきなり下の方に現れてしまうと難しすぎるので、Y座標は一番上にしておいて、X座標だけどこに現れるかわからないようにしてみます。

「Ghost」スプライトの、「クローンされたとき」ブロックの下に「表示する」ブロックがあります。

この上に、「x座標を0にする」ブロックを入れます。
そして、数字のところに「1から10までの乱数」ブロックを入れます。

「-200から200までの乱数」に変えます。

「-200から200までの乱数」とは、「-200から200までの間の、どれかの数字が適当に選ばれる」という意味です。
だから、x座標が毎回どの位置になるのかわからなくなります。

これで敵を倒したときに、次にどこから敵が現れるかわからなくなりました。

点数があがると敵のスピードも上がるようにする

点数が5の倍数になると、敵のスピードが上がるようにしてみましょう。

まず、変数をつくります。
ここでは、ゲームのレベル、という意味で、「レベル」という名前の変数にします。
「レベル」変数は「すべてのスプライト用」にします。

次に、初期設定でレベルを1にします。
どこのスプライトでもよいですが、ここではプレイヤー(ロケット)のスプライトの初期設定にするので、「スプライト1」をクリックします。

「旗マークが押されたとき」ブロックの中に、「レベルを1にする」ブロックをくっつけます。

次に、敵のスピードを設定します。
「Ghost」スプライトをクリックします。

今、x座標は、敵が右に進むときは「5」ずつ変えて、左に進むときは「-5」ずつ変えています。

これを、「 * 」ブロックに変えます。
「 * 」ブロックはかけ算をするブロックです。

右に進ませるブロックでは、
「 * 」の左側に「レベル」ブロックを入れます。
「 * 」の右側に「5」を入力します。

同じように、左に進ませるブロックでは、
「 * 」の左側に「レベル」ブロックを入れます。
「 * 」の右側に「-5」を入力します。

これで、敵が右に進むときは「レベル×5」ずつ、左に進むときは「レベル×-5」ずつx座標が変わります。

レベルを上げる処理

今度は点数が5の倍数になったらレベルを上げる処理です。
「Ball」スプライトをクリックしてください。

「クローンされたとき」ブロック内に、「点数を1ずつ変える」ブロックがあります。
この下に「(メッセージ)を送る」ブロックを入れ、「レベル判定」という新しいメッセージをつくります。

「レベル判定を受け取ったとき」ブロックを、空白の場所に置きます。

その下に、「もし なら」ブロックを置きます。

「もし なら」の穴には、「 = 」ブロックを置き、左側に「点数」ブロックを入れます。

右側には「 * 」ブロックを置き、「レベル*5」のようにします。

「レベルを1ずつ変える」ブロックを「もし点数=レベル*5なら」ブロックの中に入れます。

これで、点数が5の倍数になるたびに、レベルが1つ上がり、敵の速度が上がるようになりました。

「クローンされたとき」ブロックの、「レベル判定を送る」の部分は、ちょくせつ「もし点数=レベル*5なら」ブロックを入れてしまっても同じですが、あえて「レベル判定を送る」ブロックにしています。

なぜならば、ここに処理を次々に入れていくと、後からプログラムで何をやっているのかわかりづらくなるからです。

見た目にわかりやすくするため、点数が1つ入るたびに、「レベル判定」メッセージを送り、レベル判定メッセージを受け取った先で、点数が5の倍数になっていないかを調べています。

こんな風に、プログラムの書き方は1つに決まっていません。
後から見てわかりやすくするとか、効率的にするとか、みなさんも自分で工夫してみてください。

さて、ここまでで最初に考えた設計はすべて作り終わりました。
ですので、ここでいったんゲームは完成です!

…ですが、ここで終わってしまってはちょっと面白くありませんね?
もっとゲームっぽくしてみたくないでしょうか。
ということで、次回からは、これまでの知識をつかって、よりゲームっぽさを出していく、応用編になります。
まずは、敵をたおしたり、自分が倒されたりしたときに爆発するようにしてみましょう!
それではまた次回。

「レッツ!スクラッチ」コンテンツリスト

関連記事

レッツ!スクラッチ (18) インベーダーゲームをつくろう ― ネット上にアップロードしよう

「インベーダーゲームをつくろう」の最終回です。 今回でこのゲームのプログラミングはおしまいです。 最終回は、このインベーダーゲームをインターネット上にアップロードしてみます。 スクラッチは自分で作った…続きを読む

レッツ!スクラッチ (7) インベーダーゲームをつくろう ― たまを発射する

次は、いよいよ攻撃です。 スペースキーを押したら、ロケットから、たまが発射されるようにします。 たまを発射するには、たまの画像が必要になります。 スプライトペインの右下のアイコンにマウスカーソルを合わ…続きを読む

レッツ!スクラッチ (13) インベーダーゲームをつくろう ― 爆発させよう!

このインベーダーゲームでは、たまをうって敵に当たったときに点数が入ったり、敵が自分の陣地まで来たときにゲームオーバーになったりする処理を入れてきましたが、いずれももう一味ほしいと思いませんか? そう、…続きを読む

レッツ!スクラッチ (16) インベーダーゲームをつくろう ― 音を出そう!

これまでゲームが面白くなるように色々と工夫をしてきましたが、一つまだ手を付けていないことがあります。 それが「音を出す」ことです。 今回は、ゲームスタートのとき、たまをうった時、敵にたまがあたったとき…続きを読む

レッツ!スクラッチ (10) インベーダーゲームをつくろう ― 敵を倒せるようにしよう!

今回でほぼ、ゲームとして遊べるプログラムが完成します。 今回は、ロケットがうった、たまが敵に当たったら敵を消す、という処理をつくります。 たまが敵に当たった時の処理 たまが敵に当たったかどうかの判定は…続きを読む

レッツ!スクラッチ (17) インベーダーゲームをつくろう ― ゲームスタートボタンをつくろう

今回はスタートボタンをつくります。 ゲームを始めるときに、画面に表示されている「START」などの文字、もしくはボタンのことです。 「旗マーク」をゲームのスタートボタンとしてもよいのですが、ゲームっぽ…続きを読む

レッツ!スクラッチ (9) インベーダーゲームをつくろう ― ゲームオーバーの処理をつくろう!

前回は敵が左右に動き、プレイヤーに迫ってくるところまでをつくりました。 このままだと敵が画面の一番下にたどり着いて左右に行ったり来たりすることになります。 今回は、敵がプレイヤーの位置まで下がってきた…続きを読む

レッツ!スクラッチ (15) インベーダーゲームをつくろう ― アイテムをとってパワーアップさせよう!

さて、ゲームにとって欠かせないのは、パワーアップです。 アイテムをとってプレイヤーがパワーアップすることで、より敵を倒しやすくする、というものです。 今回は、一定数の敵を倒すと、アイテムが降ってきて、…続きを読む

レッツ!スクラッチ (3) 基本画面の説明

「レッツ!スクラッチ」の3回目は、基本画面の説明です。 基本画面 A — メニュー B — タブ C — ブロックパレット D — スクリプトエリア E…続きを読む

レッツ!スクラッチ (6) インベーダーゲームをつくろう ― プレイヤーを左右に動かそう

いよいよ、プレイヤーを動かせるようにしていきます。 キーボードの右矢印キーを押したら右へ、左矢印キーを押したら左に動くようにしましょう。 「x座標を0、y座標を-150にする」ブロックの下に、「ずっと…続きを読む