Scratchあるある：ふたりのお金をこうかんする

# ねらい

Scratchでシンプルなゲームをつくって、たまにおこるむずかしいことをせつめいします。

# なんでちゃんとうごかないの？　ということがたまにあります :cry:

# わかりやすいれい：ふたりのお金をこうかんしよう

2ひきのねこが、それぞれ2円と1円をもっています。
もくてきは、**スペースキーをおすと2ひきがお金をこうかんして、1円と2円をもっているようにすること**です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96277/a5a129e9-c7e8-3104-80df-6ed47b0c4d9d.png)

## こんなプログラムをつくってみた

`はいけい`はこんなふうなプログラムにしてみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96277/c5ef9b83-fe93-8d36-a2dd-70617892379c.png)


だいじなところは`お金をこうかんする`をおくってまつ、というところです。
これはイベントといいます。イベントを`Cat1`と`Cat2`におくって、それぞれがお金をこうかんします。

Cat1とCat2のプログラムの中はそれぞれこうなっています。

|Cat1|Cat2|
|---|----|
|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96277/8d2d3fdd-626b-ad19-b3a6-4e95d0ad981d.png)|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96277/12a8b614-1d75-ad00-de6e-04c5cb233a59.png)|

`お金をこうかんする`というイベントをうけとったときに
`Cat1`はこうします。
「`Cat1のお金`　というへんすうを`Cat2のお金`にする」
`Cat2`はこうします。
「`Cat2のお金`　というへんすうを`Cat1のお金`にする」
これでお金が入れかわるようになると思いました。

では、じっさいにうごかしてみましょう〜

→　[うごくページ](https://scratch.mit.edu/projects/355471100)

# なんでちゃんとうごかないの？:frowning2:

あれ？:grimacing:

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96277/c2f2a4fd-6bbe-017b-0710-57b190b0a647.png)

2円と1円が入れかわるだけだったはずなのに、
なぜかりょうほう2円になっています。。。
なんでなんでしょうか！:weary:

# Scratchのなかみをじゅんばんにみてみよう

`へんすう`をまるであらわしてみます。
まるのなかにすうじが入っています。これがあたいです。さいしょは2円と1円になっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96277/e91b6706-47e1-2a81-b95c-80cd4d1ee3ed.png)

`お金をこうかんする`というイベントをおくったので、
よーいどん、でいっしょにうごかしたつもりでした。

でも、Scratchのようなプログラムはこううごきます。

`ちょっとだけどちらかがはやくなる。`

こんかいはCat2のほうがはやかったみたいです。
そうすると

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96277/00485ff6-577c-1a59-60f3-5409aa271ec7.png)

1円というすうじがなくなって、2円になってしまって、どちらも2円になりました。
すうじがかきかえられることを、`うわがき`といいます。うえからかいてけすしてしまうからです。

するとつぎになにがおこるでしょうか。
そうです、やっとCat1がうごきはじめます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96277/66205294-1168-3b4c-5736-2c87806f8969.png)

あーそれじゃだめじゃん！とみんなにいわれそうですが、そうなってしまいました。
1円というほんとうのすうじはきえてしまったので、Cat1はまた2円にされます。

このけっかが、さっきのまちがいだったのですね。

これです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96277/c2f2a4fd-6bbe-017b-0710-57b190b0a647.png)

どうしよう。

# ひとつのやりかた: どこかにのこす

やりかたはたくさんあります。
こんかいは、そのなかでもひとつのやりかたをやってみます。

**まえのすうじがきえないように、どこかにのこす**、というやりかたです。

プログラムのみためがまずちょっとちがいます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96277/5b0c5d4e-2a9b-94e4-0769-a73fd8e94bc9.png)

へんすうがふえていますね。
ふえたのは、`Cat1のべつの手のお金`と`Cat2のべつの手のお金`です。
どちらも0というすうじになっています。

`はいけい`はこんなふうなプログラムにしてみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96277/4755d115-bbb1-d449-056b-9dfdd22f4ecd.png)


Cat1とCat2のプログラムの中はそれぞれこうなっています。

