夏の自由研究にピッタリ!スクラッチで物理エンジンを作ってみよう!

目次

はじめに:キミの壮大なゲーム作りアドベンチャー!

やあ、みんな!エンジニアで二児の父さんだよ。この間、子どもたちとゲームで遊んでいたら、下の子がこう聞いたんだ。「お父さん、どうしてキャラクターはちゃんと下に落ちたり、ジャンプしたりできるの?」ってね。それは「物理エンジン」っていう魔法のおかげなんだ。そして今日は、みんなでその物理エンジンを一緒に作ってみようと思う!これは、キミの夏の自由研究にぴったりのテーマだし、絶対に最高の冒険になるはずだよ。

この記事を書いた人
  • 現役エンジニア
  • スクラッチ歴4年
  • 二児パパ
ろぼてく

物理エンジンってなんだろう?

「物理エンジン」って聞くと、なんだか難しそうに聞こえるかもしれないね。でも、すごく簡単に言うと、**ゲームの中のモノが、僕たちの世界みたいにリアルに動くための「ルール」**のことなんだ 。  

例えば、投げたボールがきれいなカーブを描いて飛んでいったり、キャラクターの服が風でひらひらなびいたり、火事の煙が空にのぼっていったりする様子。これらは全部、物理エンジンが「重力」や「空気の抵抗」みたいなルールに従って、動きを計算しているからなんだよ 。つまり、物理エンジンは、ゲームの世界に命を吹き込む「頭脳」みたいなものなんだ。今日は、このすごいツールの簡単なバージョンを、キミ自身の手で作ってみるよ!  

僕たちのすごい道具:スクラッチ

今回の冒険で使う最高の道具は「スクラッチ(Scratch)」だ。スクラッチは、アメリカのマサチューセッツ工科大学(MIT)というすごい大学が、8歳から16歳の子どもたちのために開発したプログラミング言語なんだ 。  

一番すごい特徴は、難しい文字のコードを打つ必要がないこと。まるでレゴブロックみたいに、カラフルな「ブロック」をマウスでカチッとはめていくだけで、プログラムが作れちゃうんだ 。だから、プログラミングが初めてでも、遊びながら楽しく覚えられるよ 。  

しかも、スクラッチは誰でも無料で使えて、インターネットにつながるパソコンやタブレットがあれば、すぐに始められる。これは、「世界中の子どもたちに、平等に創造的な学習の機会を」というスクラッチの素晴らしい理念のおかげなんだ 。  

今回のミッション:かっこいい自由研究にしよう!

今回のミッションは、ただゲームを作るだけじゃない。科学者やエンジニアみたいに、実験して、観察して、発見したことを記録する、本格的な「自由研究」にすることだ 。  

この記事の最後には、今日作ったものを、学校の先生やお友達、お父さんやお母さんが「すごい!」って驚くような、かっこいいレポートにまとめる方法もバッチリ教えるから、安心してついてきてね 。  

さあ、準備はいいかい?プログラマーの冒険に出発だ!

第1部:プログラマーの道具箱:準備をしよう

さあ、冒険を始める前に、僕たちの「道具」をしっかり確認しておこう。どんなにすごい大工さんでも、まずは自分の道具箱を整理するからね。

秘密基地を探検!スクラッチの画面

まず、スクラッチのサイトを開いて「作る」をクリックすると、キミだけの秘密基地(開発画面)に入れる。画面は大きく4つのエリアに分かれているよ。

  • ステージ (Stage): 画面の右上にある、ネコがいる場所だ。ここはキミの作ったプログラムが動く舞台だよ。ここで全ての物語が生まれるんだ 。  
  • スプライト (Sprite): ステージにいるネコみたいに、ゲームに登場するキャラクターやモノのこと。自分で絵を描いたり、ライブラリから選んだりできるよ 。  
  • ブロックパレット (Block Palette): 画面の左側にある、カラフルなブロックがたくさん並んでいる場所。これがキミの「道具箱」だ。動き、見た目、音など、いろんな種類のブロックがある 。  
  • スクリプトエリア (Script Area): 画面の真ん中の広いスペース。ブロックパレットからブロックをドラッグ&ドロップして、プログラムを組み立てる「作業台」だよ 。  

