量子プログラミング入門→量子コンピューティングサービス構築入門

量子コンピューター初心者の筆者が日々学びながら、量子コンピュータ上で量子プログラミングできるようなるまでの学習日記を記録していきます。 内容は量子コンピューター入門者向けで、専門家の方からするとおかしな内容があるかもしれません。その際はコメント等でお知らせください!

April 2020

変数のクローン時の動き

Scratchの変数に関して、共有範囲がよくわからなかったのでいろいろ試してみた結果を記載します。
本記事はこちらのコードをベースに書いています。(https://scratch.mit.edu/projects/384836271)


variables_create

変数を作るときに、"すべてのスプライト", "このスプライトのみ"の2種類を選択することができます。
すべてのスプライト向けなのかこのスプライト向けなのかはGlobal変数、Local変数といった感じで比較的わかりやすいですよね。
すべてのスプライト用にした場合は、すべてのストライプから参照、更新可能で、同じ値が全スプライトで共有されます。このスプライトのみにした場合は、そのスプライト内のみで利用可能な変数になります。

よくわからなかったのが、このスプライトのみにした場合で、さらにそのスプライトの中でクローンした場合、その変数はスプライト内で共有の変数なのか、クローン固有の変数なのかです。

結果から言うと、使い方によってはどちらにもなりえるので、使い方に注意する必要があります。
Youtubeでも動きを説明していますのでこちらも参照してください。




親で更新するとスプライト内で共有される

scratch_variable_index

このスクリプトで"index"という変数に着目してください。この変数はクローンされる前の親で変数の値を処理しています。この場合、この変数は親の変数となりスプライト内で共有されます。
つまり、誰かがindexを更新すると全クローンにその変更が反映されます。

クローン内でのみ更新・参照するとクローン固有の変数になる

scratch_variable_xspeed

このスクリプトの"xspeed"という変数の着目してください。
xspeedはクローンの中でのみ更新・参照されます。この場合この変数はクローン固有の変数になります。

コメントお願いします。

あくまで個人的な実験からの動作仕様予測ですので、もし誤り等あればご指摘お願いします。


Scratchの便利な操作

Scratchは一般的なプログラミング言語と違い、視覚的にブロックを組み合わせてプログラムを作成します。そのため、普段使いなれている操作でもどうすればできるのかわからない場合があります。
ここでは覚えておくと便利な操作を紹介していきます。

コピー&ペースト

画面下部にあるバックパックを開きます。ここにコピーしたいブロックをドラッグ&ドロップで追加します。別のプロジェクトや別のストライプを開いて、バックパックからコピーしたいブロックを取り出します。



backpack




全ブロックの一括削除

複数ブロックを一括で削除したいのに、右クリックして一括削除できる時とできないときがありイライラしますよね。

multi-delete1


全部選択できてるように見えるけど1つ削除しか出てこない。
全部を削除したいときは黄色の枠線を右クリックしましょう。そうすればすべて削除できます。

multi-delete2


選択したブロックの一括消去

上記の方法だとスプライト上のすべてのブロックが消えて今います。
選択したブロックだけを消すためには、選択したブロックをドラッグし左のパレットにドロップします。

https://youtu.be/YcE2jbBLCFw

ブロックの検索

他の人のサイトなどを参考にScratchプログラミングしていると、ブロックがどこにあるかわからない場合があります。ブロックをキーワードで検索できると便利なのですが、現在Scratchのブロックを検索する機能はないようです。今後の機能拡張に期待しましょう。



Scratchで簡単に作れるカメラを使ったゲーム

PCやタブレットについているビデオカメラを使って簡単なゲームを作成します。
カメラを使うと視覚的にも楽しく、体を使ったゲームになります。
パソコンにカメラが付いてないという方でもUSBカメラだと比較的安価にカメラ機能を追加することができます。

ボールを配置する

右下のストライプの追加ボタンをクリックしボールを選択します。デフォルトで入っているネコがいれば消しましょう。

ball



ボールに動きを加える

まずは単純にボールに動きを加えましょう。

simple_falling

1) 「旗が押されたとき」(イベント)を追加
2) 「y座標をxxにする」(動き)を追加し値を187にします。これで旗が押されたときにボールが画面の一番上に来ます。
3) 「ずっと」(制御)のループを追加します
4) 「y座標をxxずつ変える」(動き)を追加し値を-5にします。これでボールが上から落ちてくるようになります。この値を変えることでボールの落下速度を変えることができます。

