スクラッチを始めよう!番組のスクラッチワールドで遊ぶ

番組を見る

No.19 はかりスパイダーを直せ【算数】

どんな形のものでも大きさをはかることができるというはかりスパイダー。でも…マス目を使ってはかるはずなのに、うまくはかれていない。はかりスパイダーを直して、いろんな形の大きさをはかれるようにするんだ!

いろいろなものの大きさがはかれる世界 ~はかりスパイダーを直せ~

<このスクラッチ・ワールドについて>

葉っぱ、せんべい、手のひら、ハート型など… まっすぐな線で出来ていない形は身の回りにたくさんあるよね。今回のテーマは、そのような不規則(ふきそく)な形をしたものの大きさをはかるということ。じつは、そういうものでも、工夫すると大きさをはかることができるんだ。その方法の1つがマス目を使うこと。はかりたいものにマス目を重ねて、はかりたいものがふれているマス目の数を数える。マス目の大きさを細かくすればするほど正確にはかれるようになるから、みんなも、番組のスクラッチを改造(かいぞう)して、ぜひ、自分でマス目を作ってはかってみてほしい。例えば、学校の地図をスクラッチに取り込んで、校舎(こうしゃ)とグラウンドの大きさを比べてみたり…どんな形のもの、どんな大きさのものでもはかることができるから、ぜひやってみてね。
また、はかるものとして、プログのせんべい、ラムのせんべい、葉っぱがあるけど、はかるものを変えるときは、マス目のプログラムの中の、<◯◯に触れた>の◯◯を、はかるものの名前に変更するのを忘れないでね。

20-1「マス目でいろんなものの大きさをはかろう」

前準備

スクラッチサイトにアクセスして、サインインしよう。
(まだ自分のアカウントを作っていない人は、「スクラッチのはじめ方」にしたがってアカウントを作ってね)
why_programming_19のスタジオ(※NHKサイトをはなれます)を見てみよう。

why_programming_19のスタジオで、プロジェクト「19_1_マス目で大きさをはかろう」を選び、「中を見る」、次に「リミックス」をおして、自分のアカウントにコピーしてね。
(コピーの仕方は「自分の作品を作ろう!リミックス(改造)をする」も読んでね)

ラム

マス目でいろんなものの大きさをはかろう

イメージ画像

ものの大きさをはかるには、いろんなやり方があるけれど、今回はその1つ、「マス目」を使って大きさをはかるやり方を紹介するわ。はかりたいものが何マス分あるかを数えて、それを大きさとするやり方よ。
この方法の良いところは、葉っぱやおせんべい、ハートなど、まっすぐじゃない不規則(ふきそく)な形もはかれたり、日本地図をとりこんで北海道の大きさをはかることが出きたり…どんな形のもの、どんな大きさのものもはかることができるってことね。

ラム

スタンプを使って「マス目」をふやす

イメージ画像

イメージ画像

まず、肝心(かんじん)のマス目のふやし方を教えるわね。
1辺の長さが40の正方形のマス目が「1つ」あるでしょう。これを「スタンプ」という命令を使って増やしているの。スタンプは、ハンコのように自分と同じ姿をスタンプして残すことができる命令で、いくつでも増やすことができるからたくさん分身を作りたいときに使うと便利。
今回はその「スタンプ」で、横10×たて8のマス目を作っているわ。

ラム

イメージ画像

イメージ画像

イメージ画像

まず…
・x座標を-180、y座標150にする
のように、最初にスタンプする位置を決めるの。
それから、“スタンプして横にずらす”という動きをくり返して、横(X軸)方向にスタンプを増やしていきましょう。
そのとき、どのくらいずつずらせばいいと思う?
……それは、マス目の1辺の長さと同じ分になるわね。 そうしないとマス目とマス目の間にすき間ができたり、重なったりして正確にはかれないでしょう? 今回は1辺が40のマス目だから、ずらす数も40。それを10回くり返せば、横1列ができあがるわね。 その命令は…
・10回繰り返す
  ・スタンプ
  ・x座標を40ずつ変える
となっているわね。

ラム

イメージ画像

イメージ画像

次は、横2列目にマス目を動かす命令。
いま、マス目は横1列目の10個目のスタンプをおしたところだから、 まずそれを最初に決めたスタート地点(今回はx座標-180)に戻して、 さらに、たて(Y軸)方向に-40ずらす。これで、マス目は2列目の最初の位置にきたわね。
・x座標を-180にする
・y座標を-40ずつ変える

ラム

イメージ画像

あとは、ここまでのながれを8回くり返せば、横10、たて8のマス目が出来上がるってわけね。
・8回繰り返す
 ・10回繰り返す
  ・スタンプ
  ・x座標を40ずつ変える
 ・x座標を-180にする
 ・y座標を-40ずつ変える