新しいスーパーパワー:「プログラミング的思考」

これから僕たちが身につけるのは、ただのプログラミング技術じゃない。「プログラミング的思考」という、最強のスーパーパワーなんだ。これは、文部科学省も「これからの時代にすごく大事だよ」と言っている考え方なんだよ 。  

難しく考えなくていい。これは**「目標を達成するために、物事を順序立てて考え、うまくいかなかったら原因を見つけて修正する力」**のことだ 。  

例えば、カレーライスを作る時を想像してみて 。  

  1. 目標: 美味しいカレーを作る。
  2. 分解: そのために何をすべきか、小さなステップに分ける。「野菜を切る」「肉を炒める」「水を加えて煮込む」「ルーを入れる」…。
  3. 組み立て(順序): これらを正しい順番で実行する。いきなりルーを入れても美味しくならないよね。
  4. 試行錯誤: もし味が薄かったら?「ルーを足してみよう」「塩を少し入れてみよう」と原因を考えて、解決策を試す。

これがプログラミング的思考だ。この考え方は、算数の問題を解くときも、国語の作文を書くときも、将来どんなことをするにも役立つ、一生モノのスーパーパワーなんだ 。  

物理の基礎部品

僕たちの物理エンジンを作るために、スクラッチの3つの大事な「基礎部品」をマスターしよう。ここは初心者がつまずきやすいポイントだから、しっかり説明するね 。  

ステージの秘密の地図「座標」

ステージの上で、スプライトが「どこにいるか」を示すのが「座標(ざひょう)」だ。これは、宝の地図に描かれた「東へ3歩、北へ5歩」という印みたいなもの。

  • x座標: 横の位置を示す。ステージの真ん中が0で、右に行くと数が大きくなり(最大240)、左に行くと小さくなる(最小-240)。  
  • y座標: 縦の位置を示す。真ん中が0で、上に行くと数が大きくなり(最大180)、下に行くと小さくなる(最小-180)。  

つまり、「x座標が100、y座標が50」と言えば、ステージ上のたった一つの場所が決まるんだ。この秘密の地図を使いこなせば、キャラクターを自由自在に動かせるようになるよ 。  

情報をしまっておく魔法の箱「変数」

次に、プログラミングで一番と言っていいほど大事な道具、「変数(へんすう)」を紹介するよ。これは、初心者が「むずかしい!」と感じやすいポイントだけど、実はとってもシンプルなんだ 。  

考えてみて。キャラクターがジャンプするとき、だんだんスピードが落ちて、てっぺんで一瞬止まって、まただんだん速く落ちてくるよね。この「今のスピード」をコンピューターに覚えておいてもらわないと、リアルな動きは作れない。

そこで使うのが変数だ。**変数は、「スピード」や「スコア」のような情報を一時的に入れておくための「名前付きの箱」**だと思えばいい 。  

  • 「y方向の速度」という名前の箱を作る。
  • ジャンプしたら、その箱に「15」という数字を入れる。
  • 少しずつ、箱の中の数字を減らしていく。

こうすれば、コンピューターはいつでも箱の中身を見て、「今のスピード」を知ることができるんだ。この魔法の箱が、僕たちの物理エンジンの心臓部になるよ。

コンピューターにおまかせ!「繰り返し」

最後に紹介するのは「繰り返し」ブロックだ。特に「ずっと」ブロックは超便利。

もしキミが誰かに「1秒ごとに手を叩いて」とお願いしたら、言い続けるのが大変だよね。「叩いて、叩いて、叩いて…」。でも、コンピューターなら「ずっと」ブロックの中に「手を叩く」ブロックを一度入れるだけで、キミが止めるまで無限に繰り返してくれるんだ 。  

