HOME技術レッツ!スクラッチレッツ!スクラッチ (8) インベーダーゲームをつくろう ― 敵を表示して動かす

レッツ!スクラッチ (8) インベーダーゲームをつくろう ― 敵を表示して動かす

インベーダーゲーム、ついに敵の登場です。
まずは、敵の画像を選ぶところからです。

右下のスプライトペインから、「スプライトを選ぶ」アイコンにマウスカーソルを持っていき、虫めがねアイコンをクリックします。

敵っぽいイラスト、ということで今回は「ghost」(お化け)を選んでみました。

ステージペインにお化けの画像が表示されましたが、例によってサイズが大きいですね。

こういう時は…そう、初期設定でサイズを変更しましょう。

「旗マークが押されたとき」ブロックに「大きさを50%にする」ブロックをくっつけましょう。

旗マークのアイコンをクリックすると、お化けが小さいサイズになりましたね。

ただ、お化けの位置が下すぎますね。これではすぐにやられてしまいそうです。
初期設定で、お化けの位置を上の方にします。
マウスでお化けを動かすと、だいたいy座標が130くらいがよさそうです。

「大きさを50%にする」ブロックの下に、「x座標を0、y座標を0」ブロックをくっつけます。(0の部分はステージペインのお化けの座標になっています)

「x座標を0、y座標を130」のように入力します。

また、スプライト自体は隠して起き、敵はクローンで表示するので、最初から敵は現れていることにするので、「x座標を0、y座標を130」ブロックの下に、「隠す」ブロックをくっつけます。

さらにその下に、「自分自身のクローンを作る」ブロックをくっつけます。

敵を自動的に動かす

敵は自動的に動くようにします。
最初は右に動き、右のはしまで行ったら、今度は左に向かって動かします。

どちらに向かって動いているかの判定をするため、変数をつくります。
今回の変数の名前は「敵が右に動く」にしました。
変数は、「すべてのスプライト用」を選びます。
この変数が1のとき、敵が右に動くようにします。

まずは表示するので、「クローンされたとき」ブロックを置いて、その下に「表示する」ブロックをくっつけます。

「ずっと」ブロックをくっつけます。

「もし なら でなければ」ブロックを「ずっと」ブロックの中に入れます。

「もし なら でなければ」ブロックの最初の穴に「 かつ 」ブロックを入れます。

「 かつ 」ブロックの左側に「 <50 」ブロックを入れ、「 <50 」ブロックの左側の穴に「x座標」ブロックを入れます。右側の「50」は「200」に変えます。

「 かつ 」ブロックの右側に「 =50 」ブロックを入れ、左側の穴に「敵が右に動く」ブロックを入れます。「50」の数字は、「1」にします。

「x座標を10ずつ変える」ブロックを、「もし なら でなければ」ブロックの上の段に入れます。

「もし なら でなければ」ブロックの下の段には、「敵が右に動くを0にする」ブロックを入れます。

初期設定で、敵は右に動くようにするので、「旗マークが押されたとき」ブロックの「自分自身のクローンを作る」ブロックの下に「敵が右に動くを1にする」ブロックをくっつけます。

ここまでで、旗アイコンをクリックしてみてください。
お化けが右に自動的に動き、右はしで止まったでしょうか。
ちょっとお化けのスピードが速いので、「x座標を10ずつ変える」ブロックの数字を「5」に変えておきましょう。

今度は右はしに行ったら左に向かって動くようにしましょう。

「もし なら でなければ」ブロックをもう一つもってきて、先ほどの「もし なら でなければ」ブロックの下にくっつけます。

「もし なら」の部分に、「 かつ 」ブロックを入れます。

「 かつ 」ブロックの左側に「 > 50 」ブロックを入れて、左側の穴に「x座標」ブロックを入れ、「50」を「-200」にします。

「 かつ 」ブロックの右側に「 =50 」ブロックを入れて、左側の穴に「敵が右に動く」ブロックを入れます。
「50」を「0」にします。

「もし なら でなければ」ブロックの最初の段に「x座標を10ずつ変える」ブロックを入れて、数字を「-5」にします。

「でなければ」の部分に「敵が右に動くを1にする」ブロックを入れます。

ここまでで、旗アイコンをクリックして、敵が自動的に左右に動けば成功です!

