プログラミングドリル

スクラッチでピンポンゲームを作ってみよう②

Scratch先生
Scratch先生

こんにちは、みなさん!
Scratch先生です。

「スクラッチでピンポンゲームを作ってみよう①」では、ピンポンゲームの基本的なプログラムの作り方をマスターしました。
今回は、ピンポン玉をパドルで打ち返すごとにスピードアップして得点を付けるプログラムを作ってみよう!

プログラムの中身だけ知りたい人は、下をクリックしてね。

プログラムを確認する ⇩

スクラッチで作るピンポンゲームとは、動くピンポン玉をパドルというラケットのようなもので当てて楽しむゲームのことです。

今回、プログラミングに挑戦するピンポンゲームは、こちらです。

緑の旗をクリックすると、カウントダウンが始まり、ピンポンゲームがスタートします。

ピンポンゲームの遊び方は、ゲーム開始時にピンポン球が発射されますので、左右矢印キーでパドルを動かして、赤いレッドラインに触れさせないようにピンポン玉をパドルに当てます。

パドルに当たったピンポン玉は跳ね返されますので、それを繰り返し、赤いレッドラインに触れさせないようにするゲームです。

もしも、赤いレッドラインに触れてしまったら、そこでゲーム終了(game over)となります。

パドルでピンポン玉を跳ね返すと得点が付き、スピードが少しずつ速くなるので、高得点がとれるようにチャレンジしてみましょう!

スポンサーリンク

素材をリミックスorプロジェクトをコピー

まずは、ピンポンゲームの基本的なプログラムをコピーします。

下のピンポンゲームの基本的なプログラムのプロジェクトを開いて、リミックスしましょう。

ピンポンゲームの基本的なプログラムのプロジェクトを見る >>

プロジェクトをコピー

「スクラッチでピンポンゲームを作ってみよう!①」でプログラムを作った子は、そのプロジェクトをコピーしてもOKです。

メニューバーの「ファイル」>「コピーを保存」をクリックすると、プロジェクトがコピーされます。

プロジェクト名が「〇〇 copy」となっていれば、コピーされたプロジェクトになります。

素材の確認

リミックスあるいはプロジェクトをコピーしたら、素材を確認しましょう。

こちらには、下の4つのスプライトがあります。

  • 文字
  • パドル
  • ピンポン玉
  • レッドライン

コスチューム

スプライトのコスチュームを確認すると、スプライト「文字」には、下の5つのコスチュームがあります。

  • 3(カウントダウン用)
  • 2(カウントダウン用)
  • 1(カウントダウン用)
  • start(ゲーム開始用)
  • gameover(ゲーム終了用)

スプライト・背景の音を確認すると、以下のスプライトと背景に音が設定されています。

  • スプライト「文字」・・・「Finger Snap」「Coin」「Lose」
  • スプライト「ピンポン玉」・・・「Water Drop」
  • 背景・・・「Dance Energetic」(BGM)

プログラムの内容

プログラムの内容は、「スクラッチでピンポンゲームを作ってみよう!①」と同じプログラムです。

忘れた子やまだ作っていない子は、もう一度プログラムの内容を確認して、ピンポンゲームがどのようにプログラミングされているか理解しましょう。

追加するプログラム

今回、ピンポンゲームの基本的なプログラムに、追加するプログラムは以下になります。

  • 【ピンポン玉】パドルでピンポン玉を跳ね返すと、ピンポン玉のスピードが上がる(パドルと同じスピード)
  • 【ピンポン玉】パドルでピンポン玉を跳ね返すと、1点得点が付く
  • 【ピンポン玉】ゲームオーバーになると、最高得点(クラウド変数)を超えているかチェックして、超えているなら最高得点(クラウド変数)を更新をする
  • 【パドル】パドルでピンポン玉を跳ね返すと、パドルのスピードが上がる(ピンポン玉と同じスピード)

追加する変数

追加するプログラムを確認すると、ピンポン玉やパドルのスピードが上がったり、得点が付いたりとゲーム中変化がありますよね。

プログラムの実行中に何か変化させる場合は、「変数」を使います。

今回、追加する変数は以下の3つです。

  • スピード(グローバル変数)
  • 得点(グローバル変数)
  • 最高得点(クラウド変数)

変数「スピード」は、ピンポン玉とパドルのスピードを調整するための変数です。

変数「得点」は、パドルでピンポン玉を跳ね返した回数(得点)をカウントします。

クラウド変数「最高得点」は、最高得点となった変数「得点」の値を、Scratchのクラウド上に保存するための変数です。