僕たちの物理エンジンでは、重力の計算や地面にいるかのチェックを「ずっと」休まずにやってもらう必要がある。このブロックが、僕たちの作ったルールを常に働かせてくれるんだ。

さあ、道具の準備は万端だ!いよいよ、メインイベントに進もう!

第2部:いよいよ本番!キミだけの物理エンジンを作ろう!

ここからは、いよいよコーディングの本番だ!科学者のように、一つ一つのステップを「実験」として進めていこう。キミの自由研究ノートに、発見したことをメモしながら進めると、もっと楽しくなるよ。

実験1:重力をプログラミング!

  • 実験の目的と物理の話: 最初の目標は、スプライトが本物みたいに「下に落ちる」動きを作ること。僕たちの世界で物が下に落ちるのは、地球がすべてのものを引っ張る力、「重力」があるからだよね 。僕たちは、スクラッチの中に自分たちだけの重力を作り出すんだ。  
  • コードを作ってみよう:
    1. まず、スプライト(ネコでOK)を選ぶ。
    2. 「変数」カテゴリから「変数を作る」をクリック。「このスプライトのみ」を選んで、「y-velocity」(y方向の速度、という意味)という名前の変数を作ろう。これが僕たちの「落ちるスピード」を記憶する魔法の箱だ 。  
    3. 「イベント」から「緑の旗が押されたとき」ブロックを置く。
    4. 「制御」から「ずっと」ブロックをつなげる。
    5. この「ずっと」ループの中に、まず「変数」の「y-velocityを-1ずつ変える」ブロックを入れる。これが「重力」の正体だ。ループが1周するたびに、下向きのスピードが少しずつ増えていく。これが物理でいう「加速度」なんだ 。  
    6. 次に、「動き」の「y座標を(y-velocity)ずつ変える」ブロックをその下に入れる。これで、スプライトは「y-velocity」の箱に入っている現在のスピードで下に動くようになる 。  
  • 結果の予想と確認: 緑の旗をクリックしてみよう。どうなるかな?スプライトがだんだん速くなりながら、画面の下に落ちていけば大成功!これが僕たちの最初の物理法則だ!

実験2:地面に着地させよう

  • 実験の目的: 今のままだと、スプライトは無限に落ちていってしまう。キャラクターがちゃんと立てるように、固い「地面」を作ってあげよう。
  • コードを作ってみよう:
    1. まず、ステージの背景を選ぶ画面で、下のほうに長方形を描いて地面を作ろう。分かりやすいように、緑色や茶色にしてみよう。
    2. スプライトのコードに戻って、「ずっと」ループの中を改造するよ。
    3. 「制御」から「もし<>なら」ブロックを、「y座標を変える」ブロックの下に入れる。
    4. この<>の部分に、「調べる」カテゴリの「<(地面の色)に触れた>なら」ブロックをはめ込む。スポイトツールを使えば、地面と全く同じ色を簡単に選べるよ 。  
    5. 「もし地面の色に触れたなら」の中に、「変数」の「y-velocityを0にする」ブロックを入れよう。地面に触れたら、落ちるスピードをゼロにするんだ 。  
  • 結果の予想と確認: さあ、もう一度緑の旗を押してみよう。スプライトは地面に落ちて、ピタッと止まったかな?これで地面との衝突(Collision)ができた!でも…あれ?なんだかキャラクターが少し地面にめり込んじゃってないかい?

親子で挑戦!プロの技:めり込みバグを直そう

