86
ウェブカメラを使ったScratchゲームのプログラミング方法

フィットネスは楽しいもの。公園を走り回る代わりに、できるだけ多くのボールを打ってポイントを獲得するゲームを作ったらどうでしょう?ただし、最高得点を獲得するのに30秒しかかかりません!簡単そうに聞こえますが、ジョイパッドを渡してください!いいえ!ゲームを操作するには、自分の体と、手、足、頭を検知してボールを打つと反応するウェブカメラを使います。さらに、ゲームを始めるには「GO!」と叫ぶだけで、カウントダウンが始まります! 

このプロジェクトに必要なもの

  • Raspberry Pi 4 または 400 (または Windows / Apple コンピュータ)
  • 最新のRaspberry Pi OS
  • USBウェブカメラ

ゲームの開始 

1. Raspberry Pi 4/400 の電源を入れUSB ウェブカメラを接続します。内蔵マイクが必要なため、Raspberry Pi 純正カメラではなくUSB ウェブカメラを使用します。 

2. 「設定」>>「推奨ソフトウェア」に移動して、Scratch 3 をインストールします。Scratch 3 はプログラミング カテゴリにあります。ボックスにチェックを入れ、「適用」をクリックしてインストールします。 

3.メインメニューの「プログラミング」からScratch 3を開きます。初回起動時はScratchの起動に少し時間がかかる場合があります。Scratchでのコーディング方法をご理解いただいていることを前提としています。 

4.画面左下の青いフォルダアイコンをクリックして拡張機能メニューを開きます。 「Video Sensing」を選択して、インターフェースの作成に使用する新しいブロックのパレットを追加します。

スクラッチゲーム