ビデオの拡張機能を追加

ただ単にボールが落ちてくるだけでは面白くないのでゲームの要素を加えていきましょう。
その前にビデオの拡張機能を追加していきます。
extension
画面左下の拡張機能メニューをクリックします。
video_extension
拡張機能リストが表示されるので「ビデオモーションセンサー」を選択します。
video_menu
ビデオモーションセンサーのブロックが追加されました。

ビデオの動きに合わせてボールを動かす

先ほど作った落ちるボールをカメラの動きに合わせて動かすようにしていきます。
virtical_otedama
1) 旗がクリックされたらビデオをオンにします (ビデオ)
2) ビデオの起動に時間がかかる場合があるので2秒待ちます。(制御)
3) ボールを「表示する」おまじないを入れておきます(見た目)
4) 「ずっと」のループの中に「もし~なら」(制御)、「値の比較」(演算)「スプライトのビデオのモーション」(ビデオ)の組み合わせを追加します。これで、「もしボールの上で動きがあったら」という条件になります。
5) 4)で追加した「もし」の中に「xx回繰り返す」(制御)を追加します。
6) 5)のループの中に「y座標をxxずつ変える」(動き)を追加します。
7) 「ずっと」のループの中に「もし~なら」(制御)、「値の比較」(演算)、「y座標」(動き)を追加し、y座標を比較する値を-186にし、「ボールが一番下にきたら」の条件を追加します。
8) 「ボールが一番下にきたら」の中に「xxと2秒言う」(見た目)を追加し、メッセージを「Game Over」にします。
9) 「ボールが一番下にきたら」の中に「ビデオを切る」(ビデオ)を追加します。
10) 「ボールが一番下にきたら」の中に「隠す」(見た目)を追加します。
11) 「ボールが一番下にきたら」の中に「すべてを止める」(制御)を追加します。

点数を数える

点数を数えることで競争できるようにします。
add_score_instruction
1) 左のメニューの変数をクリックし、「変数を作る」を使用し「score」という変数を追加します。
2) 変数の初期化のために「旗が押されたとき」の後に、「scoreを0にする」(変数)を追加
3) 「scoreを表示する」(変数)を追加し、画面上に「score」が表示されるようにします。
4) 「もし、スプライトのビデオのモーション~」のブロックの中に「scoreを1ずつ変える」を追加します。

これで点数が加算されるようになりました。
ここまでで子供と遊ぶゲームとしても十分楽しめると思います。

横の動きを加える

ここから少しずつ複雑になっていきます。
horizontal_move

1)ボールの横の初期値をランダムに設定します。y座標のみ設定していた部分を、「x座標とy座標の両方を設定する」(動き)ブロックに置き換えます。x座標の値を「乱数」(演算)にします。x座標の範囲は-187~187にします。
2) 左の変数メニューを選択し、「横の動き」という変数を作成します。
3) 「もし、スプライトのビデオのモーション~」のブロックの中に「横の動きを乱数にする」(変数)(演算)を追加します。

4) 「20回繰り返す」のループの中に、「x座標を横の動きずつ変える」を入れます。

これでボールに触れた際にランダムに横に動くようになります。

点数に応じてどんどん難しくなるようにする

さらに難しくするために点数が高くなれば高くなるほど、ボールの数が増えるようにします。

falling_ball







 

↑このページのトップヘ