プログラミングの世界では、思った通りに動かないことを「バグ」って言うんだ。でも、バグは敵じゃない。キミを成長させてくれる最高の友達なんだ!なぜなら、バグの原因を探して直す(デバッグする)ことで、プログラミング的思考がめちゃくちゃ鍛えられるからね 。この「めり込みバグ」は、多くの初心者が経験する有名なバグ。これを直せたら、キミはもうプログラマーの仲間入りだ!  

  • なぜ、めり込むの?: コンピューターはとても素直で、一度に一つのことしか考えられない。「下に動かす」→「地面に触れたかチェックする」という順番で仕事をするから、下に動かした時には、もうちょっとだけ行き過ぎちゃってるんだ 。  
  • 解決策(プロの技):
    1. 「もし地面の色に触れたなら」ブロックの中を改造するよ。「y-velocityを0にする」ブロックはそのままにしておこう。
    2. その下に、「制御」から「<>まで繰り返す」ブロックを入れる。
    3. <>の部分には、「演算」の「<>ではない」ブロックを入れ、その中に「<(地面の色)に触れた>」ブロックをはめ込む。これで「地面の色に触れなくなるまで繰り返す」という意味になる。
    4. この繰り返しブロックの中に、「動き」の「y座標を1ずつ変える」ブロックを入れよう 。  
    これで、「もし地面にめり込んだら、めり込まなくなるまで1ピクセルずつ上に戻す」という賢いプログラムが完成だ! 【さらに上級者向け!】 この修正コードを「ブロックを作る」で一つのカスタムブロックにまとめ、「画面を再描画せずに実行する」にチェックを入れると、この修正が一瞬で行われるようになり、見た目には全くわからなくなるよ 。  

実験3:完璧なジャンプ

  • 実験の目的: 重力と地面ができたら、次はジャンプだ!地面にいるときだけジャンプできて、空中ではジャンプできない、リアルなジャンプをプログラムしよう。
  • コードを作ってみよう:
    1. 「ずっと」ループの中に、もう一つ「もし<>なら」ブロックを追加する。
    2. ジャンプの条件は「上向き矢印キーが押されていて、かつ、地面に触れている」こと。これを実現するために、「演算」の「<>かつ<>」ブロックを使おう。
    3. 左の<>には「調べる」の「<上向き矢印キーが押された>」、右の<>には「<(地面の色)に触れた>」を入れる。これが、無限に空中ジャンプするのを防ぐための重要な仕掛けだ 。  
    4. この「もし」ブロックの中に、「変数」の「y-velocityを15にする」ブロックを入れる。(この数字が大きいほど高くジャンプするよ!)。  
  • 結果の予想と確認: 緑の旗を押して、上向き矢印キーを押してみよう。キャラクターが気持ちよくジャンプして、自然に落ちてきたら、キミだけの基本物理エンジンの完成だ!おめでとう!

第3部:レベルアップ!もっとすごい物理現象に挑戦

基本エンジンができただけでもすごいけど、僕たちの世界にはもっと面白い物理現象がたくさんあるよね。ここからは、上級研究員として、さらにすごい機能を追加していこう!実験ノートの準備はいいかい?

実験4:ボールを弾ませよう!

  • 物理の話: ボールが地面で弾むとき、毎回少しずつ跳ねる高さが低くなるよね。これは、ボールが地面にぶつかる瞬間に、エネルギーの一部が音や熱に変わってしまうからだ。この「跳ね返りやすさ」を表す数値を、物理の世界では「反発係数(はねかえりけいすう)」と呼ぶんだ 。反発係数が1に近いほどスーパーボールみたいによく弾み、0に近いと粘土みたいに弾まない 。  
  • コードを改造しよう: 地面に触れたときのコードを少し変えるだけで、この現象を再現できるよ。 「y-velocityを0にする」ブロックを捨てて、代わりに「y-velocityを(y-velocity * -0.8)にする」ブロックを入れてみよう。
    • * -1の部分は、速度の向きを正反対(上向き)に変える役割。
    • * 0.8の部分は、速度を元の80%に減らす役割。これがエネルギーの損失を表現しているんだ 。  
    この「0.8」という数字を色々変えて、どんな違いが出るか実験してみよう!

