Scratch(スクラッチ)でゲームを作ろう:スノーピンポン

伊東 けいこ

前回はシンプルなゲーム「もぐらハイタッチ」を作成しました。今回はスクラッチでのプログラミングに欠かせない「メッセージ」と「変数」を使ってみましょう。落ちてくる球を打ち返すピンポンゲームを作ります。
Scratchの基本的な使い方、これまでの記事についてはこちらからご参照ください。

Scratch(スクラッチ)でゲームを作ろう!:スノーピンポン

今回のポイント

【1】準備その1:登場するものと流れを考えよう

今回作るのは、落ちてくる球を板で打ち返すピンポンゲームです。最初に、ゲームの見た目と機能をイメージしておきましょう。
Scratch(スクラッチ)でゲームを作ろう:スノーピンポン

  • (1) 「球(雪)」が落ちてくる
  • (2) 「板」を操作して雪を落とさないように跳ね返す
  • (3) 「球(雪)」は端に当たると跳ね返る。上端に当てると1点獲得
    (点数が増えるにつれて「雪だるま」が少しずつ出来上がる)
  • (4) 7点獲得すると勝ち(「雪だるま」が完成、おめでとうメッセージを出す)
  • (5) 「球(雪)」を落とすと負け(リトライボタンを出す)

【2】準備その2:必要なスプライト

ゲームに使う素材は、主に「スプライトを選ぶ」一覧にあるスプライトを少しアレンジすると便利です。ここでは、「球(雪)」には雪(Snowflake)、球を打ち返す「板」には魔法の杖(Magic Wand)得点を表現するのに「雪だるま」(Snowman)を選びました。

スプライト一覧より選択

その他にも勝ち負けの判定、得点の表現、終了時の飾りやリトライボタンなど、色々な目的のスプライトが必要となります。次の図の通り必要なスプライトを準備しましょう。

スプライト8点

それぞれのスプライトのプログラムについてはこの後順に説明していきます。

【3】メモ:「メッセージ」とは?プログラムのトリガーとなる合図

「メッセージ」は複数のスプライトを動かすプログラムにおいて、とても便利な機能です。今回新たに使う「メッセージ」の機能を説明します。「イベント」カテゴリーの中にあるブロックです。

メッセージブロック

「メッセージ」はプログラムの中で「アクションを起こすタイミングを知らせる合図」の役割をします。
スプライトや背景は好きなタイミング、イベント時に固有の名前をつけたメッセージを「送る」ことができます。そして複数のスプライトや背景がメッセージを「受け取る」ことができます。メッセージを受け取った時のプログラムを組むことで、アクションやイベントに合わせた動きを設定できます。

【4】上端と下端の設定:「球(雪)」が上端に触れると得点、下端に触れると終了

まずは「球(雪)」と「板」のプログラミングの前に、「球(雪)」が触れることによって「得点」と「失敗」を判定するスプライトを配置しましょう。両方ともはっきりと見えるものでなくて構いません。ステージの上端は背景と同じ色の「上の端」スプライト、下端はうっすらと色をつけた「下の端」スプライトを置きました。

各スプライトには次の図の通りプログラムを設定します。
(スプライトの色を透明にしたり、「隠す」プログラムで非表示にすると「触れた」ことを検知してくれないので注意しましょう。)

上の端と下の端

共に緑の旗を押した時に所定の位置に配置されるようにしています。そして「下の端」にはこの時に「スタート」のメッセージを送るようにプログラムを加えています。ゲーム開始を「スタート」のメッセージで伝えることによって、緑の旗を押す以外のアクション(リトライボタンを押すなど)でもゲームを始めることができます。

【5】「球(雪)」を打ち返す「板」のプログラム

矢印キーで左右に動く「板」のプログラムがこちらです。ゲーム開始時の設定を[スタートを受け取ったとき]ブロックでプログラミングします。左右それぞれのキーを押した時の動きも設定します。

「板」のプログラム

【6】「球(雪)」のプログラム

ここで「球(雪)」に必要なプログラムを書き出してみましょう。

  • どこかから現れて落ちてくる
  • 板に当たると跳ね返る
  • 上端に当たると得点
  • 下端に当たると終了(失敗)
「雪(球)」のプログラム

(1) 「球(雪)」の出現時の設定

上端の少し下から出現し、少しランダムな角度で落ちてくるようにプログラミングをします。(ランダムな数値を呼び出す乱数については前回の記事をご参照ください。)位置や重なりの他に[幽霊の効果を0にする][表示する]を設定しているのは、ゲームが終了した際に[幽霊の効果が100(透明化)][隠す]設定がされていて非表示になっているため、リトライした時に再度出現させる必要があるからです。

(2) ゲームが終了するまで「球(雪)」が動く設定

