みなさん、こんにちは!プロクラスの山足です。
プログラミングツール【scratch】で簡単にできる「地球を救え!」ゲームの作り方を紹介していきます。
【制御ブロックの基本】【メッセージ機能】【クローンの使い方】等scratch機能の基本動作解説もたくさん含んでいますのでやり方が知りたい人はぜひチェックしてください!
目次
scratchを開く
①「scratch公式サイト」(https://scratch.mit.edu/)にアクセス
②画面左上の「作る」を押す。
こちらの画面が出てきたら準備完了です!チュートリアルは「×(閉じる)」を押しましょう。
背景、スプライトを追加
まずは、今回恒例の「ねこ」さんは使いませんので、画面右下のスプライト1「×」を押して「ねこ」さんを消します。
次に、今回の主役、「地球(Earth)」をスプライトに追加しましょう。
画面右下より「スプライトを選ぶ」を選びます。
リストの中から「地球(Earth)」を選択。
次に宇宙の背景を設定します。
画面右下より「背景を選ぶ」を選びます。
リストから宇宙っぽい背景を選びましょう!※今回は「星雲(Nebula)」を選択します。
次に、地球を狙ういわゆる「敵」を追加します。
同様に、画面右下より「スプライトを選ぶ」を選択し、地球に降ってくるものを選択しましょう。
※今回は「弾(Ball)」を選択します。
これでゲームに必要な要素は整いました!
初期位置を設定する
スプライトを用意したての時は、バラバラにスプライトが並んでいる状態です。
ゲームをはじめるときには、必ず特定の場所に各スプライトが配置されている状態にしなければなりません。
今回は、地球に降ってくるものをよけ続けて「地球を救う!」というコンセプトにしたいと思いますので
地球をゲーム画面の下、降ってくるものをゲーム画面の上から動かしていくようにしたいと思います。
具体的には、地球の位置は「x=0, y=-120」、弾は「x=0,y=155」とします。
※画面の端に重ならないようにしましょう。
そして、ここが重要なポイントですが、
ゲームを開始した時(旗ボタンが押されたとき)は必ずはじめ初期位置にスプライトが来るようにしましょう。
ゲームを始めるときに配置したい場所にスプライトを移動させると、
自動的に「動き」の「x座標を○、y座標を○にする」ブロックがその座表に更新されます。
開始時に配置したい場所にスプライトを置いた状態で、旗ボタンの後に初期位置にスプライトを移動するようにプログラムしましょう。
同様に、ボールの初期設定もしていきます。
これで、初めの準備は完了です!
地球を矢印キーで左右に動かせるようにする
まずは、プレイヤーが地球を左右に動かすことができ、弾をよけられるようプログラムを組みます。
「調べる」→「○キーが押された」を使う
ゲーム開始後に、プレイヤーが「→」キーか「←」キーを押している場合は、
地球をその方向に従って動けるようにします。
プレイヤーが「→」キーか「←」キーを押しているかを調べるには、
「調べる」から「○キーが押された」ブロックを使って判断させます。
「○キーが押された」ブロックの「スペース」を「右向き矢印(→)」に変更します。
「右向き矢印(→)」が押されたときに、地球が右に動くようにすれば良いですよね。
「地球が右に動く」とはどういったときでしょうか。
ゲーム画面の座標の基本
ゲームの画面は、左右方向⇔は「x座標」、上下方向⇕は「y座標」の数値で場所が決まっていますが
左右方向は「右に行けば右に行くほど」→「xが増える(+)」仕組みで、
上下方向は「上に行けば上に行くほど」→「yが増える(+)」仕組みになっています。
つまり、右に動かしたいときは「地球のx座標」を「増やす(+)」と右に動き、
反対に、左に動かしたいときは「地球のx座標」を「減らす(-)」と左に動きます。
左右に動かしたいときは「x座標を○ずつ変える」ブロック
よって、「→」キーが押されたときは「地球のx座標を増やす」ようにプログラムしていきます。
具体的には「地球の座標を増やす」は「x座標を(+[省略])○ずつ変える」を使います。
※今回はそのまま○=10とします。
これをどのようにプログラムによって制御すれば良いかというと、
そのまま「制御」欄のブロックを使用していきます。
「制御」ブロックで意図通りのプログラムを
Scratch的に言葉を言いかえると、
「もし」「→キーが押された」「ならば」⇒「x座標を(+)10ずつ変える」
という事ができます。これをそのままプログラムで表現します。
実際に組み合わせて、「旗ボタン」を押して正しく動くか試してみましょう!
あれ、動きませんね。なぜでしょうか。
これは、Scratchのブロックをそのまま読んでいったら理由がわかります。
「ずっと」ブロックを使う理由
「🏴が押されたとき」「もし」「→」キーが押された「なら」…
つまり、🏴が押されたとき(その瞬間)に「→」が押されたなら、地球を右に動かす。
というプログラムになっているのです。これでは意図と違います。何かが正しく「制御」出来ていないのです。
見た目でもわかりますが、「🏴を押した」ときに「もし」のブロックは一瞬だけ黄色く光り、
すぐに消えてしまっています。(プログラムが実行されていない証)
プレイヤーは恐らく、ゲーム中は「ずっと」→を押したら地球は右に動いててほしいはずです。
その通りです。これをそのまま再現すればいいのです。つまり、Scratch的に言いかえると、
「🏴が押されたとき」その後「ずっと(くり返しくり返し)」「もし」「→」キーがおされた「なら」⇒「x座標を(+)10ずつ変える」
とすれば良いという事になります。
それでは、これで「🏴を押して」みましょう!
すると、ブロックの周りが常に黄色くオーラが光るようになり(プログラムが実行中の証)
「→」キーを押せば地球が右に動くようになりました。
「ずっと」ブロックというのは、省略されていますが正しくは
「ずっと、くり返しくり返し、何度も何度も永遠に」といった意味が込められているのです。
なので、プログラム起動中は何度も何度も「→」キーが押されているかを「調べ」にいっているという事になります。
左の動きは「複製」で
あとは、左も同様です。
同様の組み合わせのブロックを組み立てるときは「複製」が便利です。
複製したいブロックをマウスの右クリックを押して「複製」を選びます。
複製したブロックの「右向き矢印」と「10」を左になるように変えましょう。
試しに「🏴を押して」みましょう!すると、意図通りに地球が動くようになっているはずです。
ランダムに弾が降ってくるをプログラム
次は、「弾(Ball)」がランダムに降ってくるようにします。
ランダムを「乱数」で作る
ランダムには「乱数」というコンピューターの数を使います。
「乱数」とは、そのまま「乱れた」数で、規則正しくない、「ランダムに出る」数という内容になります。
具体的には、「1~10までの乱数」というと、1~10の中の数が、プログラム実行のたびにちがう数が出てくることになります。
「乱数」は「演算」→「○から○までの乱数」ブロックで表現できます。
弾の出現位置を「乱数」でランダムにする
ゲーム画面の左右は、左端から右端まで、x座標が-240~240の範囲で構成されています。
その範囲であれば、ゲーム画面内に弾を出現させることが出来るのです。
つまり、乱数をゲーム画面内のx座標の数に設定して、プログラム実行のたびに範囲内の数が何かランダムに出れば
その数のx座標に従って、弾がランダムに出てくる仕組みになります。
※今回は-240~240より内側の-200~200に設定します。
出現後にどこまで弾を降らせるか
弾はどこまで降らせれば良いか、
これは、①地球がよけて画面の端に当たるか、または、②地球に当たるか、のどちらかまで降ることになります。
地球を救う!というコンセプト上、
①ならばプレイヤーはよけることを成功した、②ならばプレイヤーはよけることを失敗した、
といったゲームになるためです。
どこまで降らせるを「制御」する
弾が①「端(はし)」、または、②「地球(Earth)」に当たる=触れるまで降らせれば良いのです。
弾が①「端」、または、②「地球」に当たった=触れたことを「調べる」には、
「調べる」→「○に触(ふ)れた」ブロックによって「調べる」ことができます。
この①「端」、または、②「地球」どちらか一方が当たっているかを調べさせる場合は、
「演算」から「または」のブロックを使っていきます。
※「かつ」は①②が同時に当たっている場合のみ、「または」は①②のどちらか一方が当たっている場合といった違いがあります。
①②に当たるまでは弾を降らせるという事になります。
弾を降らせる=弾の「y座標を-○(減らす)ずつ変える」で表現することができます。
さて、この組み合わせをどのように「制御」しましょうか。
※やみくもに「ずっと」を使うのは禁じ手です!正しい制御ができるブロックを考えましょう。
いつまで降るのをくり返せばいいかと言えば=①②に触れる「まで繰り返せば」良いのではないでしょうか。
ここまでのを図にまとめましたので、一回流れを上の図を見ながらおさらいしましょう!
これを組み合わせれば、意図した動きを制御することが出来ます。
それでは、ここまでを本当に意図通りに動くか、プログラムを実際に動かしてみましょう。
いかがでしたでしょうか。プログラミングは試行錯誤を繰り返し、たびたびプログラムを動かすことも重要です!
地球を救えなかった時…
さて、②「地球(Earth)」に弾が当たったときは、=地球を救えなかったという事になります…。
その時には残念ながら「地球を救えなかった」プログラムを発動する必要があります!
弾が何に当たったかを「調べる」
弾は①「端」②「地球」どちらかにあたるまで降りますが、
降り終わった後にどちらに当たっているかを「調べる」必要がでてきました。
今回は、地球に弾が当たったら爆発する!という表現でゲームオーバーを再現しようと思います。
今回はしませんが皆様はよけた成功パターンもプログラムで表現できる方法もぜひチャレンジしてみてください!
地球「ばくはつ」の「メッセージ」を送る!?
弾が「地球に触れた」時に、地球が「ばくはつ」するように、
弾⇒地球にプログラムのやり取りをさせるようにしましょう。
そのスプライト間のやり取りをさせる機能が「メッセージ機能」です。
「イベント」→「○を送る」ブロックを使います。まずはブロックを用意して「新しいメッセージ」を押しましょう。
※メッセージ毎に別々のやり取りを実行させることが出来ます。
メッセージや変数等、名前を付けるときは、必ず「わかりやすい」名前を心掛けるようにしてください。
※のちのち自分の作ったプログラムの意図を読み返しやすくするためです。
「もし」弾が降ったあとに、「地球(Earth)」に触れている「ならば」、
弾→地球へ「ばくはつ」のメッセージを送るように「制御」します!
「地球」側ではそのメッセージを受け取るようにします。
これで、弾から地球への「メッセージ」のやり取りが出来るようになりました!
メッセージを受け取ったら「ばくはつ」します
メッセージを受け取った後に、「ばくはつ」を表すプログラムを組み立てましょう!
※今回はプログラム例をつくっておきました。自由に設計してください!
それでは、ここまで実際にプログラムを動かし、意図通りになっているか試してみましょう。
大きさ等を変えた時は初期設定も忘れずに
弾をクローン機能でくり返しランダム出現させる
最後に、降ってくる弾を1回きりではなく、何度も何度も降ってくるように「制御」します。
それをかなえられるのが「クローン」です。
「クローン」とは、「複製」や「コピー」といった意味があり、同じ内容のものを何個も作るという意味になります。
「クローン」機能を使う
「クローン」は「制御」にブロックがあります。
今まで作った弾の降るプログラムを、「クローン」された後に実施されるように変更します。
そうすれば、「クローン」されるたびに「①②に触れる」まで「降る」という動きにすることが出来ます。
試しに、「自分自身のクローンを作る」ブロックを連打してみましょう!
「クローン」が作られるたびに弾が降っていくのがわかりましたでしょうか。
あとは、プログラムで自動的に「クローン」を「繰り返し」作ればよいわけですから、
今回は試しに「ずっと」くり返し「1秒ごと」に「制御」して、クローンを作ってみます。
試しにプログラムを動かしてみましょう!
「クローン」が消えません…!
すると、自動的に「クローン」(複製)されるものの、降った弾が消えません…!
「クローン」は勝手に増えていってしまいますので、役割を終えた「クローン」から「消して(削除)」行かなければなりません。
※「クローン」が増えすぎるとコンピュータも重くなり、だんだん動きが遅く、しまいにはフリーズしてしまうので注意!
試しにプログラムを動かしてみましょう!
すると、役割を終えた「クローン」は削除されていくようになりました!
クローン前の弾をはじめ見えないように初期設定
最後に、初めから見えている弾を見えない用「見え方」ブロックでプログラムします。
以上でScratchの様々な機能を組み合わせて簡単にゲームを作成することが出来ました!
さいごに
いかがでしたでしょうか。
今回はscratchのさまざまな機能の基本も解説していきましたが、この組み合わせによってさまざまなゲームを作ることが可能です!
是非ともチャレンジしてみて、さまざまなゲーム作成のきっかけになっていただければありがたいです。
難しかった方も、はじめはマネしてプログラミングしてみて、どこがどういった機能であるか
考えながら作成していけば、いつの間にか機能を理解し、いろんなゲームのアイデアになってくることと存じます。
是非とも、今回のプログラムを基礎に、効果音やアニメーション、動きの変化などさまざまアレンジしてみて、
皆様のオリジナルScratchゲームを作成してみてください!
プロクラスにはスクラッチ講座やUnity講座があります!
よりレベルアップを図りたい皆様に、プロクラスにはプロのプログラマーが教える講座がさまざま用意されています!
興味がある方はぜひご確認ください!
大人が学べるスクラッチ講座もあります!
先生方や保護者の方が学べるスクラッチ講座やUnity講座もありますので、短期間でプログラミングを習得されたい方はぜひご活用ください!