実験5:ツルツルからザラザラまで!「摩擦」を作ろう

  • 物理の話: ツルツルの氷の上は滑りやすいけど、ザラザラの絨毯の上は滑りにくい。この動きを邪魔する力のことを「摩擦(まさつ)」と言うんだ 。摩擦がないと、一度動き出したら永遠に止まれなくなっちゃう。  
  • コードを追加しよう:
    1. 横方向のスピードを管理するために、新しい変数「x-velocity」を作ろう。
    2. 右向き矢印キーが押されたら「x-velocityを2ずつ変える」、左向き矢印キーが押されたら「x-velocityを-2ずつ変える」というコードを追加する。
    3. そして、ここが摩擦のキモ!「ずっと」ループの中に、「x-velocityを(x-velocity * 0.9)にする」というブロックを入れる。これで、キーを離しても急にピタッと止まるのではなく、少しツルっと滑ってから自然に止まるようになるんだ 。  
    4. 最後に、「x座標を(x-velocity)ずつ変える」ブロックをループに入れれば完成だ。
    「0.9」の値を「0.5」(ブレーキが強い)や「0.98」(氷の上みたい)に変えるとどうなるか、ぜひ試してみてほしい。

チャレンジミッション:月旅行へ行こう!

  • 物理の話: 宇宙飛行士が月面でフワフワと高くジャンプしているのを見たことがあるかな?あれは、月の重力が地球の約6分の1しかないからなんだ 。  
  • コードで宇宙旅行!: この現象も、僕たちのエンジンなら簡単に再現できる。
    1. 新しい変数「gravity」を作ろう。
    2. 今まで「y-velocityを-1ずつ変える」としていた部分を、「y-velocityを(gravity)ずつ変える」に置き換える。
    3. あとは、キーボードのキーを使って、このgravityの値を自由に変えられるようにするだけ!
      • 「Eキーが押されたとき」→「gravityを-1にする」(地球モード)
      • 「Mキーが押されたとき」→「gravityを-0.2にする」(月モード)  
      • 「Jキーが押されたとき」→「gravityを-2.5にする」(木星みたいな重い星モード)
    たった一つの変数を変えるだけで、ゲームの世界全体がガラッと変わる。これこそが、物理エンジンの面白さなんだ!

物理実験ログ

さあ、これまでの実験結果をまとめてみよう。この表を埋めるだけで、キミの自由研究はぐっと本格的になるよ!  

いじるもの (Parameter)値 (Value)どうなった? (キミの観察)
gravity (重力)-1普通に落ちる
gravity (重力)-0.2月みたいにふわふわ落ちる!
gravity (重力)-3すごく速くドスンと落ちる!
friction (摩擦)0.9ちょっと滑ってから止まる
friction (摩擦)0.5接着剤みたいにすぐ止まる!
bounciness (はねかえり)0粘土みたいに、全然はねない
bounciness (はねかえり)0.8スーパーボールみたいによくはねる!

Google スプレッドシートにエクスポート

第4部:発表しよう!「自由研究」レポートの作り方

すごいぞ!キミはもう立派なゲーム物理学者だ。最後の仕上げに、この素晴らしい研究をみんなに伝えるためのレポートを作ろう。このテンプレートを使えば、誰でも簡単に、分かりやすいレポートが作れるよ。

かんたんレポート・テンプレート

模造紙やノートに、この順番で書いていこう 。  

  1. 題名: 「スクラッチで作る 僕だけの物理エンジン」みたいに、ワクワクするタイトルを大きく書こう!
  2. 研究のきっかけ: 「どうしてこの研究をしようと思ったの?」を自分の言葉で書く。「いつも遊んでいるゲームのジャンプの仕組みが不思議だったから」とか、「自分でゲームを作ってみたかったから」みたいにね 。  
  3. 研究の目的: 「この研究で何を作りたかったか、何を調べたかったか」を書く。「重力や摩擦といった、本物そっくりの物理法則をプログラミングで再現すること」など。
  4. 研究の方法: 「どうやって作ったか」を説明する。ここが一番の見せ場だ!スクラッチの画面のスクリーンショット(画面の写真)を撮って貼り付けたり、ブロックの絵を描いたりして、「こんなコードを組んだよ」と説明しよう。特に工夫したところ(めり込みバグを直したところとか)を書くと、すごく良くなるよ 。  
  5. 結果: 「プログラムを動かしたら、どうなったか」を書く。さっき作った「物理実験ログ」の表をここに大きく載せよう!「重力の値を変えたら、ジャンプの高さがこんなに変わりました」と、グラフにするのもいいね 。  
  6. 考察と感想: これが一番大事な部分!この研究を通して「わかったこと」や「考えたこと」を書く。「変数を一つ変えるだけで、月にも木星にも行けることが分かって面白かった」「ジャンプのめり込みを直すのが難しかったけど、解決できたときすごく嬉しかった」「次は、投げたボールが壁に当たって跳ね返るプログラムを作ってみたい」など、キミが感じたことを素直に書こう 。  