クラウド変数「最高得点」の値は、ブラウザを閉じたとしてもリセットされずに、Scratchコミュニティの参加者と一緒に共有することができます。

スクラッチは3つの種類の変数があります。

  • すべてのスプライト用(グローバル変数)
  • このスプライトのみ(ローカル変数)
  • クラウド変数(サーバーに保存)

「すべてのスプライト用」は、すべてのスプライトで共通して使える変数のことで、プログラミングの世界では、「グローバル変数」といいます。

「このスプライトのみ」は、そのスプライトの中でしか使うことができない変数のことで、プログラミングの世界では、「ローカル変数」といいます。

グローバル変数

こちらは、「すべてのスプライト用」のグローバル変数を使った例です。

「言葉」というグローバル変数に「おはよう」を入れています。

スプライト「ねこ」「かに」は、グローバル変数「言葉」を使った同じプログラムです。

緑の旗をクリックして実行すると、2つのスプライトとも「おはよう」と言っています。

このようにすべてのスプライトで共通して使える変数を「グローバル変数」といいます。

ローカル変数

こちらは、「このスプライトのみ」のローカル変数を使った例です。

さきほどと同じ「言葉」という名前の変数ですが、ステージモニターをみると2つありますよね。

  • ねこ:言葉[おはよう]・・・スプライト「ねこ」のローカル変数「言葉」
  • かに:言葉[こんばんは]・・・スプライト「かに」のローカル変数「言葉」

こちらは、どのスプライトのローカル変数か分かるように「〇〇:ローカル変数名」と表示されています。

スプライト「ねこ」のローカル変数「言葉」には「おはよう」、スプライト「かに」のローカル変数「言葉」には「こんばんは」を入れました。

プログラムの内容は、さきほどとまったく同じ内容ですが、実行してみると、

スプライト「ねこ」が「おはよう」、スプライト「かに」が「こんばんは」とそれぞれ違う言葉を言っていますよね?

このように同じ変数名でも、そのスプライトの中でしか使うことができない変数を「ローカル変数」といいます。

クラウド変数

そして、最後の1つがクラウド変数です。

スクラッチのクラウド変数は、Scratchのクラウド上に保存される変数で、ブラウザを閉じたとしてもリセットされません。(ローカル変数、グローバル変数はリセットされる)

よって、クラウド変数を使うと、プロジェクトのデータをクラウド上に保存して、Scratchコミュニティの参加者と一緒に共有することができます。

プロジェクトを公開した際に、不特定多数の人の得点をランキング形式で保持したい場合などに用いられます。

他にもアンケート調査など使い方はさまざまです。

クラウド変数は、「Scratcher(スクラッチャー)」でないと利用することができません。

クラウド変数については、以下で詳しく解説していますので、確認しましょう。

追加する変数を理解したら、3つの変数を作成しましょう。

  • スピード(グローバル変数)
  • 得点(グローバル変数)
  • 最高得点(クラウド変数)

クラウド変数だけ分かるように、☁(雲マーク)が付いています。

スプライト「ピンポン玉」に追加するプログラムを考える

スプライト「ピンポン玉」に追加するプログラムを考えていきましょう。

  1. 【ピンポン玉】パドルでピンポン玉を跳ね返すと、ピンポン玉のスピードが上がる(パドルと同じスピード)
  2. 【ピンポン玉】パドルでピンポン玉を跳ね返すと、1点得点が付く
  3. 【ピンポン玉】ゲームオーバーになると、最高得点(クラウド変数)を超えているかチェックして、超えているなら最高得点(クラウド変数)を更新をする

スプライト「ピンポン玉」では、3つの変数を利用していることが分かります。

  • スピード(グローバル変数)
  • 得点(グローバル変数)
  • 最高得点(クラウド変数)

変数を作ったら、お決まりのパターンがありましたよね。

変数を作ったら、「初期設定」の場所で値を設定しましょう。

プログラミングの世界でも変数の値の設定は、プログラムの最初に設定して、途中で変数の値を変更したいときは、変更したい場所で変更します。

(画像をクリックすると大きくなります。)

変数を〇にする」ブロックを使って、変数「スピード」には「10」、変数「得点」には「0」を設定します。

変数「スピード」には、自由な値を設定してもOKです。

クラウド変数「最高得点」は、更新されたデータを保持しますので、初期設定はしません。

①②パドルでピンポン玉を跳ね返すと、ピンポン玉のスピードが上がり、1点得点が付く

