初心者のためのゲームプログラミング入門

プログラミングとゲームの杜

初心者のためのプログラミング入門 & ゲームプログラムの作り方入門

Scratchで はじめようゲームプログラミング

15.「けるヨケル」を作ろう②

 

[ 「けるヨケル」を作ろう① ] の続きです。

プログラミングの腕を上げるには、やはりプログラミングをしていくのが一番です。
「でも何を作ればいいのか分からない」なんて人は多いと思います。
私がやっていた学習法は、自分でも作れそうなゲームを見つけてはそれを再現していました。
作るべきものが分かっているので、あとはどう実現(構築)するのか考えるだけです。とても良い訓練になります。
まずは簡単にできそうな目標を見つけましょう。

 

 

蹴る処理を作ろう

クローンした玉をプレイヤーが蹴れるようにします。
これは、玉とプレイヤーの当たり判定を行って、接触をきっかけに玉を動かします。

制御から○まで待つを持ってきます。

○まで待つを使う

 

調べるからマウスのポインターに触れたを持ってきます。
これをプレイヤーに触れたに変更します。
なお、ネコのスプライトの名前を「プレイヤー」に変更していないと指定できません。

プレイヤーに触れたを使う

この処理でプレイヤーが触れる(当たる)まで処理が止まります。

 

ここから蹴られた玉の動きを作ります。
動きからマウスのポインターへ向けるを持ってきます。
これをプレイヤーへ向けるに変更します。

プレイヤーに向けるを使う

 

動きから15度回すを持ってきます。
プレイヤーとは逆の向きへ移動させたいので 180 度回すに変更します。

玉の向きを180度回す

 

玉の移動処理を作ります。さらに蹴った玉とプレイヤーの当たり判定も入れちゃいます。 つまり、蹴られて移動している玉にプレイヤーが当たるとゲームオーバーになる仕組みまで作ります。

制御から○まで繰り返すを持ってきます。
この中にプレイヤーに触れたを入れます。コピーすると簡単です。

プレイヤーに触れるまで繰り返す

 

動きから10歩動かすを持ってきます。

10歩動かすを使う

 

画面の端にきたら止まってしまうので跳ね返します。
動きからもし端に着いたら、跳ね返るを持ってきます。

端に着いたら跳ね返るを使う

 

テストしましょう。
玉を蹴ってください。あれ、動きません。

玉を蹴っても動かない

 

「これは動かなくて当たり前だね」
と思っている人は、かなりプログラミングが分かっていますね。

これはバグです。
蹴られたかどうかの当たり判定と、移動後の当たり判定どちらも同じタイミングで条件を満たしています。
つまりプレイヤーに触れた まで繰り返すループに入ることなく処理が終わっています

解決方法として「玉を蹴ってから少しの間、プレイヤーとの当たり判定を無くす」ことにします。

制御から10回繰り返すを持ってきます。

10回繰り返すを使う

 

移動処理の前に10回繰り返すを入れて、その中に
10歩動かすもし端に着いたら、跳ね返るをコピーしてきます。
これで10回だけの当たり判定なしの移動処理ができました。

当たり判定なしの移動処理を入れる

 

テストしましょう。
玉が蹴れることを確認します。

玉が蹴れることを確認する

 

 

玉の色を変えよう

蹴っても大丈夫なときとゲームオーバーになるときを分かり易くする必要があります。 蹴ってもいいときは黄色い玉、ダメなときはピンクの玉にします。

移動処理の当たり判定の前に色を変えます。
見た目からコスチュームを○にするを持ってきます。
コスチュームを ball-c に変更します。

コスチュームを変更する

 

コスチュームの中を見てください。
スプライト Ball の中には、いくつかのコスチュームが登録されています。
ball-c はピンク色で、はじめに表示されていたのは ball-a の黄色い玉です。

Ballのコスチュームを確認する

 

玉の色に意味を持たせたので、必ず黄色い玉から始まるように初期化します。
旗が押されたときの下にコスチュームを ball-a にするを入れます。
これで実行後は必ず黄色い玉になります。

初期化として黄色い玉にする

 

実行して黄色い玉を蹴り、ピンク玉に当たって止まるかテストしましょう。

色の変化と当たり判定をテストする

 

 

玉を自動で動かそう

玉を蹴らないと動き出さない仕様だけでは問題があります。
ずっと蹴らなければ玉は止まったままで危険はないからです。簡単にゲームクリア出来てしまいゲームとして破綻しています。

そんな訳で「一定時間蹴らないと自動で動き出す」という仕様を追加します。

まずは「玉を動かせ」という変数を作ります。

玉を動かせという変数を作る

 

表示する必要がないので「玉を動かせ」のチェックを外します
玉を動かせを 0 にする玉を動かせを 1 にするを下図のところに入れます。

玉を動かせの内容を変える

 

3 秒待つをクローンの作成後に入れます。
これで「玉を動かせ」は、クローンを作って 3 秒後に 1 になります。

3秒待つを入れる

 

「玉を動かせ」が 1 になったとき玉を動かす仕組みを作ります。
演算から○または○を持ってきます。

演算のorブロックを使う

 

○または○の片方に○=○を入れます。

orの片方に比較演算子=を入れる

 

変数「玉を動かせ」と 1 を比較します。

変数「玉を動かせ」と1を比較する

 

○または○の中にプレイヤーに触れたを移動します。

またはの中にプレイヤーに触れたを入れる

 

プレイヤーに触れた または 玉を動かせ=1を戻します。

プレイヤーに触れた または 玉を動かせ=1を戻す

 

蹴られていない玉が 3 秒後に動き出すか確認しましょう。

3秒後に自動で動き出すか確認する

ちなみに、玉を動かす仕組みは「蹴った」ときの処理を使っているので、プレイヤーとは逆の方向へ移動します。
自動で動き出す玉をランダムな方向に移動させると、ゲーム攻略が運まかせになってしまいます。やめた方がいいでしょう。

 

 

玉の出現間隔が短すぎる?

テストプレイをしてみると、玉の出現が早すぎると感じました。
玉を動かせ を1にするの下に2 秒待つを入れて合わせて 5 秒間隔にします。

2 秒待つを追加する

間隔を長くすれば、それだけゲーム難易度が上がります。
ただ単調なゲームなので長めの設定はプレイヤーにストレスを与えすぎるかもしれません。

 

 

ゲームクリアの仕組みを作ろう

すべての玉が出現して当たらなければゲームクリアにする仕組みを作ります。
この処理は他のスプライトにも影響するため「メッセージ」を使います。

イベントからメッセージ1を送るを持ってきて玉のクローン作成処理の下に付けます。

メッセージ1を送るを使う

 

ゲームクリア」というメッセージを作ってください。

ゲームクリアというメッセージを作る

 

まずメッセージ1を送るゲームクリアを送るに変更します。
さらにゲームクリアを受け取ったときを配置します。

ゲームクリアを受け取ったときを使う

 

制御からすべてを止めるを持ってきます。
スプライトの他のスクリプトを止めるに変更します。

スプライトの他のスクリプトを止めるを使う

このようにメッセージを使うことでクローンの玉も止めることができます

 

次回に続きます。