作ったゲームをみんなに見せよう!

キミの作ったすごいプロジェクト、ぜひみんなに遊んでもらおう!

  1. スクラッチのプロジェクト画面の上にあるオレンジ色の「共有」ボタンを押す。これで、世界中の人がキミのプロジェクトを見られるようになるよ。
  2. 共有した後に表示されるページのURL(インターネット上の住所)をコピーする。
  3. 「QRコード 作成 無料」などで検索して、コピーしたURLからQRコードを作ろう 。  
  4. そのQRコードを印刷して、自由研究のレポートに貼り付ければ完成!レポートを読んだ人がスマホで読み取れば、すぐにキミのゲームで遊べるんだ。すごいだろう?

おめでとう!キミはもうゲーム物理学者だ!

やったね!ついにやり遂げた!キミはただゲームで遊んだだけじゃない。その中身をのぞき込み、自分の手でエンジンを作り上げたんだ。それは、本物のエンジニアや科学者がやっていることと全く同じだよ。お父さんは、キミのことを誇りに思う!  

大切なのは、好奇心を止めないこと。「どうして?」「どうなってるの?」と問い続けること。世界は、キミが作ったり発見したりするのを待っている、素晴らしいものであふれている。

次にキミが作り出すものは、一体なんだろう?

もっと知りたいキミへ – お役立ちリンク集

キミの冒険はまだ始まったばかり。次の挑戦のヒントになるリンク集だよ。

  • スクラッチ アイデアページ: 次は何を作ろう?世界中のアイデアがここにある。  
  • スクラッチ チュートリアルページ: スクラッチチームが作った公式の作り方ガイド。  
  • スクラッチ 見るページ: 世界中の子どもたちが作った、すごいプロジェクトがたくさん!  
  • 保護者の方へ:文部科学省「未来の学びコンソーシアム」: 国が運営するプログラミング教育の公式サイトです。家庭での学習をサポートするための、信頼できる情報がたくさんあります。  

おススメのスクラッチ参考書

私も参考にしているスクラッチ参考書を紹介します。どちらもとてもわかりやすいです。

ろぼてく

私の場合は、図書館で借りて試し読みして、分かりやすかったものを購入しています。試し読みは必須です。
手元にずっと置いておき、いつでも参照できるようにすることも重要です。

【無料体験】【全国に教室多数】おススメのプログラミング教室

私が最もおススメするプログラミング教室は、「QUREOプログラミング教室」です。

QUREO」の特徴は、以下にあげる点です。

  • 教室型であり、直接先生からプログラミングを学ぶことができる。
  • 全国に教室数が多く(全国2500教室)、実績豊富
  • ビジュアルプログラミングかつゲーム制作を学習教材に使用していて、取り組みやすい
  • 月謝が比較的安い。
ろぼてく

習い事は、「通いやすさ」と「続けやすさ」の2つが重要ですよね。私も「通いやすさ」を重視して「QUREO」を選びました。

今なら無料体験・キャンペーンも実施しているので、一度お試しすることをおススメします!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

現役エンジニア 歴12年。
仕事でプログラミングをやっています。
長女がスクラッチ(学習用プログラミング)にハマったのをきっかけに、スクラッチを一緒に学習開始。
このサイトではスクラッチ/プログラミング学習、エンジニアの生態、エンジニアによる生活改善について全力で解説していきます!

コメント

コメントする

CAPTCHA


目次