プログラミングチャレンジ1
Scratch先生
Scratch先生

Scratch先生から子供たちへの挑戦状です!

クリアできるかな?

①②の『【ピンポン玉】パドルでピンポン玉を跳ね返すと、ピンポン玉のスピードが上がり、1点得点が付く』では、変数「スピード」と変数「得点」を使います。

パドルでピンポン玉を跳ね返すと、ピンポン玉のスピードが上がり、1点得点が付くようにプログラムを修正してください。

尚、スピードをどのように上げるかは、自由に設定してください。

「パドルでピンポン玉を跳ね返すと、ピンポン玉のスピードが上がり、1点得点が付く」プログラミングはできましたか?

スピードをどのように上げるか考えるのが難しかったかな?

(画像をクリックすると大きくなります。)

こちらが、「パドルでピンポン玉を跳ね返すと、ピンポン玉のスピードが上がり、1点得点が付く」プログラムです。

まず、「〇歩動かす」ブロックの〇には、変数「スピード」の値ブロックを設定します。

次に、ピンポン玉にパドルが触れたときの処理の最後に、「変数を〇にする」ブロックを使って、変数「スピード」と変数「得点」の値を変更しています。

変数「スピード」=変数「スピード」×1.05

変数「スピード」は、1.05倍ずつスピードを速くしています。

倍数を大きくしすぎると、あっという間にものすごいスピードに到達してしまいますので、ゆっくり速度を上げる場合は、倍数を小さくしましょう。

変数「得点」=変数「得点」+ 1

変数「得点」は、1ずつ増えるように設定します。

③ゲームオーバーになると、得点をチェックをして、最高得点なら最高得点(クラウド変数)を更新をする

  1. 【ピンポン玉】パドルでピンポン玉を跳ね返すと、ピンポン玉のスピードが上がる(パドルと同じスピード)
  2. 【ピンポン玉】パドルでピンポン玉を跳ね返すと、1点得点が付く
  3. 【ピンポン玉】ゲームオーバーになると、最高得点(クラウド変数)を超えているかチェックして、超えているなら最高得点(クラウド変数)を更新をする

次に『ゲームオーバーになると、最高得点(クラウド変数)を超えているかチェックして、超えているなら最高得点(クラウド変数)を更新をする』プログラムですが、これは変数「得点」とクラウド変数「最高得点」をチェックするだけで簡単ですよね。

プログラミングチャレンジ2
Scratch先生
Scratch先生

Scratch先生から子供たちへの挑戦状です!

クリアできるかな?

③の『ゲームオーバーになると、得点をチェックして、最高得点なら最高得点(クラウド変数)を更新する』プログラムを作ってみましょう!

「ゲームオーバーになると、得点をチェックして、最高得点なら最高得点(クラウド変数)を更新する」プログラミングはできましたか?

ゲームオーバーになったときですので、変数「シーン」を「エンド」に設定した後に得点をチェックします。

〇>〇(大なり)」ブロックを使って、もしも、変数「得点」の値がクラウド変数「最高得点」の値よりも大きければ、クラウド変数「最高得点」に変数「得点」の値を設定して、最高得点を更新させます。

ここまでが、スプライト「ピンポン玉」のプログラムの説明になります。

スプライト「パドル」に追加するプログラムを考える

次は、スプライト「パドル」に追加するプログラムを考えていきましょう。

  1. 【パドル】パドルでピンポン玉を跳ね返すと、パドルのスピードが上がる(ピンポン玉と同じスピード)

スプライト「パドル」では、変数「スピード」を利用していることが分かります。

今回は、ピンポン玉と同じ、変数「スピード」を使っていきます。

プログラミングチャレンジ2
Scratch先生
Scratch先生

Scratch先生から子供たちへの挑戦状です!

クリアできるかな?

①の『パドルでピンポン玉を跳ね返すと、パドルのスピードが上がる(ピンポン玉と同じスピード)』プログラムを作ってみましょう!

「パドルでピンポン玉を跳ね返すと、パドルのスピードが上がる(ピンポン玉と同じスピード)」プログラミングはできましたか?

(画像をクリックすると大きくなります。)

こちらが、「パドルでピンポン玉を跳ね返すと、パドルのスピードが上がる(ピンポン玉と同じスピード)」プログラムです。

変数「スピード」の初期設定は、スプライト「ピンポン玉」のプログラムで行っているため、こちらでは必要ありません。