|Cat1|Cat2|
|---|----|
|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96277/e90613bf-34fa-05da-764a-0b62a0ef7aff.png)|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96277/00c0022d-4292-c23b-9974-920a6d9c6493.png)|

ではちょっとうごかしてみましょう。

→ [うごくページ](https://scratch.mit.edu/projects/352295202)

# ちゃんとうごいた！

スペースキーをおすと、このようにちゃんと2円と1円がこうかんされています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96277/f7c4893f-cf13-fa65-60e8-c67ffd39391c.png)

なんでちゃんとうごいたのでしょうか。

しかけはこうなっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96277/d7e98524-a5aa-a07e-2a6b-126300d379ce.png)

えがどらえもんみたいの手みたいになっていますけど、がまんしてね。。。

べつの手のお金というのは、いったんお金をうわがきするためのばしょです。
このときには、まえのお金もちゃんとのこします。

|さいしょにCat2がうごいた|そのつぎCat1がうごいた|
|---|---|
|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96277/f9caa950-e261-3ffc-0c36-a737bb22ba38.png)|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96277/5fe88724-8f12-10fc-6ebd-8b05dd8e0166.png)|

つぎに`にぎりかえる`というべつのイベントをおくってもらいます。
そのときにこううごきます。

|Cat2がにぎりかえる|Cat1がにぎりかえる|
|---|---|
|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96277/28a3cd8e-b947-e277-a152-84b80a5a62d8.png)|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96277/67356eef-0cf9-7a10-f8c1-2fbb4448a240.png)|

だいじなのは、いったんべつの手にすうじをうつしてから、
それがCat1とCat2りょうほうおわったあとに、
つぎのお金をうわがきしています。
そうすることで、まえはきえていたすうじがちゃんとのこるようになりました。

## よかったね〜Catちゃん

2ひきとも「そうだよ、これでいいんだよ」といってくれているみたいです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96277/758d7605-9733-ce5d-0d6b-1fa9e09df47a.png)

# ほかにもいろんなやりかたがある:thumbsup_tone5:

やりかたは**これだけではありません**。
`うわがき`というコンピュータのしごとが、よそうとちがううごきをしたおかげで、こういうことがおきます。:flushed:
ほかにも、Cat1とCat2のじゅんばんがいれかわったら、ちがううごきをするかもしれない、とか、いろんなことがプログラムではおきます。

そのときに、あーでもない、こーでもない、あ！これならいけるかも！といろいろかんがえてみるのがプログラミングのたのしいところです。:relaxed:

# いちばんだいじなこと：みんなでたすけあおう

そして、これがただしいよ、という**こたえはありません**。:point_up:
だから、ともだちのやりかたはちがっていたとしても、**それはそれでいい**んです。:hugging:
ともだちのやりかたのほうがなんかよさそう！とおもったら、それをつかわせてもらえばいいのです。

たとえば「もっとすくないプログラムでできる」とか、そういうかんがえかたでどんどんいいプログラムをかんがえてもいいですね。:two_women_holding_hands:

# 保護者の方へ

小さなお子さん向けに、プログラムを作るときのちょっとしたつまづきと解決方法の例を示しました。

この例題は並列処理と呼ばれるプログラミングの一分野の問題です。同時にたくさんのプログラムが動いたときに、データを壊してしまう可能性があることを意味しています。

このようなことはとてもよく起こります。しかし、意図していない動きをするプログラムが世に出回ってしまうと、大事なお金や情報がなくなったりする危険性があり、こういうことをなくすように正しく動くプログラムを作る仕事は大変重要です。

そんな難しいことをやらなくても、と思われるかもしれませんが、ほんとうにこれに似たことが、すごく簡単なプログラムの中でもたくさん起きます。
上にも書きましたが、正解というプログラムがあって教科書に載っていることはまれでして、正解がない世界でみんなが知恵を振り絞ってプログラムを直したりしていくプロセスが大事だと思います。
世の中のプログラムはこうしてみんなが知恵を振り絞った結晶です。少しでもこういうプロセスに触れておくことで、もしかしたらお子さんが大きくなって、世の中を支えるプログラムを作るようになるかもしれません。