レッツ!スクラッチ (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ちょうどのときに一段下げる、という意味です。
さて、このままだと延々と敵が下がってきて、ついにはプレイヤーのところまで来てしまいます。
このままではおかしいので、敵がプレイヤーのところまで下がってきたらゲームオーバーになるようにしましょう。
でも、ちょっとプログラムが複雑になってきたので、今回はここまでにしておきましょう。
今回やったブロックはだいぶ複雑になっているので、よく見て考えてみてください。
次回は、ゲームオーバーの処理をつくっていきます。
→「レッツ!スクラッチ」コンテンツリスト
関連記事