見出し画像

便利な演算ブロックたち【Scratch】

こんにちは。今回はScratch初心者向けの記事になります。

Scratchで自分がよく使う演算ブロックの組み合わせを紹介します。
使用例も紹介します。


真偽値を数値に①

クリックすると拡大できます

真偽値(trueかfalse)を返す六角形のブロックは、数式に含めることができます。
数式に入れた場合これらのブロックは、trueだと1falseだと0として扱われます。

下の2つのスクリプトは同じ挙動をします。今回紹介したものは左側です。
かんたんな「もし~なら」のスクリプトをよりシンプルにすることができます。

使用例

クイズを出し、正解したら得点を1増やすスクリプトです。

真偽値を数値に②

上のスクリプトは、真偽値がtrueだと+1falseだと-1になります。
①と同じように使えます。

下の2つのスクリプトは同じ挙動をします。今回紹介したものは左側です。

使用例

クイズを出し、正解なら得点を1増やし、不正解なら得点を1減らすスクリプトです。

文字列として扱う

「○と○」ブロックで返ってくる値は文字列になります。
そのため、数字を空文字列と結合すれば、文字列として明示的に指定できます。
空文字列を作るには、引数(デフォルトでは「りんご」か「バナナ」)をbackspaceなどで消去してください。

使用例

コスチュームの名前を指定するスクリプトです。
コスチュームを名前が「1」のものにしています。

「コスチュームを○にする」には、引数が文字列だとコスチュームの名前を参照し、引数が数値だとコスチュームの番号を参照する仕様があります。

数値として扱う

「○+○」ブロックで返ってくる値は数値になります。
数字に0をたすことで、数値として明示的に指定できます。

使用例

コスチュームの番号を指定するスクリプトです。
コスチュームを番号が1のものにしています。

コスチュームの名前が数字であるコスチュームが1つもなければ、今回のように数値であることを明示的にする必要はありません。

以上・以下

以上と以下です。
「a≧b」を「a=b または a>b」としてしまうと引数のブロックが2倍必要になるので、ブロックが横に長くなり見づらいかったり、単純にプログラミングがめんどくさくなったりします。

使用例

どこでもつかえます。

年齢が18以上なら成人しているかがtrueになるというコードです。
(いい感じの使用例が思いつきませんでした。ごめんなさい。)

一定間隔の乱数

aの倍数の乱数です。
ランダムながらもなんとなく規則的なものをつくれます。

使用例

モグラたたきのスクリプトです。
モグラを9か所のランダムな座標に表示させています。
座標を決定する際に一定間隔の乱数のスクリプトを使い、出現位置が揃うようにしています。

小数の乱数

乱数ブロックの引数に小数点を入れると、戻り値が小数になります。
桁数の指定ができないので、後述の「任意の桁まで四捨五入」と組み合わせるとより便利です。

使用例

小数の切り下げ、切り上げの問題を出すスクリプトです。
問題を出すたびに小数がランダムに変わるようにしています。


+1と-1をランダムに

乱数に0を入れたくないときに使えます。
先述の「真偽値を数値に②」と同じ仕組みです。

使用例

先述の「一定間隔の乱数」で紹介したモグラたたきを改造し、モグラの出現箇所を9か所から4か所に変更しました。
モグラ座標を指定する際に、+1と-1をランダムに返すスクリプトを使用しています。

無限大

正の数を0で割ることで無限大(Infinity)がつくれます。
不の数を0で割ると負の無限大(-Infinity)になります。
tanを使う方法もあります。

使用例

スプライトの大きさを無限大にして、画面外に移動しています。

Scratchでは、スプライトは画面外へ行けませんが、大きさを無限大にすることでその制限を気にせずに移動できるようになるのです。
また、大きさを無限大にするには、何も描かれていないコスチュームを用意する必要があります(スプライトの大きさの上限はコスチュームによって決まります)。

べき乗

aのn乗を求めるスクリプトです。
計算精度がよくないので、整数のみを扱う場合は「○を四捨五入」をつけるいいと思います。
ある程度はいくつかの「○×○」ブロックで代用できますが、指数nが大きかったり、指数nが一定でなかったりする場合にべき乗のスクリプトは便利です。