左右矢印キーを押したときの「x座標を〇にする」ブロックの〇には、固定で「10」を入れていましたが、こちらに変数「スピード」の値ブロックを設定すれば、完成です。

変数「スピード」の値が変われば、移動するx座標も一緒に変わります。

これで、パドルでピンポン玉を跳ね返すと、パドルのスピードが上がるプログラムの完成です。

今回、ピンポン玉と同じスピードに設定していますが、別々にスピードを設定したい場合は、新しく変数を作りましょう。

新しく変数を作った場合は、スプライト「パドル」でも初期設定が必要になるので、そこだけ注意すればOKです。

プログラムが完成したら、実際にピンポンゲームをプレイしてみましょう!

最高特定を更新できましたか?

中には、簡単すぎて、あまり面白くないと思った子もいるかもしれません。

その理由の一つは、ピンポン玉がパドルに当たったとき、跳ねる角度が「入射角=反射角」で一定だからです。

規則性のある動きはなんだか物足りないですよね。

ピンポン玉の動きを変更

(画像をクリックすると大きくなります。)

規則性のある動きはなんだか物足りないと感じた子は、こちらのようにプログラムを修正してみましょう。

こちらでは、ピンポン玉がパドルに当たった位置から、跳ね返る方向をランダムに設定しています。

パドルに当たる位置は、以下の3つの条件で分けています。

  • ピンポン玉のx座標とパドルのx座標が同じとき(パドルの中心)
  • ピンポン玉のx座標がパドルのx座標より大きいとき(パドルの右側)
  • ピンポン玉のx座標がパドルのx座標より小さいとき(パドルの左側)

(画像をクリックすると大きくなります。)

ピンポン玉のx座標とパドルのx座標が同じとき(パドルの中心)の角度は、以下の計算式で求めています。

角度=180-「向き」ブロック

これは、入射角=反射角になる計算式です。

ピンポン玉がぴったりパドルの中心に来たときは、同じ角度で跳ね返します。

ピンポン玉のx座標がパドルのx座標より「大きいとき(パドルの右側)」と「小さいとき(パドルの左側)」は、パドルの中心から左右にランダムの角度を設定しています。

ボールを跳ね返したい角度の範囲は、自由に設定してもOKですが、あまり広角すぎると、ボールがパドルにくっついて離れない状態になることがありますので、注意しましょう。

また、ランダムな角度に設定するとピンポン玉とパドルがくっついて離れない現象が起こることがあります。

くっつきを防止するために、パドルから離れるまで、そのままの角度で動く処理を追加しています。

「パドルに触れたではないまで繰り返す」とは、別の言い方に置き換えると、「パドルから離れるまで繰り返す」になります。

こちらでは、パドルから離れるまで、ピンポン玉をそのままの角度で動かして、くっつきを防止しています。

ただし、これでもピンポン玉がパドルを貫通したり不具合が発生する場合があります。

どうすれば改善されるか、自分なりに考えてみましょう。

まとめ

Scratch先生
Scratch先生

スクラッチで、ピンポン玉をパドルで打ち返すごとにスピードアップして得点を付けるプログラミング方法、理解できたかな?

「スクラッチでピンポンゲームを作ってみよう②」では、ピンポン玉をパドルで打ち返すごとにスピードアップして得点を付けるプログラムに修正していきました。

完成したプログラムの中身を見たい人は、こちらから確認してください。

プログラムを確認する  >

ピンポンゲームの基本となるプログラムから、スピードアップして得点を付ける機能を追加しただけでも面白いピンポンゲームになりましたよね。

今度は、さらにゲーム性のある「ブロック崩しゲーム」に挑戦していきます。

ブロック崩しゲームを作りたい子は、次の「スクラッチでブロック崩しゲームを作ってみよう①」へ進みましょう!


【Step6】スクラッチでプログラミング!

【Step5】「キー」「マウスクリック」のプログラムに挑戦!

【Step4】歩くプログラムに挑戦!

【Step3】スクラッチとプログラミングの基本知識

【Step1・Step2】スクラッチアカウント作成とログイン方法

ピンポンゲームのピンポン玉をパドルで打ち返すごとにスピードアップして得点を付けるプログラム

ピンポンゲームのピンポン玉をパドルで打ち返すごとにスピードアップして得点を付けるプログラムプログラムは、こちらの通りです。

詳しい説明が必要な方は、最初に戻って読み進めてください。

「文字」のプログラム

(画像をクリックすると大きくなります。)

「パドル」のプログラム

「ピンポン玉」のプログラム

「レッドライン」のプログラム

「背景」のプログラム