(画像提供:Tom's Hardware)

5.猫のスプライトを削除します。画面右下にある猫のスプライトをクリックし、ゴミ箱アイコンをクリックして猫を削除します。 

スクラッチゲーム

(画像提供:Tom's Hardware)

6.猫のロゴをクリックし「スプライトを選択」を選択します。選択肢からバスケットボールを選択します。  

Tom's Hardware の最高のニュースと詳細なレビューをあなたの受信箱に直接お届けします。

スクラッチゲーム

(画像提供:Tom's Hardware)

7. イベントブロックから「緑の旗がクリックされたとき」をドラッグします。ルックブロックから「show」と「say hello for 2 seconds」の両方をドラッグします。これでゲーム開始のトリガーが作成され、スプライトが強制的に表示されます。「say」内のテキストを「Say GO to start」に変更します。 

スクラッチゲーム

(画像提供:Tom's Hardware)

8. 「変数」をクリックし、「変数を作成」をクリックします。変数名を「score」とし、すべてのスプライトで使用できるようにします。 

9. 変数から「スコアを0に設定」をドラッグし前のブロックの下に配置します。正しい変数名を選択するには、ドロップダウンメニューを使用する必要がある場合があります。 

スクラッチゲーム

(画像提供:Tom's Hardware)

10. コントロールから「forever」ループをドラッグし、前のコード ブロックに接続します。 

スクラッチゲーム

(画像提供:Tom's Hardware)

11. コントロールから「if..then」をドラッグしてループ内に配置します。これは条件分岐、つまり質問です。質問を作成するには、「演算子」から「__ > __」をドラッグし、「if..then」の六角形の空白内に配置します。

2つ目の空欄に「50」と入力し、最初の空欄に「Sensing」ブロックから「Loudness」をドラッグします。Loudnessはマイクを使ってノイズを検知し、ノイズレベルは0~100の値で表されます。「GO!」と叫ぶと、50を超えてゲームが開始されます。ただし、この数値はご自宅の状況に合わせて調整する必要があるかもしれません。 

スクラッチゲーム

(画像提供:Tom's Hardware)

12. 「イベント」にある「ブロードキャスト」を「if..then」セクションにドラッグし、ドロップダウンを使用して「ボール」という新しいメッセージを作成します。 

スクラッチゲーム

(画像提供:Tom's Hardware)

13. Looksから「say hello for 2 seconds」と「hide」をドラッグし、「if..then」セクションに配置します。sayブロックを「GO!」に変更します。これで、プレイヤーが「GO!」と叫ぶとバスケットボールが消え、ゲームが始まります。このスプライトのコードは以下のようになります。 

スクラッチゲーム

(画像提供:Tom's Hardware)

スプライトの追加 

今のところ、ゲームを開始する手段は作成しましたが、まだゲームは完成していません。そのためには、インタラクションできるスプライトを追加する必要があります。

1.画面右下の「スプライトを選択」ボタンを使って 新しいスプライトを作成します。野球ボールを選択します。

スクラッチゲーム

(画像提供:Tom's Hardware)

2. イベントから「ボールを受け取ったとき」ブロックを2つドラッグします。このブロードキャストは、プレイヤーが「GO!」と叫んだときに実行されます。 

スクラッチゲーム

(画像提供:Tom's Hardware)

3. Motionから「if on edge bounce」と「set rotation style」をドラッグし、いずれかのブロックの下に接続します。回転を「all around」に設定します。 

スクラッチゲーム

(画像提供:Tom's Hardware)

4. コントロールから「forever」をドラッグし、前のブロックの下に配置します。 

スクラッチゲーム

(画像提供:Tom's Hardware)

5.モーションブロック内の 「glide 1 secs to random position」をforeverドラッグします。コードは以下のようになります。

スクラッチゲーム

(画像提供:Tom's Hardware)

このスプライトが「balls」というメッセージを受信すると、壁に跳ね返り、画面の境界でリアルな角度で反射するよう設定されます。そして、ボールは空中を飛ぶボールのように画面上を滑るように動きます。 

ここで、残りの「ボールを受け取ったとき」ブロックに注目します。このブロックでは、ウェブカメラを使用して、スプライトに動きがあるかどうかを検出し、ボールを打とうとしていることを示します。

1. コントロールから、 2 番目の「ボールを受け取ったとき」ブロックの下に永久ループを配置し、「if..then」を追加して永久ループ内にネストされるようにします。 

スクラッチゲーム

(画像提供:Tom's Hardware)

2. 演算子ブロックから「__ > __」をドラッグし、「if..then」の六角形の枠内に配置します。2つ目の枠に「80」と入力し、最初の枠にビデオセンシングブロックから「スプライト上のビデオモーション」をドラッグします。これにより、カメラを使ってスプライト上で手を振ったりパンチをしたりしているかどうかを確認し、手を振っている速度も確認します。実際には、このブロックは動きをチェックして値を割り当てるため、目的に合わせて「80」の値を調整する必要があるかもしれません。 

スクラッチゲーム

(画像提供:Tom's Hardware)

3. if ブロック内の変数から「change score by」ブロックを削除します。野球ボールがヒットした場合、スコアは10ポイント増加します。コードは以下のようになります。 

スクラッチゲーム

(画像提供:Tom's Hardware)

スプライトの複製

新しいスプライトを作成するプロセスを繰り返すのではなく、スプライトを複製して編集することができます。 

1.野球のスプライトを右クリックし「複製」を選択します。これで、ゲーム内に同じボールが2つ作成されます。

2.ボールの動きを速くするために、「glide 1 secs」を 0.5 秒に変更します。

スクラッチゲーム

(画像提供:Tom's Hardware)

3. コスチュームを選択し、画面左下の「コスチュームを選択」ボタンをクリックします。テニスボールを選択します。コスチュームエディタに戻り、画面左側のテニスボールをクリックしてデフォルトに設定します。完了したら「コード」をクリックします。 

スクラッチゲーム

(画像提供:Tom's Hardware)

カウントダウンタイマーの追加

現状では、ゲームは永遠に、あるいはプレイヤーが飽きるまでプレイされ続けます。プレイヤーに目標を持たせるためにタイマーを追加する必要があります。30秒間で何ポイント獲得できるでしょうか?カウントダウンタイマーは30秒に設定されており、そのコードはゲームがプレイされるステージ内に含まれています。

1.画面の右下にある ステージアイコンをクリックします。

スクラッチゲーム

(画像提供:Tom's Hardware)

2.イベントから「ボールを受け取ったとき」をドラッグすると、スプライトが動くと同時にコードが実行されるようになります。 

スクラッチゲーム

(画像提供:Tom's Hardware)

3. 「timer」という新しい変数を作成し、「set timer to 0」をブロックの下にドラッグ&ドロップします。値を30に設定します。 

スクラッチゲーム

(画像提供:Tom's Hardware)

4. コントロールから「repeat 10」をドラッグし、前の項目の下に配置します。10を 30 に変更します。これでループが30回繰り返され、カウントダウンタイマーとして機能します。 

スクラッチゲーム

(画像提供:Tom's Hardware)

5. ループ内で、 「変数」から「タイマーを0に変更」ブロックをドラッグします。値を-1に設定します。「コントロール」から「1秒待つ」ブロックをドラッグします。これで、このループは30秒からゲームの時間である0までタイマーを刻みます。 

スクラッチゲーム

(画像提供:Tom's Hardware)

6.コントロールから「Stop All」をドラッグし「Repeat 30」ループの外側に配置します。タイマーが0になるとループが終了し、最後のブロック「stop all」がトリガーされて、すべてのスプライトと実行中のコードが停止します。

ゲームはこれで完成ですが、画面右下の「背景を選択」ボタンを使ってステージに新しい背景を追加することもできます。これによりステージの見た目は変わりますが、私たちがゲームをプレイしているライブビデオのプレビューが重ねて表示されます。

ゲームを始めるには、緑の旗をクリックして、カメラの視野内に自分の位置を置き、「GO!」と叫んでゲームを開始してください。頑張ってください!

この記事はもともとLinux Format誌に掲載されました。