ところで、ステージペインに「敵が右に動く」という表示がありますよね?
これは、「敵が右に動く」変数の中身が、今いくつになっているかを表示しています。
表示しておくことにより、変数の中身が考えた通りになっているかを確認できるようになります。
表示させたくない場合には、ブロックペインの「敵が右に動く」の左側に入っているチェックマークをクリックして消します。

画面のはしまで行ったら一段下がる

さて、このままでは敵はいったりきたりするばかりで、何も怖くありません。
最初の設計では、敵がプレイヤーのいるところまで下りてきたら負け、というルールでした。

そこで、敵が画面のはしまで行ったら一段下に降りるようにしましょう。

最初の「もしx座標<200かつ敵が右に動く=1なら」の下にの「x座標を5ずつ変える」ブロックの下に、「もし なら」ブロックを入れます。

「もし なら」の間の穴に「 または 」ブロックを入れます。

「 または 」の左の穴に「 >50 」ブロックを入れて、左の穴に「x座標」ブロックを入れ、「50」を「200」にします。

「 または 」の右の穴に「 =50 」ブロックを入れて、左の穴に「x座標」ブロックを入れ、「50」を「200」にします。

「もしx座標>200またはx座標=200なら」の下に「y座標を-20ずつ変える」ブロックを入れます。

これで敵が画面の右はしに行くと、下に下がります。

今度は画面の左はしに行ったら、下に下がるようにします。

同じように、「もしx座標>-200かつ敵が右に動く=0なら」の下の「x座標を-5ずつ変える」ブロックの下に「もし なら」ブロックを入れます。

「もし なら」の穴に「 または 」ブロックを入れます。

「 または 」ブロックの左側に「 <50 」ブロックを入れ、「x座標<-200」にします。

「 または 」ブロックの右側に「 =50 」ブロックを入れ、「x座標=-200」にします。

「もしx座標<-200またはx座標=-200なら」の下に「y座標を-20ずつ変える」ブロックを入れます。

これで、敵が画面の左はしについたら、下に下がるようになります。

敵が右はしについたときに一段下げる処理の、「もしx座標>200またはx座標=200なら」という部分ですが、敵のx座標が200を越えるか、200ちょうどのときに、一段下げる、という意味になります。

左はしについたときの判定「もしx座標<-200またはx座標=-200なら」は、敵のx座標が-200より下になるか、-200ちょうどのときに一段下げる、という意味です。

さて、このままだと延々と敵が下がってきて、ついにはプレイヤーのところまで来てしまいます。

このままではおかしいので、敵がプレイヤーのところまで下がってきたらゲームオーバーになるようにしましょう。

でも、ちょっとプログラムが複雑になってきたので、今回はここまでにしておきましょう。
今回やったブロックはだいぶ複雑になっているので、よく見て考えてみてください。

次回は、ゲームオーバーの処理をつくっていきます。

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

関連記事

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

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

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

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

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

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

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

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

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

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

レッツ!スクラッチ (14) インベーダーゲームをつくろう ― インベーダーに攻撃させよう!

これまでインベーダーは移動してくるだけでした。 今回はインベーダーも移動しながらたまをうってくるようにしてみましょう。 これでぐっと難易度が上がりますね。 いつものとおり、まずは敵がうってくるたまのス…続きを読む

レッツ!スクラッチ (5) インベーダーゲームをつくろう ― 画面にプレイヤーを表示しよう

さあ、ゲームの設計もかんたんですが、おわりました。 いよいよプログラミングをしていきましょう! 最初は、画面を用意して、プレイヤーを表示するところまでをやっていきます。 画面の背景を指定しよう! まず…続きを読む

レッツ!スクラッチ (11) インベーダーゲームをつくろう ― 点数をつけよう!

さあ、これまででロケットからたまを発射して、敵を倒す、という仕組みができました。敵が自分の陣地まで入ってきたらゲームオーバー、という処理も入れています。 さらにゲームらしくするためには、スコアをつけま…続きを読む

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

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

レッツ!スクラッチ (1) プログラミングの心得

「レッツ!スクラッチ」では、ビジュアルプログラミング言語「スクラッチ(Scratch)」を使って、わたしが実際につくったプログラムを紹介してくコーナーです。 プログラミングに興味を持つきっかけとして、…続きを読む