使用例

連打ゲームのスクリプトです。
得点を打鍵数の指数関数として計算しています。

補足:n乗根・-n乗

1/n乗は、aのn乗根になります。
-n乗は、1/(a^n)になります。

任意の桁まで四捨五入

aを小数点第n位まで四捨五入するスクリプトです。
nには整数を入れてください。

nが1なら、小数点第一位(10分の1の位)まで四捨五入します。
nが0なら、1の位まで四捨五入するので、「○を四捨五入」と同じ効果になります。
nが-1なら、10の位まで四捨五入します。

「nの10^」の代わりに10や100などの数値を引数にすることもできます。

使用例

1から10までの小数を含む乱数を求めるスクリプトです。
小数の乱数は桁数を指定することができませんが、それを小数点第一位まで四捨五入しています。

補足:小数点以下の桁数をそろえる

四捨五入したとき、繰り上げがある他と小数点以下の桁数がそろわなくなります。

例えば、0.111を小数点第二位まで四捨五入した戻り値は0.11で、小数点以下は2桁になります。
しかし、0.999を小数点第二位まで四捨五入した戻り値は1で、小数点以下の桁数は0になります。
そのため、小数点以下の桁数をそろえたい場合、戻り値によってはさらに小数点や0を結合する必要があります。

以下に、小数点以下の桁数をそろえるスクリプトを示します。
nは小数点以下の桁数、aは入力の小数の乱数、a'は出力結果です。
nには1以上の整数を入れることを前提としています。

2点間の距離

点a (ax, ay)と点b (bx, by)間の距離lを求めます。
三平方の定理を使っています。

「○までの距離」ブロックでは扱えない、クローンとの距離を求めるのにも使えます。

使用例

2つの円が衝突しているかを調べるスクリプトです。
2つの中心どうしの距離が、半径の和と同じかそれより小さい場合に衝突していると判定します。

円A:中心(ax, ay) 半径=ar
円B:中心(bx, by) 半径=br

補足:距離を比べる

距離を比べる場合、平方根をつける必要はありません。

下のスプライトでは、リストの何番目の座標が自身に最も近いかを求めています。
距離どうしの比較なので平方根をつけていません。
また、x座標の差およびy座標の差の2乗を求めるとき、先述の「べき乗」のスクリプトを使っています。

2点間の角度

点a (ax, ay)と点b (bx, by)間の角度θを求めます。
戻り値θの範囲は、-90以上270未満です。

「○のatan」の戻り値は-90以上90以下で、円半周分(180°)の範囲です。
範囲が円一周分(360°)になるように、点bのy座標が点aより小さい場合に180をたしています。

使用例

向きをスプライト1とスプライト2の中点へ向けるスクリプトです。

このように「○へ向ける」ブロックでは扱えない、クローンへ向けたり特定の座標に向けたりする場合に今回紹介したスクリプトが役立ちます。
また、スプライトの向きや座標を変えずに角度を求めるときに便利です。

補足:θの範囲を修正

θをいいかんじに加工して、θを扱いやすい範囲にするスクリプトを2種類紹介します。

-180 < θ ≦ 180
スプライトの向きの範囲と同じです。

0 ≦ θ <360
θが常に0か正の数になります。

範囲を指定

値を1ずつ増やしていき、あるところまで増えたら値をリセットする。
また増やしていき、あるところまで増えたらまたリセットして、またまた・・・。
という処理をおこなうスクリプトです。

aの範囲は0からn-1になります。

下の2つのスクリプトは同じ挙動をします。今回紹介したものは左側です。
「もし~なら」を使うことなくコンパクトにまとめられることがメリットです。

使用例

「走る1」から「走る3」までの3つのコスチュームを繰り返すアニメーションのスクリプトです。

連続を断続に

余りが0になるのは一定周期ごとなので、連続に増えるaを利用してbを断続的に増やしています。
連続的に変わるものと断続的に変わるものを同時に扱いたいときに便利です。

使用例

30フレームごとに秒数を1ずつ増やすスクリプトです。
ちなみにScratchは基本的に約30fpsで動いています。

#Scratch #スクラッチ

この記事が気に入ったらサポートをしてみませんか?