[○歩動かす][もし端についたら跳ね返る]ブロックを[ずっと]ブロックの中に入れます。壁に当たると跳ね返り、ゲームが終了するまでずっと動き続けるプログラムとなります。

(3) 「球(雪)」が板に触れた時の設定

球が跳ね返るプログラムを作ります。「球(雪)」が板に触れた時に[180度回す]ことで向きを変え、跳ね返る動きを作ることができます。少しランダムな角度(160〜200度)で跳ね返るようにしています。跳ね返す時の音も加えてみました。

(4) 「下の端」に触れた時(失敗時)の設定

球(雪)をキャッチしそこねるとゲームオーバーです。画面の下側に設置した「下の端」に触れると球(雪)がふわっと消え、「失敗!」のメッセージを送るようにプログラムを組みます。

(5) 「上の端」に触れた時(得点時)の設定

「球(雪)」を板で跳ね返し、上の端に当てると得点となります。「上の端」に触れると「球(雪)」が音と共にランダムな角度で跳ね返ると同時に「得点」のメッセージを送ります。

【7】得点した時のプログラム(雪だるま)

「板」で「球(雪)」を跳ね返すたびに点数が入る仕組みを作ります。点数を見せるかわりに「雪だるま」のパーツが増えていき、7点獲得すると完成する、という表現にします。段階的に雪だるまが完成する様子を8枚のコスチュームにして、得点する度に次のコスチュームに切り替わるようにプログラムを組みます。

「雪だるま」のコスチューム
「雪だるま」のプログラム

(1) 「雪だるま」のゲームスタート時の設定

位置や重なり順の設定の他、[得点数を0にする](オレンジのプログラム)設定がされています。これは「変数」という機能を利用して、得点を記録している部分です。

(2) 「得点」のメッセージを受け取った時

「球(雪)」が上端に触れて得点となる度に、雪だるまのコスチュームが変わり、雪の球から雪だるまへと変化していきます。同時に「得点数」の変数に1点ずつ加算していくことで何点目かを記録します。得点が7点になると「おめでとう」のメッセージを送ります。[終わるまで○の音を鳴らす]を利用すると少し長い音も最後まで流すことができます。

(3) 「失敗!」のメッセージを受け取った時

「球(雪)」が下端に触れると「失敗!」のメッセージが発信されます。この「失敗」メッセージを受け取ると雪だるまがフェードアウトで消えます。

【8】成功時、失敗時のプログラム、リトライボタン

得点が7点になると「雪だるま」から「おめでとう」、球(雪)が下端にふれるとゲームオーバーで「失敗!」のメッセージが送られます。ゲームの成功時や失敗時に影響を受ける他のスプライトのプログラム部分について説明します。

(1) 成功時:「球(雪)」

「【6】「球(雪)」のプログラム」で説明したプログラムに追加して次の図の点線で囲んだ部分を追加します。進んでいた動きを止めて、弾けて消えるプログラムです。[スプライトの他のスクリプトを止める]ブロックで、前に設定している[ずっと]ブロックの動きを止めています。同時にコスチュームを変えながら透明度を下げることで弾けて消える動きを表現しています。

「雪(球)」のプログラム2

(2) 成功、失敗時:終了を知らせるテキストを画面に表示

「成功 or 失敗」スプライトに2枚のコスチュームを作成し、成功時には「Congratulations!」、失敗(ゲームオーバー)時には「Oops…」の文字が浮かび上がるようにしました。プログラムはこちらです。

「成功 or 失敗」のプログラム

(3) 成功、失敗時:リトライボタンを画面に表示、背景変更

成功時の画面

成功もしくは失敗時に再チャレンジするためのリトライボタンを作成し「Congratulations!」「Oops…」のテキストの下に表示されるようにしました。

「リトライボタン」のプログラム

また、成功時には山と雪のスプライトを表示することで背景を変化させ、少し賑やかさを出しました。

「背景(追加)」のプログラム

スノーピンポンゲームの完成です。


「スノーピンポン」 実際のプログラム

【9】今回のまとめ

今回は

  • イベントの発生タイミングを伝える「メッセージ」
  • 変化する値を記憶させる「変数」

を利用してピンポンゲームを作りました。
何かのトリガーで複数のスプライトが様々な動きをしたり、得点を記録したり、だんだんとできることの幅が広がってきました。キャラクターやスプライトに手を加えたり、いろいろな音を加えてみたり、ピンポンゲーム一つを取り上げるだけでも様々なアレンジが可能ですので、ぜひお持ちのアイデアを試してみてください。

Scratchの使い方や作品アイデアがたくさん! Scratchでプログラミングに挑戦!

伊東 けいこ
Web制作者&ライター。2017年よりオランダ在住。 サイト構築の傍らオランダにおける教育&テクノロジー、社会&テクノロジー周辺を追っています。 https://chari-kamo.com

コメント

コメントを書く