今回解析するプロジェクト
「Extreme Pong」は、supertaylor04さん が作成したピンポンのようなゲームです。昔ながらのゲームですが、コンピュータ対戦や二人プレイ、スコア表示など、ゲームの基本となる要素が含まれています。このプロジェクトのプログラムの中身について説明します。
リンク:https://scratch.mit.edu/projects/10140853
Ball(ボール)スプライト
「旗印」が押されたとき、ゲームセレクト画面を表示するため、ボールを隠します。そして、変数「hits」を0にして、ボールの進行方向を0度にします。0度は画面上側の方向です。ちなみに、90度は右側、180度は下側、-90度は左側です。
もし、青色(プレイヤー1のパドルの色)に触れた場合、ボールの進行方向を-80度から80度までの範囲内の乱数に変えます。すなわち、ボールは上側方向に方向転換します。そして、変数hitsの値を1増加させます。
もし、赤色(プレイヤー2のパドルの色)に触れた場合、 ボールの進行方向を80度からー80度までの範囲内の乱数に変えます。すなわち、ボールは下側方向に方向転換します。そして、変数hitsの値を1増加させます。
このブロックでは、ボールの進行方向を変えるだけで、ボールは動きません。ボールの動きは別のブロックでプログラムしています。
「1」または「2」キーが押されたとき、ゲームがスタートします。このプロジェクトでは、「1」と「2」で別々のブロックになっていますが、内容は全く同じです。
初めに、ボールを表示して、x座標とy座標を0にします。ボールの進行方向は0度から360度の範囲内の乱数で決まります。
「ずっと」ループでは、もし画面の壁にあたったら、ボールは跳ね返ります。そして、「hits/5 + 2 」歩動かします。hitsはボールがパドルに当たるたびに1ずつ増えます。例えば、hitsが0~4のときはhits/5=0(割り算の余りは切り捨て)なので、2歩動きます。hitsが5~9のときは hits/5=1(割り算の余りは切り捨て)なので 、3歩ずつ動きます。
y座標が「150より大きい場合」は、ボールがプレイヤー2のパドルを通り越した場合です。そうなった場合、プレイヤー1のスコアを1増やします。ボールの進行方向を再度ランダムに設定して、x座標とy座標を0にして、変数hitsも0にしてボールの速度をもとに戻し、ゲームを再開します。
y座標が「ー150より小さい場合」は、ボールがプレイヤー1のパドルを通り越した場合です。そうなった場合、プレイヤー2のスコアを1増やします。ボールの進行方向を再度ランダムに設定して、x座標とy座標を0にして、変数hitsも0にしてボールの速度をもとに戻し、ゲームを再開します。
変数「paddle y position」は、常にボールのx座標とします。この変数は「すべてのスプライト用」で、パドル2のコンピュータ動作に使用します。説明は後で述べます。
Paddle(パドル)スプライト
パドルはプレイヤー1のパドルなので、スタート画面で「1」が押されても「2」が押されても、動きは同じにする必要があります。このプロジェクトでは、「1」と「2」で別々のブロックグループとなっていますが、その内容は同じです。
「1」または「2」のキーが押されると、ゲームスタート画面に移動するため、パドルの表示と座標の初期位置を設定します。
「ずっと」ループでは、キーが押されたときのパドルの動きをプログラムしています。「右向き矢印が押された」場合、 今の x座標に10を加算します(すなわち、画面の右側に動く)。反対に、 「左向き矢印が押された」場合、 今の x座標に10を減算します(すなわち、画面の左側に動く)。
Paddle2(パドル2)スプライト
パドル2は、「1」キーが押されたときに、対コンピュータとして動かします。 0.25 秒の時間をかけて、x座標を変数「paddle y position」に動かします。y座標はそのままです。 変数「paddle y position」 は、Ball(ボール)スプライトで値がBallのx座標が入力されています。変数名の付け方が間違っているので紛らわしいですね。すなわち、パドル2のx座標は、Ballのx座標に対して、0.25秒遅れて動きます。
パドル2は、「2」キーが押されたときに、プレイヤー2の動きをします。「d」キーが押された場合に右に動き、「a」キーが押された場合に左に動きます。
まとめ
今回解析した結果から以下のワザを学ぶことが出来ました。
- ボールの動きを徐々に早くする方法
- スコアの付け方
- パドル2のコンピュータの動かし方
一方、紛らわしい変数名が使われていたり、ほとんど同じプログラムが2つのブロックで使用されているなど、いくつか改善余地がありましたので、リミックスで改良してみて下さい。
コメントを残す