ねらい
Scratchでシンプルなゲームをつくって、たまにおこるむずかしいことをせつめいします。
なんでちゃんとうごかないの? ということがたまにあります
わかりやすいれい:ふたりのお金をこうかんしよう
2ひきのねこが、それぞれ2円と1円をもっています。
もくてきは、スペースキーをおすと2ひきがお金をこうかんして、1円と2円をもっているようにすることです。
こんなプログラムをつくってみた
はいけいはこんなふうなプログラムにしてみました。
だいじなところはお金をこうかんするをおくってまつ、というところです。
これはイベントといいます。イベントをCat1とCat2におくって、それぞれがお金をこうかんします。
Cat1とCat2のプログラムの中はそれぞれこうなっています。
| Cat1 | Cat2 |
|---|---|
![]() |
![]() |
お金をこうかんするというイベントをうけとったときに
Cat1はこうします。
「Cat1のお金 というへんすうをCat2のお金にする」
Cat2はこうします。
「Cat2のお金 というへんすうをCat1のお金にする」
これでお金が入れかわるようになると思いました。
では、じっさいにうごかしてみましょう〜
→ うごくページ
なんでちゃんとうごかないの?
あれ?![]()
2円と1円が入れかわるだけだったはずなのに、
なぜかりょうほう2円になっています。。。
なんでなんでしょうか!![]()
Scratchのなかみをじゅんばんにみてみよう
へんすうをまるであらわしてみます。
まるのなかにすうじが入っています。これがあたいです。さいしょは2円と1円になっています。
お金をこうかんするというイベントをおくったので、
よーいどん、でいっしょにうごかしたつもりでした。
でも、Scratchのようなプログラムはこううごきます。
ちょっとだけどちらかがはやくなる。
こんかいはCat2のほうがはやかったみたいです。
そうすると
1円というすうじがなくなって、2円になってしまって、どちらも2円になりました。
すうじがかきかえられることを、うわがきといいます。うえからかいてけすしてしまうからです。
するとつぎになにがおこるでしょうか。
そうです、やっとCat1がうごきはじめます。
あーそれじゃだめじゃん!とみんなにいわれそうですが、そうなってしまいました。
1円というほんとうのすうじはきえてしまったので、Cat1はまた2円にされます。
このけっかが、さっきのまちがいだったのですね。
これです。
どうしよう。
ひとつのやりかた: どこかにのこす
やりかたはたくさんあります。
こんかいは、そのなかでもひとつのやりかたをやってみます。
まえのすうじがきえないように、どこかにのこす、というやりかたです。
プログラムのみためがまずちょっとちがいます。
へんすうがふえていますね。
ふえたのは、Cat1のべつの手のお金とCat2のべつの手のお金です。
どちらも0というすうじになっています。
はいけいはこんなふうなプログラムにしてみました。
Cat1とCat2のプログラムの中はそれぞれこうなっています。
| Cat1 | Cat2 |
|---|---|
![]() |
![]() |
ではちょっとうごかしてみましょう。
→ うごくページ
ちゃんとうごいた!
スペースキーをおすと、このようにちゃんと2円と1円がこうかんされています。
なんでちゃんとうごいたのでしょうか。
しかけはこうなっています。
えがどらえもんみたいの手みたいになっていますけど、がまんしてね。。。
べつの手のお金というのは、いったんお金をうわがきするためのばしょです。
このときには、まえのお金もちゃんとのこします。
| さいしょにCat2がうごいた | そのつぎCat1がうごいた |
|---|---|
![]() |
![]() |
つぎににぎりかえるというべつのイベントをおくってもらいます。
そのときにこううごきます。
| Cat2がにぎりかえる | Cat1がにぎりかえる |
|---|---|
![]() |
![]() |
だいじなのは、いったんべつの手にすうじをうつしてから、
それがCat1とCat2りょうほうおわったあとに、
つぎのお金をうわがきしています。
そうすることで、まえはきえていたすうじがちゃんとのこるようになりました。
よかったね〜Catちゃん
2ひきとも「そうだよ、これでいいんだよ」といってくれているみたいです。
ほかにもいろんなやりかたがある
やりかたはこれだけではありません。
うわがきというコンピュータのしごとが、よそうとちがううごきをしたおかげで、こういうことがおきます。![]()
ほかにも、Cat1とCat2のじゅんばんがいれかわったら、ちがううごきをするかもしれない、とか、いろんなことがプログラムではおきます。
そのときに、あーでもない、こーでもない、あ!これならいけるかも!といろいろかんがえてみるのがプログラミングのたのしいところです。![]()
いちばんだいじなこと:みんなでたすけあおう
そして、これがただしいよ、というこたえはありません。![]()
だから、ともだちのやりかたはちがっていたとしても、それはそれでいいんです。![]()
ともだちのやりかたのほうがなんかよさそう!とおもったら、それをつかわせてもらえばいいのです。
たとえば「もっとすくないプログラムでできる」とか、そういうかんがえかたでどんどんいいプログラムをかんがえてもいいですね。![]()
保護者の方へ
小さなお子さん向けに、プログラムを作るときのちょっとしたつまづきと解決方法の例を示しました。
この例題は並列処理と呼ばれるプログラミングの一分野の問題です。同時にたくさんのプログラムが動いたときに、データを壊してしまう可能性があることを意味しています。
このようなことはとてもよく起こります。しかし、意図していない動きをするプログラムが世に出回ってしまうと、大事なお金や情報がなくなったりする危険性があり、こういうことをなくすように正しく動くプログラムを作る仕事は大変重要です。
そんな難しいことをやらなくても、と思われるかもしれませんが、ほんとうにこれに似たことが、すごく簡単なプログラムの中でもたくさん起きます。
上にも書きましたが、正解というプログラムがあって教科書に載っていることはまれでして、正解がない世界でみんなが知恵を振り絞ってプログラムを直したりしていくプロセスが大事だと思います。
世の中のプログラムはこうしてみんなが知恵を振り絞った結晶です。少しでもこういうプロセスに触れておくことで、もしかしたらお子さんが大きくなって、世の中を支えるプログラムを作るようになるかもしれません。


















