Scratchで はじめようゲームプログラミング
15.「けるヨケル」を作ろう②
[ 「けるヨケル」を作ろう① ] の続きです。
プログラミングの腕を上げるには、やはりプログラミングをしていくのが一番です。
「でも何を作ればいいのか分からない」なんて人は多いと思います。
私がやっていた学習法は、自分でも作れそうなゲームを見つけてはそれを再現していました。
作るべきものが分かっているので、あとはどう実現(構築)するのか考えるだけです。とても良い訓練になります。
まずは簡単にできそうな目標を見つけましょう。
蹴る処理を作ろう
クローンした玉をプレイヤーが蹴れるようにします。
これは、玉とプレイヤーの当たり判定を行って、接触をきっかけに玉を動かします。
制御から○まで待つを持ってきます。
調べるからマウスのポインターに触れたを持ってきます。
これをプレイヤーに触れたに変更します。
なお、ネコのスプライトの名前を「プレイヤー」に変更していないと指定できません。
この処理でプレイヤーが触れる(当たる)まで処理が止まります。
ここから蹴られた玉の動きを作ります。
動きからマウスのポインターへ向けるを持ってきます。
これをプレイヤーへ向けるに変更します。
動きから15度回すを持ってきます。
プレイヤーとは逆の向きへ移動させたいので 180 度回すに変更します。
玉の移動処理を作ります。さらに蹴った玉とプレイヤーの当たり判定も入れちゃいます。 つまり、蹴られて移動している玉にプレイヤーが当たるとゲームオーバーになる仕組みまで作ります。
制御から○まで繰り返すを持ってきます。
この中にプレイヤーに触れたを入れます。コピーすると簡単です。
動きから10歩動かすを持ってきます。
画面の端にきたら止まってしまうので跳ね返します。
動きからもし端に着いたら、跳ね返るを持ってきます。
テストしましょう。
玉を蹴ってください。あれ、動きません。
「これは動かなくて当たり前だね」
と思っている人は、かなりプログラミングが分かっていますね。
これはバグです。
蹴られたかどうかの当たり判定と、移動後の当たり判定どちらも同じタイミングで条件を満たしています。
つまりプレイヤーに触れた まで繰り返すのループに入ることなく処理が終わっています。
解決方法として「玉を蹴ってから少しの間、プレイヤーとの当たり判定を無くす」ことにします。
制御から10回繰り返すを持ってきます。
移動処理の前に10回繰り返すを入れて、その中に
10歩動かすともし端に着いたら、跳ね返るをコピーしてきます。
これで10回だけの当たり判定なしの移動処理ができました。
テストしましょう。
玉が蹴れることを確認します。
玉の色を変えよう
蹴っても大丈夫なときとゲームオーバーになるときを分かり易くする必要があります。 蹴ってもいいときは黄色い玉、ダメなときはピンクの玉にします。
移動処理の当たり判定の前に色を変えます。
見た目からコスチュームを○にするを持ってきます。
コスチュームを ball-c に変更します。
コスチュームの中を見てください。
スプライト Ball の中には、いくつかのコスチュームが登録されています。
ball-c はピンク色で、はじめに表示されていたのは ball-a の黄色い玉です。
玉の色に意味を持たせたので、必ず黄色い玉から始まるように初期化します。
旗が押されたときの下にコスチュームを ball-a にするを入れます。
これで実行後は必ず黄色い玉になります。
実行して黄色い玉を蹴り、ピンク玉に当たって止まるかテストしましょう。
玉を自動で動かそう
玉を蹴らないと動き出さない仕様だけでは問題があります。
ずっと蹴らなければ玉は止まったままで危険はないからです。簡単にゲームクリア出来てしまいゲームとして破綻しています。
そんな訳で「一定時間蹴らないと自動で動き出す」という仕様を追加します。
まずは「玉を動かせ」という変数を作ります。
表示する必要がないので「玉を動かせ」のチェックを外します。
玉を動かせを 0 にすると玉を動かせを 1 にするを下図のところに入れます。
3 秒待つをクローンの作成後に入れます。
これで「玉を動かせ」は、クローンを作って 3 秒後に 1 になります。
「玉を動かせ」が 1 になったとき玉を動かす仕組みを作ります。
演算から○または○を持ってきます。
○または○の片方に○=○を入れます。
変数「玉を動かせ」と 1 を比較します。
○または○の中にプレイヤーに触れたを移動します。
プレイヤーに触れた または 玉を動かせ=1を戻します。
蹴られていない玉が 3 秒後に動き出すか確認しましょう。
ちなみに、玉を動かす仕組みは「蹴った」ときの処理を使っているので、プレイヤーとは逆の方向へ移動します。
自動で動き出す玉をランダムな方向に移動させると、ゲーム攻略が運まかせになってしまいます。やめた方がいいでしょう。
玉の出現間隔が短すぎる?
テストプレイをしてみると、玉の出現が早すぎると感じました。
玉を動かせ を1にするの下に2 秒待つを入れて合わせて 5 秒間隔にします。
間隔を長くすれば、それだけゲーム難易度が上がります。
ただ単調なゲームなので長めの設定はプレイヤーにストレスを与えすぎるかもしれません。
ゲームクリアの仕組みを作ろう
すべての玉が出現して当たらなければゲームクリアにする仕組みを作ります。
この処理は他のスプライトにも影響するため「メッセージ」を使います。
イベントからメッセージ1を送るを持ってきて玉のクローン作成処理の下に付けます。
「ゲームクリア」というメッセージを作ってください。
まずメッセージ1を送るをゲームクリアを送るに変更します。
さらにゲームクリアを受け取ったときを配置します。
制御からすべてを止めるを持ってきます。
スプライトの他のスクリプトを止めるに変更します。
このようにメッセージを使うことでクローンの玉も止めることができます。
次回に続きます。