・隠す
※このマス目のスプライトは10×8のマス目を作ったあと、最後にもう一度 x座標を-180、y座標を-40ずらした位置に移動(いどう)しているから、「隠す」命令を足して、そのマス目のスプライトを見えないようにしないと、ハンパな形のマス目になるから注意しましょ!

ラム

はかるものにふれたマスの数を数える

イメージ画像

イメージ画像

さぁ、これでマス目は完成だけど、これだけじゃ物足りないわね。
はかるものがマス目にふれたとき、そのマスの数を自動で数えられるようにしましょう。
そういうときに使うのは「変数」よ。 ”変数は変化していく数をあつかうときに使う”と覚えておいてね。たとえばゲームの得点なんかも変数を使って表示することが多いわ。

ラム

プログラムに、オレンジ色のブロックで、
・はかるものにふれたマスの数▼を0にする
とあるわね。これが変数のブロックなんだけど、実はこれだけだと足りないの。
データカテゴリーをえらぶと、中に
・はかるものにふれたマスの数▼を1ずつ
 変える
というブロックがあるから、それを使ってこんな風な命令をしてみて。
・もし 葉っぱ▼に触れたなら
・はかるものにふれたマスの数▼を1ずつ
 変える

こうすると、マス目が葉っぱにふれたとき、自動的に数を1ずつ増やして表示させることができるわ。
はかるものにふれたマスの数▼を0にするというブロックは、 プログラムの最初にあることで、変数の数を0、つまりリセットしているの。
そうしないと、変数の表示はいつまでも増えつづけてしまうから、正確な数字を表さないようになるわ。

ラム

はかるものがマス目にふれたら色を変えよう

イメージ画像

イメージ画像

もうすこし工夫してみましょう。はかりたいもの(ここでは「葉っぱ」)とマス目がふれているとき、そのマス目の色を変えれば、見た目にもわかりやすくなるわね。
今回はオレンジ色のマス目が用意されているから見た目カテゴリーの中から
・コスチュームをオレンジ色のマス目▼に
 する

をえらんでプログラムに加えましょう。ただし、それだけだとダメよ。
これだと、一度オレンジになったあと、全てのマスがオレンジ色になってしまうわ。
スタンプするたびに、
・コスチュームをマス目▼にする
ようにして、元のマス目に戻すことを忘れないでね。
さぁ、これでマス目を使って大きさをはかるプログラムができたわよ。

ラム

もっと正確(せいかく)にはかってみよう

イメージ画像

イメージ画像

イメージ画像

今度は、マス目を使って、もっと正確にはかる方法を紹介(しょうかい)するわ。
たとえば おせんべいをはかったとき、たくさんおせんべいにふれているマス目も、ほんの少ししかふれていないマス目も出てくるわよね。
そのどちらも、同じ「1」として数えるのはあまり正確とは言えないわね。
そこで…もっと正確にはかる方法その①
マス目が、おせんべいにだけふれているときは「1」。
マス目が、おせんべいと背景の色(水色)の両方にふれているときは「0.5」と 数えるようにしたの。
おせんべいと背景の色(水色)の両方にふれている部分には、「0.1」のところも「0.9」のところもあるけど、その間をとって「0.5」とすることで実際の大きさに近い値(あたい)が求められるというやり方なの。

ラム

プログラムにすると…、
・もし プログせんべい▼ に触れたなら
 ・もし 水色に触れたなら
  ・はかるものに触れたマスの数を
   0.5ずつ変える

  ・コスチュームをうすいオレンジに
   する

 ・でなければ
  ・はかるものに触れたマスの数を
   1ずつ変える

  ・コスチュームを
   オレンジ色のマス目▼にする

ラム

イメージ画像

イメージ画像

それじゃ、もう1つ。
もっと正確にはかる方法その②を教えるわ。それはマス目を小さくしてはかる方法なんだけど、小さくすればするほど はかるものの形に近づくから、より正確にはかることができるのよ。
今回は、1辺の長さが10のマス目(マス目小)を準備してあるわ。
マス目を小さくしたときは、その分、スタンプをくり返す回数を増やしてマス目全体の大きさを調整(ちょうせい)するのを忘れないでね。
それに、方法はこれだけじゃないから、みんなもいろんなやり方を考えてみるといいわ。

ラム

今回のまとめ

  • スタンプはいくつでもふやせるから、「マス目」のように分身をたくさんつくりたいときに便利
  • はかるものにふれた数を「変数」で数えると便利。また、ふれたところの色を変えてみたりすると、
    見た目にも大きさが分かりやすくなる
  • 細かいマス目ではかるなど、より正確にはかる方法がある

今回のリミックス

・身の回りにあるものをスクラッチにとりこんで、はかってみよう!